OpenVPN 无法连接其他客户端,arp 回复发往客户端而不是服务器

OpenVPN 无法连接其他客户端,arp 回复发往客户端而不是服务器

我在三台运行 Ubuntu 16.04 的 VirtualBox VM 上配置了 OpenVPN。

网络配置如下: 网络配置图片

服务器配置:

local 192.168.2.2
port 1194
proto udp
dev tap0

ca ca.crt
cert server.crt
key server.key
dh dh2048.pem

ifconfig-pool-persist ipp.txt

server-bridge 192.168.0.2 255.255.255.0 192.168.0.50 192.168.0.100
client-to-client

keepalive 10 20
cipher AES-128-CBC
comp-lzo

persist-key
persist-tun
verb 3

客户端配置:

client
dev tap
proto udp

remote 192.168.2.2 1194
resolv-retry infinite

nobind
persist-key
persist-tun

ca ca.crt
cert client1.crt
key client1.key

cipher AES-128-CBC
comp-lzo
verb 3

我正在使用 OpenVPN 附带的 bridge-start 和 bridge-stop 脚本来使用网桥。连接打开没有问题。我可以从服务器 ping 客户端,也可以从客户端 ping 服务器。问题是我无法 ping 客户端到客户端,例如从远程客户端 (lab3) ping 另一个客户端 (lab2) 只会得到From 192.168.0.50 icmp_seq=1 Destination Host Unreachable

看来问题与 ARP 有关,因为当我在服务器上对 br0 进行 tcpdump 时,我看到有一个问题 ARP, Request who-has 192.168.0.1 tell 192.168.0.50, length 28。然后在客户端(lab2)上我看到:

ARP, Request who-has 192.168.0.1 tell 192.168.0.50, length 46
ARP, Reply 192.168.0.1 is-at 08:00:27:c8:1c:c7, length 28

但答复似乎没有到达任何机器。

当OpenVPN连接打开时,路由表似乎是正确的:

服务器:

default via 10.0.2.1 dev enp0s3 
10.0.2.0/24 dev enp0s3  proto kernel  scope link  src 10.0.2.4 
192.168.0.0/24 dev br0  proto kernel  scope link  src 192.168.0.2 
192.168.2.0/24 dev enp0s9  scope link 
192.168.2.0/24 dev enp0s9  proto kernel  scope link  src 192.168.2.2

客户:

default via 10.0.2.1 dev enp0s3 
10.0.2.0/24 dev enp0s3  proto kernel  scope link  src 10.0.2.7 
192.168.0.0/24 dev enp0s8  proto kernel  scope link  src 192.168.0.1 

远程客户端:

default via 10.0.2.1 dev enp0s3 
10.0.2.0/24 dev enp0s3  proto kernel  scope link  src 10.0.2.6 
192.168.0.0/24 dev tap0  proto kernel  scope link  src 192.168.0.50 
192.168.2.0/24 dev enp0s8  proto kernel  scope link  src 192.168.2.1 

有什么想法可以让消息在两个客户端之间流动吗?我做错了什么还是配置中遗漏了什么?

答案1

通过在 VirtualBox 设置中将连接到 192.168.0.0/24 网络的 GW 网络适配器设置为混杂模式,解决了这个问题,因此进行桥接的接口处于混杂模式。总而言之,没有任何地方明确提到 VirtualBox 需要混杂模式才能正确桥接,但至少我可以在这里提到它!

答案2

您应该检查您的 VPN 服务器是否启用了 ipv4 转发:

cat /proc/sys/net/ipv4/ip_forward

1=启用,0=禁用

使用以下命令启用它:

echo 1 > /proc/sys/net/ipv4/ip_forward

为了使此设置在重启后继续有效,请确保 /etc/sysctl.conf 中包含以下行:

net.ipv4.ip_forward = 1

相关内容