iptables NAT 转发范围

iptables NAT 转发范围

我有两个网络接口,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 支持范围,但我不明白它如何工作。

我怎样才能实现这个目标?

谢谢。

答案1

我非常确定您无法使用 iptables 原生实现这一点。您有 IP 范围、多端口,但据我所知,您无法将 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

...假设您的服务器打开 2001-2100 并监听(绑定)所有接口(0.0.0.0)并且您正在使用 TCP。

如果不是这种情况,您可能需要分别使用DNAT目标和。-p udp

如果PREROUTING担心链中的 100 条规则(可读性或维护性),您可以创建自己的链并从 跳转到它PREROUTING

相关内容