本帖最后由 Gocigoci 于 2020-2-8 23:48 编辑
端口转发使用端口转发,可以实现外网访问内网的服务。虽然大家都懂,我还是简单说下。 SMB端口转发案例:44500 -> 445我们可以设置路由器,把来自外网的对44500端口的访问,转发到内网的服务器的445端口。 当我们访问路由器的公网ip:对外端口时,就好像访问内网机器:服务端口。也就是110.110.110.110:44500自动被端口转发成192.168.1.2:445。 市面上的路由器都支持端口转发,大家根据自己的品牌,可以搜索端口转发教程,我这里以OpenWrt的命令行配置为例。
进OpenWrt路由器,输入以下代码: cat >>/etc/config/firewall<<EOF
config redirect option target 'DNAT' option src 'wan' option dest 'lan' option proto 'tcp udp' option src_dport '44500' option dest_ip '192.168.1.2' option dest_port '445' option name 'Forwarding44500' EOF
/etc/init.d/firewall restart
确认即可实现端口转发。现在,当你从外网访问110.110.110.110:44500时,会自动被端口转发到192.168.1.2:445。也就是:访问路由器的公网ip:对外端口时,就好像访问内网机器:服务端口。
你使用iPhone,安卓甚至是Mac 都可以开开心心的从外网访问内网的Windows服务器里面的服务了。记得把Windows的防火墙打开( 方法点我):
然而在远在异地的你,使用Windows却不能访问家里的SMB服务,接下来才是本文重点。
你还需要DNAT当你使用iPhone连接SMB服务时,可以使用除了445端口外的其他端口。但是Windows是不支持445之外的端口的。端口被封杀,只能端口转发,而端口转发后,Windows又不支持!
幸亏OpenWrt的iptables可以解君愁。
假定你在宿舍访问家里的文件 - 你(在家里的)服务器使用44500端口提供服务
- 你(在宿舍)使用OpenWrt类路由器(许多路由固件都是基于OpenWrt源码),支持iptables
- 你访问了非常规端口44500的服务,但你的应用只支持常规端口445
此时,进路由器,输入如下命令: iptables -t nat -I PREROUTING -p tcp -d 6.1.1.1 --dport 445 -j DNAT --to 110.110.110.110:44500
解释一下这段代码,当路由器发现局域网内的请求满足以下条件时,自动进行DNAT(目的网络地址转换):
- 当请求目的ip 为6.1.1.1,且目的端口为445(你也可以改成任意有效的ip地址)时
- 把目的ip改成110.110.110.110,端口改成44500,这里是服务器所在路由器的外网ip,你要改成自己的
- 反过来。当收到来自110.110.110.110:44500的包时,自动修改成6.1.1.1:445
这里假定宿舍的Windows局域网地址为192.168.1.5(你可以改成自己的);在宿舍的Windows映射网络驱动器窗口中输入地址\\6.1.1.1,即可以访问家里110.110.110.110:44500的服务。 当你的服务只能使用特定端口时,都可以利用OpenWrt的iptables来解决这个问题。
|