我正在尝试使用 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
当eth0
和tap0
处于桥接状态时,它们现在就像交换机上的端口,它们各自的 IP 不再重要。由于br0
现在没有 IP,您会失去互联网连接。
br0
现在是您的 NIC,它现在需要一个 IP,可以通过 DHCP 或手动分配。尝试dhclient -v br0
。
如果你没有运行 DHCP 服务器,那么你需要设置一个,只是为了br0
(可以告诉isc-dhcp-server
它只在接口上提供 IPbr0
而不是你的eth0
)。