阿里云ECS主机自建SNAT,实现没有公网的主机通过有公网的主机访问外网

admin1681年前未命名182

的需求:
SNAT:实现没有公网IP的ECS实例借助有公网的ECS访问外网
环境需求:
首先有公网的主机与没有公网的主机必须同一个VPC安全组(确保两个主机内网互通才可以)

配置:
注意:全程都是在有公网的主机上操作。

第一步:开启ECS的ip转发功能

/etc/sysctl.conf

加入 

net.ipv4.ip_forward = 1

截屏2024-08-06 16.08.41.png

保存退出,然后使用 sysctl -p 命令使上面的修改生效。

阿里云路由表

74ae8c213bc85861d7f2c7ff19599198.png

第三步:设置iptables 的NAT转发规则


iptables -t nat -I POSTROUTING -s 192.168.0.0/16 -j SNAT --to-source  192.168.0.1


可以这样理解 iptables -t nat -I POSTROUTING -s VPC的IP段 -j SNAT --to-source 有公网IP的ECS内网IP


执行

iptables-save > /etc/sysconfig/iptables

永久生效,现在没有内网的ECS就可以访问公网了。




2、设置DNAT规则

DNAT需要两条命令:

同样不要照搬复制,需要根据你的实际情况修改下IP

iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 172.16.93.38
iptables -t nat -I POSTROUTING -p tcp --dport 80 -j MASQUERADE

可以这样理解:

iptables -t nat -I PREROUTING -p tcp --dport 有公网IP的ECS端口号 -j DNAT --to 目标内网ECS的内网IP

iptables -t nat -I POSTROUTING -p tcp --dport 有公网IP的ECS端口号 -j MASQUERADE

比如上面的示例中,是把有公网IP的ECS 80端口映射到了172.16.93.38这个内网实例的80端口。


回车执行后要永久生效,还需要保存在iptables配置文件中:

iptables-save > /etc/sysconfig/iptables

同样的,如果使用vi /etc/sysconfig/iptables命令查看iptables配置文件,就会发现多了两条nat表的dnat转发规则:


截屏2024-08-06 16.05.15.png



前后端口映射不一致怎么办?简单啊,在/etc/sysconfig/iptables内的目标IP后面直接加特定的端口号就行



阿里云教程https://developer.aliyun.com/article/607330?spm=a2c6h.12873639.article-detail.9.283337db8zVcrg



发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。