我有开放的 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
希望这可以帮助。