SNAT(Source Network Address Translation)和DNAT(Destination Network Address Translation)都是iptables中的NAT(Network Address Translation)功能的一部分,用于在数据包进出防火墙时修改源和目标IP地址。
SNAT用于修改数据包的源IP地址。当数据包从内部网络(私有网络)流向外部网络(公共网络/互联网)时,防火墙可以将数据包的源IP地址修改为防火墙的公网IP地址,使得目标服务器回复数据包时能够正确发送回防火墙,然后再由防火墙转发给内部网络的目标机器。
通常用于允许内部网络中的机器访问外部网络,同时隐藏内部网络的真实IP地址,实现IP地址的伪装。
DNAT用于修改数据包的目标IP地址。当数据包从外部网络(公共网络/互联网)流向内部网络(私有网络)时,防火墙可以将数据包的目标IP地址修改为内部网络中某个具体机器的私有IP地址,从而确保数据包能够正确送达目标机器。
通常用于端口映射或服务器的负载均衡,将外部网络的访问请求转发给内部网络中的特定机器。
实验环境为阿里云ECS
服务器A:内网网卡:eth0 内网IP:192.168.1.10
服务器B:内网网卡:eth0 内网IP:192.168.1.20
服务器B:外网网卡:eth1 外网IP:203.195.454.182
shellecho 1 > /proc/sys/net/ipv4/ip_forward
或者
shellecho "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p
如果没有iptables的话就先安装iptables
shellyum -y install iptables-services systemctl start iptables systemctl enable iptables
允许192.168.1.0/24网段通过B服务器上网
shelliptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
或者 指定允许某个ip通过B服务器上网
shelliptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.10 -j SNAT --to 203.195.45.182
保存iptables配置
shelliptables-save > /etc/sysconfig/iptables
需要将网关地址指向B服务器的私网ip
shellroute add default gw 192.168.1.20
修改后查看路由,出现一下第一行的配置说明没问题了
shell# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
> 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.0.20 0.0.0.0 UG 0 0 0 eth0
到这一步还不行,还需要设置VPC路由表
发现ping百度和yum源都是可以的,路由也没问题
iptables规则格式
shelliptables -t nat -A PREROUTING -p tcp -d <公网服务器内网IP> --dport <需要转发的端口> -j DNAT --to-destination <内网服务器IP地址>:<代理到内网服务器的端口>
例:将B服务器的122端口代理到A服务器的22端口用于ssh登录
shelliptables -t nat -A PREROUTING -p tcp -d 192.168.1.20 --dport 122 -j DNAT --to-destination 192.168.1.10:22
iptables规则格式
shelliptables -t nat -A POSTROUTING -p tcp -d <公网服务器内网IP> --dport <代理到本机的端口> -j SNAT --to-source <本机IP地址>
例:
shelliptables -t nat -A POSTROUTING -p tcp -d 192.168.1.20 --dport 22 -j SNAT --to-source 192.168.1.10
本文作者:YOUWEI
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 ™ 许可协议。转载请注明出处!