Vpn

OpenVPN 無法訪問其他客戶端,arp 回復轉到客戶端而不是伺服器

  • March 22, 2017

我在三個執行 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 

任何想法如何讓消息在兩個客戶端之間流動?我在配置中做錯了什麼或遺漏了什麼嗎?

這通過在 VirtualBox 設置中將連接到 192.168.0.0/24 網路的 GW 的網路適配器設置為混雜模式來解決,因此進行橋接的介面處於混雜模式。總而言之,沒有地方明確提到 VirtualBox 需要混雜模式才能正確橋接,但至少我可以在這裡提一下!

您應該檢查您的 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

引用自:https://serverfault.com/questions/839666