我有一个场景:我有 4 个服务器和 3 个 Web 入站请求,我必须通过调制解调器/路由器允许这些请求。端口是 https(ssl)443 ssh22 和 http80。所有 4 个服务器都想要它们。
我已将服务器设置为使用端口转发和重新映射,如下所示:
2241->port 22 on ip 192.168.0.41
2242->port 22 on ip 192.168.0.42
2243->port 22 on ip 192.168.0.43
2244->port 22 on ip 192.168.0.44
and so on using 44341(..2..3..4) and 8041(..2..3..4)
我喜欢这个设置。在防火墙后面,我可以使用默认端口(我更喜欢这个),从外部我可以(根据需要)冒号:in。
然而发生了两件事。调制解调器旧路由器坏了,我买了一个新路由器(昂贵),这项新技术不允许重新映射超过 8 个端口。坏的。人造玻璃天花板。然后我在客户办公室进行设置 > 我去找客户,他们根本没有任何端口转发,所以我给他们买了一个全新的调制解调器路由器(甚至更贵),担心它需要做超过 8 个端口端口,并且担心这种端口重新映射作用现在已成为“高级”功能。我错了。 *甚至*更*昂贵的新调制解调器路由器将只允许端口被平面转发,它不会允许端口被重新映射。只需转发它们即可。
所以我大量离题了。但有什么方法可以让我自己进行端口重新映射呢?
我可以使用类似以下内容来帮助我吗?
iptables -t nat -A PREROUTING -i eth0 -p TCP --dport 2202 -j REDIRECT --to-port 22
有什么理由避免这种使用吗?
答案1
由于您的路由器不支持端口映射,因此您可以在每台主机上或在一台主机上执行此操作。
要将端口 2241 上的传入流量转发到 localhost:22,请使用
iptables -t nat -A PREROUTING -p tcp --dport 2241 -j REDIRECT --to-ports 22
要将 192.168.0.41:2242 上的传入流量转发到 192.168.0.42:22,您可以使用 DNAT(目标 NAT)。例如,您可以通过使用(可能有更安全的解决方案)来做到这一点:
echo 1 > /proc/sys/net/ipv4/ip_forward # or use /etc/sysctl.conf
iptables -t nat -A PREROUTING -p tcp --dport 2242 -j DNAT --to-destination 192.168.0.42:22
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -P FORWARD DROP
iptables -A FORWARD -d 192.168.0.42 -p 22 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
答案2
如果您打算用 Linux 路由器替换路由器,那没问题。我喜欢用番茄做这个,但 freesco、ddwrt 和 openwrt 就可以了。他们将提供您在产品上熟悉的 Web GUI,使用 iptables 来实现它,并为您在低端硬件上提供高端功能。