我在三台运行 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