让 Linux 端口重新映射到自身

con*_*ers 5 linux iptables

我有一个场景:我必须通过调制解调器/路由器允许 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)
Run Code Online (Sandbox Code Playgroud)

我喜欢这个设置。在防火墙后面我可以使用默认端口(我更喜欢这个),从外面我可以(因为我需要)冒号:输入。

然而发生了两件事。调制解调器旧路由器死了我买了一个新的(昂贵的)这项新技术不允许重新映射超过 8 个端口。坏的。人造玻璃天花板。然后我在客户办公室进行设置 > 我去了客户那里,他们甚至根本没有任何端口转发,所以我给他们买了一个全新的调制解调器路由器(甚至更贵),担心它需要做超过 8 个端口,并且担心这种端口重新映射角色现在是“高级”功能。我错了。*甚至*更多*昂贵的新调制解调器路由器将只允许平坦地转发端口,而不允许重新映射端口。只是转发他们。

所以我离题了。但是有没有办法我仍然可以重新映射我自己想过的端口?

我可以使用以下内容来帮助我吗?

iptables -t nat -A PREROUTING -i eth0 -p TCP --dport 2202 -j REDIRECT --to-port 22
Run Code Online (Sandbox Code Playgroud)

有什么理由避免这种用途吗?

jof*_*fel 2

由于您的路由器不支持端口映射,因此您可以在每台主机上或在一台主机上执行此操作。

要将端口 2241 上的传入流量转发到 localhost:22,请使用

iptables -t nat -A PREROUTING -p tcp --dport 2241 -j REDIRECT --to-ports 22    
Run Code Online (Sandbox Code Playgroud)

要将 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
Run Code Online (Sandbox Code Playgroud)