看内核snat部分,有如下几个标志位,有点混淆,所以看下下发规则命令行iptables是如何指定的。
#define NF_NAT_RANGE_MAP_IPS (1 << 0)
#define NF_NAT_RANGE_PROTO_SPECIFIED (1 << 1)
#define NF_NAT_RANGE_PROTO_RANDOM (1 << 2)
#define NF_NAT_RANGE_PERSISTENT (1 << 3)
#define NF_NAT_RANGE_PROTO_RANDOM_FULLY (1 << 4)
这里先说下结论,后面再编译ipbales源码,gdb查看一下流程。
可以使用如下命令查看snat的参数列表
root@master:~/iptables-1.8.5# iptables -j SNAT -h
...
SNAT target options:
--to-source [<ipaddr>[-<ipaddr>]][:port[-port]]
Address to map source to.
[--random] [--random-fully] [--persistent]
--to-source 指定了ip/ip范围和port/port范围,
只要指定了ip或者ip