如何通过一个接口传输另一个接口的所有流量

如何通过一个接口传输另一个接口的所有流量

我的 ubuntu 上有两个工作界面machine

  • tun0- OpenVPN 服务器内部地址为:10.8.0.0/24
  • wg0- WireGuard 对等接口,内部地址为:10.7.0.0/24,通过成功握手连接到外部 WireGuard 服务器。

tun0我正在尝试通过隧道传输所有请求wg0。因此,当我连接到 OpenVPN 隧道时,就好像我连接到了 WireGuard 服务器一样。

iptables在进行任何更改之前,我的备份是这样的:

*filter
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.8.0.0/24 -j ACCEPT
COMMIT
*nat
-A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to-source MACHINE_IP_ADDRESS
COMMIT

因此,通过查看这个,我想如果我MACHINE_IP_ADDRESS用 WireGuard 连接的内部 IP 替换它,它可能会起作用:

-A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to-source 10.7.0.0

这不起作用。我还尝试了:

-A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -o wg0

在这两种情况下,OpenVPN 连接都已建立但完全超时。

有什么方法可以实现此目的而无需进行太多配置?

答案1

这听起来像是“反向代理”行为,你可以使用球童或者 nginx,我认为这应该相当容易,类似于:

caddy reverse-proxy --from 10.8.0.0:2080 --to 10.7.0.0:9000

对于 iptables,我不太确定,但我发现:

https://serverfault.com/questions/1025857/iptables-as-a-reverse-proxy

这看起来与您的解决方案非常相似,但它们似乎一次映射一个端口,您是否尝试过映射特定端口?

相关内容