如何将所有传入流量从eth0
接口路由到 IP 10.8.0.5(VPN 隧道)?
我需要将端口 3666 以外的传入流量转发到 ubuntu 22.04 机器上的特定 IP。
将来不应路由的端口列表将会变得越来越大。
我怎样才能以最好的方式做到这一点?
我已经在这里解释了我的情况 ->使用 nginx 或其他任何工具将所有请求从一台机器代理到另一台机器
答案1
如果我正确理解了您的描述和其他 (proxy-post),您将需要在除 3666/tcp 之外的所有端口上执行 DNAT (目标网络地址转换...也称为端口转发),因此接口 eth0 上的入站流量 (带有服务器本身的目标地址) 被端口转发到 10.8.0.5。这在 iptables nat 表中很容易实现:
如果你希望这在任何其他可能退出的 PREROUTING 规则之前发生,请以 root 身份:
iptables --table nat --insert PREROUTING --in-interface eth0 --jump DNAT --to-destination 10.8.0.5
iptables --table nat --insert PREROUTING --in-interface eth0 --protocol tcp --destination-port 3666 --jump ACCEPT
或者如果你想要在可能存在的 PREROUTING 规则之后执行此操作,请以 root 身份执行:
iptables --table nat --append PREROUTING --in-interface eth0 --protocol tcp --destination-port 3666 --jump ACCEPT
iptables --table nat --append PREROUTING --in-interface eth0 --jump DNAT --to-destination 10.8.0.5
(请注意--append
,而不是--insert
和倒序)
答案2
正如@frax 所说,在我的情况下我必须使用 DNAT 来路由流量。
经过数小时的搜索、谷歌搜索、与 ChatGPT 交流,我得到了所需的结果。
首先,我决定使用iptables
控制台实用程序作为设置防火墙和 NAT 的最强大的工具。
要将端口添加3666
到“排除列表”,防火墙必须接受来自该端口的传入流量:
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 3666 -j ACCEPT
笔记:我的网络接口是eth0
,在其他情况下可能会有所不同。要检查它,请运行以下命令:
ip a
现在,要添加将所有剩余流量转发到特定 IP 的规则,我们可以在命令行中运行以下命令:
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp -j DNAT --to-destination 10.8.0.5
笔记:我的目标 IP(10.8.0.5)属于之前建立的 VPN 连接。将其更改为您需要的任何 IP 地址