使iptables网关出口IP动态变化
Linux自带的防火墙iptables,拿来做网关非常容易(/etc/sysconfig/iptables)。
*filter -A INPUT -p tcp -j ACCEPT -A INPUT -p udp -j ACCEPT -A OUTPUT -p tcp -j ACCEPT -A OUTPUT -p udp -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -i eth1 -j ACCEPT -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -i eth+ -j ACCEPT COMMIT *nat -A POSTROUTING -o eth0 -j MASQUERADE COMMIT
另外, 要开启操作系统的包转发功能:
sudo sysctl -w net.ipv4.ip_forward=1
其实主要就是NAT表里的 MASQUERADE 选项,他会自动选择出口。如果要给内网指定的IP段分配特定的出口,则需要使用到SNAT:
*nat -A POSTROUTING -s 192.168.0.0/16 -o eth0 -j SNAT --to-source 183.10.31.88 COMMIT
好,那如果由于压力大。则需要大量端口,那么就需要多个出口IP。这时就需要用到IP池了:
*nat -A POSTROUTING -o eth0 -j SNAT --to-source 183.10.31.100-183.10.31.200 COMMIT
内外网的端口映射(DMZ)用DNAT也轻松搞定:
*nat -A POSTROUTING -d 192.168.10.31 -j MASQUERADE -A PREROUTING -p tcp -d 183.10.31.122 --dport 3306 -j DNAT --to-destination 192.168.10.31:3306
COMMIT
此时再对iptables做下优化,就大功告成了!