iptables的地址伪装MASQUERADE

本文说明iptables的MASQUERADE的含义。

iptables的SNAT是source networkaddress translation的缩写,即源地址转换,一个内网请求经过网关访问外部互联网上的资源时,网关路由器会将内网源地址转换为外网IP再发出。故而目标服务器上收到的源IP是公网IP。

iptables的DNAT是destination networkaddress translation的缩写,即目标地址转换。一个来自外部互联网上的请求,需要穿透内网访问内网的某个服务,网关路由器上就需要将外部IP转成内部IP,这样请求就能在内网环境中正常路由。

通常使用比较多的是 SNAT,举例如下:

iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -o eth0 -j SNAT --to-source xx.xx.xx.xx

注意:192.168.0.0/255.255.255.0可以简写成192.168.0.0/24

注意:--to-source可以简写为--to

注意:假如有多个公网IP可选,--to-source可以写多个IP用逗号分隔,如果是IP段,起始IP用杠相连。

SNAT基本解决了服务器是固定IP的场景,但有种场景是服务器或者网关的IP为动态IP,此时就无法提前写死了,此时MASQUERADE的用武之地就到了,它实现自动从网卡获取动态IP,自动做SNAT:

iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -o eth0 -j MASQUERADE

特别注意:通常我们需要通过-o来指定哪个网卡,有时候我们也可以设置除lo之外的任意网卡,写法为:! -o lo,之所以要排除掉lo,是因为域名解析时需要走lo,对lo进行SNAT会导致DNS缓存出问题。

发表于 2023年10月09日 11:22   评论:0   阅读:214  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo