为 OpenVPN 创建以太网桥时失去互联网访问

为 OpenVPN 创建以太网桥时失去互联网访问

我正在尝试使用 OpenVPN 设置以太网桥。我使用从 openvpn.org 上的设置指南中获取的脚本创建桥接器,并对其进行了少许修改以在 Arch Linux 上运行。

# Define Bridge Interface
br="br0"

# Define list of TAP interfaces to be bridged,
# for example tap="tap0 tap1 tap2".
tap="tap0"

# Define physical ethernet interface to be bridged
# with TAP interface(s) above.
eth="eth0"
eth_ip="192.168.1.202"
eth_netmask="255.255.255.0"
eth_broadcast="192.168.1.255"

for t in $tap; do
    openvpn --mktun --dev $t
done

brctl addbr $br
#brctl addif $br $eth

for t in $tap; do
    brctl addif $br $t
done

for t in $tap; do
    ip link set dev $t promisc on
done

ip link set dev $eth promisc on

#ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast

这很有效,但服务器在运行脚本后会立即失去互联网连接,直到我重新启动。我仍然能够在客户端上连接,并且通过 vpn 路由所有数据似乎push "redirect-gateway def1"有效 - 如果我尝试在客户端上 ping google.com,我会收到来自服务器的消息,说无法访问。我做错了什么?

编辑:
我按照建议删除了到 eth0 的桥接这个问题。我还注释掉了ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast。现在一切似乎都正常工作了,除了我无法从服务器 ping 客户端。

当我对 google.com 进行跟踪路由时,它会先经过 192.168.1.109,然后再经过我的路由器。此地址在我的 VPN 路由表中,这是否意味着流量正在通过 VPN?另一个问题可能是我一直在测试的客户端与服务器位于同一本地网络上。这会导致问题吗?使用以太网桥,即使本地网络上的计算机未连接到网络,它们是否仍能够访问客户端?我将尝试从另一个网络进行测试,并使用我的发现进行更新。

编辑2:

服务器上的路由表如下所示:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG        0 0          0 eth0
0.0.0.0         192.168.1.2     0.0.0.0         UG        0 0          0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.1.109   127.0.0.1       255.255.255.255 UGH       0 0          0 lo

答案1

当你使用 OpenVPN 进行桥接时,你会将现有的eth0和连接tap0到桥接中。如果你希望 OpenVPN 客户端成为同一网络的一部分并允许广播流量穿越,那么br0这是正确的做法。eth0

eth0tap0处于桥接状态时,它们现在就像交换机上的端口,它们各自的 IP 不再重要。由于br0现在没有 IP,您会失去互联网连接。

br0现在是您的 NIC,它现在需要一个 IP,可以通过 DHCP 或手动分配。尝试dhclient -v br0

如果你没有运行 DHCP 服务器,那么你需要设置一个,只是为了br0(可以告诉isc-dhcp-server它只在接口上提供 IPbr0而不是你的eth0)。

相关内容