我有两个networking接口,eth0和eth1。 eth0有一个公网ip,eth1有172.16.0.254/24。
我想要做下面的映射:
172.16.0.1:22 -> eth0's public ip:2001 172.16.0.2:22 -> eth0's public ip:2002 172.16.0.3:22 -> eth0's public ip:2003 ... 172.16.0.100:22 -> eth0's public ip:2100
我读了iptables支持范围,但我不明白它的工作。
我怎样才能做到这一点?
谢谢。
我很肯定你不能用iptables本身做到这一点。 你有IP范围,多端口,但AFAIK你不能映射IP范围到端口范围。
然而,这可以很容易地用一个小的bash脚本来解决:
for i in $(seq 1 100); do iptables -t nat -A PREROUTING -i eth0 -p tcp -d 172.16.0.$i --dport 22 -j REDIRECT --to-port 2`printf "%03d" $i`; done
…假设您的服务器(s)打开2001-2100正在监听(绑定)到所有接口(0.0.0.0),并且您正在使用TCP。
如果不是这种情况,您可能需要分别使用DNAT目标和-p udp 。
如果PREROUTING链中有100条规则是可读性或维护的关注点,则可以创build自己的链,并从PREROUTING跳转到该链。