无法从与 VPN 服务器位于同一网络的设备连接到 OpenVPN 服务器

无法从与 VPN 服务器位于同一网络的设备连接到 OpenVPN 服务器

我有开放的 VPN 服务器,我可以从互联网上的设备连接到该服务器,但是我无法从与 VPN 服务器的另一端连接的同一网络中的设备连接到 VPN 服务器。

希望下面的图片能更清楚地表达我的意思。

网络图片

因此,从笔记本电脑 A 来看,VPN 运行正常,没有任何问题,但从笔记本电脑 B 来看,VPN 连接不起作用,但我从服务器端日志中唯一能看到的是:

Sat Jul 16 13:01:25 2016 192.168.8.110:54838 TLS: Initial packet from [AF_INET]192.168.8.110:54838, sid=df0e4ebd 28b00efc
Sat Jul 16 13:02:26 2016 192.168.8.110:54838 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Sat Jul 16 13:02:26 2016 192.168.8.110:54838 TLS Error: TLS handshake failed
Sat Jul 16 13:02:26 2016 192.168.8.110:54838 SIGUSR1[soft,tls-error] received, client-instance restarting

我自己的估计是我的 iptables 里有一些东西需要更多配置,但不确定是什么。

iptables-save 的“路由器和 VPN 服务器”输出:

# Generated by iptables-save v1.4.21 on Sat Jul 16 15:50:52 2016
*nat
:PREROUTING ACCEPT [30:5047]
:INPUT ACCEPT [8:564]
:OUTPUT ACCEPT [277:46054]
:POSTROUTING ACCEPT [166:38786]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Sat Jul 16 15:50:52 2016
# Generated by iptables-save v1.4.21 on Sat Jul 16 15:50:52 2016
*filter
:INPUT DROP [353:82150]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1338:193477]
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m udp --dport 1194 -j ACCEPT
-A INPUT -i tun0 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i tun0 -j ACCEPT
COMMIT
# Completed on Sat Jul 16 15:50:52 2016

eth0 连接到本地网络 A,eth1 连接到本地网络 B

openvpn 服务器配置是:

dev tun 
proto udp
port 1194 
ca   /etc/openvpn/easy-rsa/keys/ca.crt 
cert /etc/openvpn/easy-rsa/keys/vpn.crt
key  /etc/openvpn/easy-rsa/keys/vpn.key
dh   /etc/openvpn/easy-rsa/keys/dh2048.pem
server 10.9.0.0 255.255.255.0 

# Allow traffic between clients
client-to-client 
keepalive 10 120 
tls-auth /etc/openvpn/easy-rsa/keys/ta.key 0 
cipher AES-128-CBC 
comp-lzo 
user nobody 
group nogroup 
persist-key 
persist-tun 
status /var/log/openvpn-status.log 20 
log /var/log/openvpn.log 
verb 3
topology subnet

# Makes openvpn server to advertise this network to other clients
push "route 192.168.43.0 255.255.255.0"

服务器上也设置了 net.ipv4.ip_forward = 1。

服务器的 route -n 输出

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.8.1     0.0.0.0         UG    202    0        0 eth0
10.8.0.0        0.0.0.0         255.255.255.0   U     0      0        0 tun0
192.168.8.0     0.0.0.0         255.255.255.0   U     202    0        0 eth0
192.168.43.0    0.0.0.0         255.255.255.0   U     203    0        0 eth1

笔记本电脑B的客户端配置: 注意:此配置与我对笔记本电脑 A 使用的配置相同,唯一区别是笔记本电脑 A 的远程线路(公共 IP)。

client
dev tun
proto udp
remote 192.168.8.2 1194
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ns-cert-type server
key-direction 1 
cipher AES-128-CBC
comp-lzo
verb 1
#mute 20
auth-nocache 0
<ca>...</ca>
<cert>...</cert>
<key>...</key>
<tls-auth>...</tls-auth>

答案1

我认为您的问题与 NAT POSTROUTING 规则有关。离开eth0接口的任何数据包都可能受到MASQUERADE'ing 的影响,即使是来自您的 OVPN 服务器本身的数据包也是如此。

问题出在您的 OVPN 客户端连接到 OVPN 服务器上udp/1194,并且由于MASQUERADE规则,OVPN 服务器从 OVPN 客户端意想不到的其他端口发送其答复,因此导致超时。

如果该规则允许 LAN B 访问 LAN A,那么也许以下修改适合您:

-A POSTROUTING -s <LAN B subnet> -o eth0 -j MASQUERADE

希望这可以帮助。

相关内容