SNAT:实现没有公网IP的ECS实例借助有公网的ECS访问外网,但是外网无法访问到内网IP;(参考:https://blog.tag.gg/showinfo-3-36321-0.html)
DNAT:实现外网通过端口映射访问到内网服务器,但是不能实现内网ECS访问到外网。(本教程)
说明:SNAT和DNAT结合后可以实现,无公网ip的服务器既可以通过有公网ip的服务器访问公网,也可以实现通过有公网ip服务器的ip+端口访问到无公网ip服务器的端口。
服务器信息如下:
服务器1(有公网IP):8.134.0.0 私网IP:172.19.219.123
服务器2(无公网IP):172.19.219.126
实现目标:将8.134.0.0的811端口转发到172.19.219.126 的22端口,实现通过8.134.0.0:811端口访问到172.19.219.126 的22端口。
方法:(记得在安全组中放行811端口)需参考SNAT方法设置后再参考如下设置。
登录有公网ip的服务器执行如下命令即可:
格式:
命令如下:iptables -t nat -A PREROUTING -p tcp --dport 有公网IP的ECS端口号 -j DNAT --to-destination 目标内网ECS的内网IP加端口号
iptables -t nat -I POSTROUTING -p tcp --dport 有公网IP的ECS端口号 -j MASQUERADE
解释:将8.134.0.0的811端口转发到 内网ip172.19.219.126的22端口,具体端口可以根据自己情况修改。iptables -t nat -A PREROUTING -p tcp --dport 811 -j DNAT --to-destination 172.19.219.126:22
iptables -t nat -I POSTROUTING -p tcp --dport 811 -j MASQUERADE
设置后就可以通过8.134.0.0的811端口登录172.19.219.126 的22端口了,如图。
执行如下命令可以看到nat转发规则情况
iptables -L -n -v -t nat
题外话:
如果规则添加错了需要删除怎么办?
删除nat规则,可以用如下命令:
1、先执行如下命令查看规则的序号(--line-numbers)
2、例如我们要删除POSTROUTING中的第1条规则,可以执行如下命令iptables -L -n -v -t nat --line-numbers
执行后就删除了这条规则。sudo iptables -t nat -D POSTROUTING 1
亲爱的:若该文章解决了您的问题,可否收藏+评论+分享呢?
文章评论 本文章有个评论