在 Linux 上使用 iptables 进行端口转发

在 Linux 上使用 iptables 进行端口转发

我想将本地端口转发到远程端口(8041)到远程计算机(10.0.0.42)上的端口(8042)。我可以通过以下方式做到这一点

ssh -L 10.0.0.41:8041:10.0.0.42:8042 user@localhost

哪里10.0.0.41必然是eth0.

现在我想在没有所有用户空间和加密开销的情况下执行此操作。

我的猜测是

iptables -t nat -A PREROUTING -i eth0 -p tcp -d 10.0.0.41 --dport 8041 -j DNAT --to 10.0.0.42:8042

并启用 ip-forward - 但它不起作用。

答案1

您还需要添加 SNAT 规则。

现在,你有这个:

Client ---> NAT box ---> Server
  /|\                       |
   |                       /
    \_____________________/

那是行不通的;客户端不知道 NAT,因此当回复直接来自服务器时,客户端会感到困惑。因此,您需要使服务器将 NAT 框视为源,这可以通过添加 SNAT 规则来实现。

Client <---> NAT box <---> Server

相关内容