我正在尝试通过 OpenVPN(使用以太网桥接)转发端口,但是不能。
下面是一个“简单”的网络图。一台服务器包含 2 台虚拟机,主服务器通过 OpenVPN 连接到另一台服务器。我需要将一个端口从10.10.10.2
(虚拟机)转发到具有 IP 的外部服务器的公共 IP 10.10.10.11
(见图)。
该桥vmbr0
包括三个接口:tap0
、eth0
(公共 IP)和vlan1
(10.10.10.0/24
)。
我在10.10.10.11服务器中使用的规则是
iptables -t nat -D PREROUTING -p tcp -d [此处为公共 IP] --dport 80 -j DNAT --to-destination 10.10.10.2:80
在下图中您可以看到数据包通过接口“进入”但没有“退出” tap0
。
这是接口的转储tap0
:
数据包从 正确进入tap0
,但数据包被路由到vmbr0
并且永远无法到达tap0
。
我该如何解决这个问题?
答案1
网桥本质上将多个 NIC 转变为虚拟交换机。
如果希望设备通过网桥进行通信,则它们需要位于同一子网,就像在真正的交换机上一样。如果它们不在同一子网,则需要路由器,而不是交换机或网桥。
因此,除非您从 ISP 获得 2 个公共 IP(允许您将它们放在同一个子网中),否则桥接您的公共 IPeth0
和tap0
/或NIC 将无法工作。vlan1
您可以将两个虚拟机放在一座桥上 - 并且它们可以进行通信,因为它们位于同一个子网上。
然后,您的系统需要路由并执行 NAT,用作eth0
“WAN”NIC 和vmbr0
“LAN”NIC。您iptables
可以使用任何有关使用 NAT 的指南,只需替换vmbr0
或eth1
面向 LAN 的 NIC 即可。