我们经常默认创建伪装上网规则,再端口映射后用户访问内网的服务器
此时内网服务器无法获取用户的正式IP而是路由器的LAN口IP
通过以下两种方法可以实现获取用户真实的公网IP
IP—–Firewall—-source nat
在NAT栏目中添加 masquerade IP伪装的时候要这样写:
方法一:
General选项
Chain:srcnat
Src.address:192.168.0.0/24(你内网的IP段)
其他留空
Action选项
Action:masquerade
重点:
General选项中 src.address 要写自己的内网网段比如192.168.0.0/16
任意(0.0.0.0/0)地址或不写的话就会出现以上都变成内网网关问题!
方法二:
General选项
Chain:srcnat
Out. Interface 选中LAN即内网网卡 前面选择非(出口非LAN口的意思)
其他留空
Action选项
Action:masquerade
上图中LAN为内网网卡,具体情况按你自己ROS的内网网卡名为准。
双击原来建立的srcnat规则 masquerade(用于伪装上网),在General选项卡的
Out. Interface选中LAN即内网网卡,单击将前面的小框,在框中出现!最后点击OK完成设置。
以上两种方法都可以实现端口映射后作为内网的服务器可以获取到客户端的源地址及客户端真实的公网IP
第二种方法会存在以下问题:
但同时导致了别一个问题,就是内网用户不能用外部IP访问映射的内部服务器(即DNAT的服务器公网端口,怎么测试了?比如您的公网IP是123.77.35.32,在内网的服务器上telnet 123.77.35.32 22,22为映射的SSH端口,如果不通,就需要进行后续设置了。 ),再增加一条对内网的规则,点击IP — Firewall — NAT,打开NAT配置界面,点击”+”(加号),在”General”选项卡中,设置Chain为 “srcnat”,Src. Address为”192.168.0.0/16″(由于木子的内网为192.168.0.0/16 C类网段),所以在此将子网设置为16,也就是255.255.0.0,Action设置为”masquerade”,设置好后如下图所示,这时候就可以正常访问了。


[root@haproxy ~]# telnet 123.77.35.32 22
Trying 123.77.35.32...
Connected to 123.77.35.32.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4
^]
telnet> quit
Connection closed.
至此,内外网都能正常访问了且外网访客IP也是正确的,此时内网用外网IP访问WEB时,显示的IP是内网网关地址,用这种方法可以实现内外网用户都用网关外部IP访问映射的内部服务,并解决了外部用户显示的IP不正确问题,当然这种方法内网用户显示的IP还是不正确的,要解决内网显示IP问题,可以在ROS中设DNS服务器,用域名来访问,内网访问内网IP,外网访问外网IP就能完美解决。因为木子主要是要知道外网访客IP,内网IP并不重要,所以至此也算解决了此问题。
haproxy、Nginx、Traefik配置
需要注意的一点是,如果您的后端还有使用haproxy、Nginx、Traefik等反向代理,可能还需要进行一些其它配置,比如haproxy、Nginx需要添加一条规则option forwardfor
(这是7层透传),方能够保证后端服务器可以获取到公网IP地址信息。
三平台同步更新:
博客: https://www.oubayun.com
知乎: 欧巴云
微信公众号: 欧巴云编辑于 2021-04-23 17:10
本文链接:https://www.aiunk.com/1500/
“虽然我们每个人都是宇宙中微不足道的尘埃,但可能是彼此眼中最亮的星。”
评论(0)