在双网卡linux系统中:
enp5s0 接入外网,ip :192.168.1.107
enp4s0 设置静态ip :192.168.2.1 ,并在该网口上搭建dhcp服务器,再接入PC2到该网口,PC2获取到ip: 192.168.2.100
现在我要让 PC2能通过enp4s0上外网,设定如下iptables规则:
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o enp5s0 -j MASQUERADE \\从enp4s0来的数据包都伪装成enp5s0的数据从enp5s0出去
iptables -t nat -A PREROUTING -s 192.168.2.0/24 -p udp --dport 53 -j DNAT --to-destination 114.114.114.114 \\ 192.168.2.0/24的解析dns都通过114.114.114.114
即把enp4s0中进来的数据包通过地址转换后从enp5s0发送出去,这样就能上外网了,我的疑问是,enp4s0出去的数据包通过enp5s0出去后源地址经过NAT转换成enp5s0的地址了,那么同enp5s0的收到的数据包怎么才能正确的返回到enp4s0呢
我猜应该是有类似SESSION一样东西记录了,路由器好像也是这原理。
其实原理也好猜想,lan到wan做snat,wan到lan应该是通过目的port来正确路由,上面的情况也是一样的原理,只是查看ipables规则和路由表都没看到有相应的设定,所以一直很疑惑
我明白了,nat转换的时候kernel中conntrack会有跟踪记录