闲来无事,今天测试了下列命令。
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
# 如下命令表示把所有10.8.0.0网段的数据包
# SNAT成网卡eth0的ip然后发出去
# MASQUERADE会自动读取eth0现在的ip地址然后做SNAT出去,
# 这样就实现了很好的动态SNAT地址转换。
上述命令中MASQUERADE,地址伪装,算是snat中的一种特例,可以实现自动化的snat。
但是我使用iptables -L,啥结果没有,增加失败了吗?
原来不是如此,正确的命令是
iptables -L -t nat
使用-L, --list 选型可以列出当前防火墙规则,但是需要使用-t,--table命令选项来指定合适的Netfilter表,共有五种,分别为:filter(缺省default), nat, mangle, raw 和 security。
iptables --table nat --list
或者使用下列简短形式也行:
iptables -t nat -L
假如没有指定特定表,那么默认表就是filter。
为了避免DNS查询等待,可以使用-n、--numeric选项,直接打印IP地址而不是主机名。
假如需要删除增加的规则,那么使用下列命令即可,简单的加-A替换为-D选项即可:
iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
使用-v选项可以查看详细信息:
iptables -vL -t filter
iptables -vL -t nat
iptables -vL -t mangle
iptables -vL -t raw
iptables -vL -t security
iptables参考图: