我有两个网络接口,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
。