ROS 动态端口映射
RouterOS解决ADSL动态IP端口映射和显示IP问题。
环境:ADSL动态IP,ROS网关10.0.0.1,内网IP:10.0.0.9,端口:443,主要用于网站web,https访问(NAS建的Web Station)
需求:1、外网直接访问域名https://www.myxzy.com(已绑定ADSL获取的IP地址,本站没开HTTPS访问也没做绑定,这边只是做演示),可以直接打开网站
2、内网直接访问https://www.myxzy.com,可以直接打开网站
3、可以正常获取外网客户端访问IP
详细图文操作:
1、端口映射
使用Winbox打开ROS路由器,打开IP --> Firewall --> NAT,创建一条dstnat策略,其中“Chain”设为dstnat,“Dst.Address”设为ADSL获取到的公网IP地址,“Protocol”设为6(tcp),“Dst.Port”设为443,“Action”设为dst-nat,“To Address”设为10.0.0.9,“To Ports”设为443。
右击该条策略,选择“comment”,输入“443”,名字可以随便输,但是和脚本中用到的要一样的。
端口映射已经可以了,外部网路可以通过公网IP/域名访问了内网10.0.0.9这台的网站了,但是内网用户不能通过公网IP/域名访问了。
2、内网和外网访问以及IP显示问题
由于使用的是ADSL PPPoE拨号动态获取IP地址,所以会有一条srcnat策略,Action设置为“masquerade”,masquerade是srcnat的一个特例,主要用在无固定ip网关的情况下,比如adsl拨号等。由于NAT方设置较masquerade复杂,加上现在大量的ROS教程都是以masquerade方式共享上网,所以目前在用的ROS大多数采用masquerade设置共享。如果不进行设置客户端显示IP都会是网关地址。
修改这条srcnat策略,“Out.Interface”设为!LAN,这边LAN-bridge1是桥接了所有内网网口。
创建一条srcnat策略,其中“Chain”设为srcnat,“Src.Address”设为10.0.0.0/23(根据子网掩码设置),“Action”设为masquerade
3、脚本更新公网IP地址
由于是动态IP地址,每次会有不一样的,所以这边需要添加一个脚本用于更新公网IP地址。
system --> script,新建一个脚本,ADSL-PPPoE是创建的PPPoE拨号的名称,443是策略的名称
:global ipaddr [/ip address get [/ip address find interface=pppoe-out1] address]
:set ipaddr [:pick $ipaddr 0 ([len $ipaddr] -3)]
:global oldip [/ip firewall nat get [/ip firewall nat find comment="5000"] dst-address]
:if ($ipaddr != $oldip) do={
:log info [/ip firewall nat set [/ip firewall nat find comment="5000"] dst-address=$ipaddr]
}
system --> schedule,新建一个计划,Interval是间隔时间,其中的443-ip是上面创建的脚本名称
到此端口映射已经完成,内网外网都可以访问。(脚本名需使用 "" 如 :execute "443-ip")
4、回流设置(建议不用设置该策略)
创建一条srcnat策略,其中“Chain”设为srcnat,“Src.Address”设为10.0.0.0/24,“Dst.Address”设为10.0.0.9,“Protocol”设为6(tcp),“Dst.Port”设为443,“Action”设为src-nat,“To Address”设为ADSL获取到的公网IP地址,“To Ports”设为443。
右击该条策略,选择“comment”,输入“443_2”,名字可以随便输,但是和脚本中用到的要一样的。
回流设置好了,内网用户可以通过公网IP/域名访问了内网10.0.0.9这台的网站了。
回流,就是将内网源地址为网段的所有机器对所有目标地址的需求全都进行源地址转换为外网IP。所有从外网回来的数据通过外网IP再回传到内网的机器,这样就保证了内网上网正常,但这样的效率下降到原来的50%,对于masquerade来共享上网时,内网访问内网服务器显示的IP是网关地址还是外网IP是一样的,所以明显不合算。