我的OpenVPN客户端(Windows 10)位于公司局域网中,并连接到Internet上的服务器(Ubuntu)。 该设置曾经工作,但在一段时间之前停止(请参阅下面的小型基础设施更改,服务器或客户端的configuration没有更改)。
在下面的日志中
SERVERIP
CORPORATEIP
(它是从客户端的内部IP进行的) 当试图从客户端连接时,我得到以下日志:
Sun May 29 10:55:07 2016 OpenVPN 2.3.11 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [PKCS11] [IPv6] built on May 10 2016 Sun May 29 10:55:07 2016 Windows version 6.2 (Windows 8 or greater) 64bit Sun May 29 10:55:07 2016 library versions: OpenSSL 1.0.1t 3 May 2016, LZO 2.09 Sun May 29 10:55:07 2016 MANAGEMENT: TCP Socket listening on [AF_INET]127.0.0.1:25340 Sun May 29 10:55:07 2016 Need hold release from management interface, waiting... Sun May 29 10:55:08 2016 MANAGEMENT: Client connected from [AF_INET]127.0.0.1:25340 Sun May 29 10:55:08 2016 MANAGEMENT: CMD 'state on' Sun May 29 10:55:08 2016 MANAGEMENT: CMD 'log all on' Sun May 29 10:55:08 2016 MANAGEMENT: CMD 'hold off' Sun May 29 10:55:08 2016 MANAGEMENT: CMD 'hold release' Sun May 29 10:55:08 2016 MANAGEMENT: CMD 'proxy NONE ' Sun May 29 10:55:09 2016 Socket Buffers: R=[65536->65536] S=[65536->65536] Sun May 29 10:55:09 2016 MANAGEMENT: >STATE:1464512109,RESOLVE,,, Sun May 29 10:55:09 2016 UDPv4 link local: [undef] Sun May 29 10:55:09 2016 UDPv4 link remote: [AF_INET]SERVERIP:1194 Sun May 29 10:55:09 2016 MANAGEMENT: >STATE:1464512109,WAIT,,,
在服务器端这对应于
May 29 10:55:09 srv ovpn-server[732]: CORPORATEIP:15057 TLS: Initial packet from [AF_INET]CORPORATEIP:15057, sid=38d5a524 b40f69aa May 29 10:56:09 srv ovpn-server[732]: CORPORATEIP:15057 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) May 29 10:56:09 srv ovpn-server[732]: CORPORATEIP:15057 TLS Error: TLS handshake failed May 29 10:56:09 srv ovpn-server[732]: CORPORATEIP:15057 SIGUSR1[soft,tls-error] received, client-instance restarting May 29 10:56:12 srv ovpn-server[732]: CORPORATEIP:15082 TLS: Initial packet from [AF_INET]CORPORATEIP:15082, sid=36d1f0e9 9cdc88ec
因此,客户端到达服务器,尝试连接,然后TLS Error: TLS key negotiation failed to occur within 60 seconds
发生TLS Error: TLS key negotiation failed to occur within 60 seconds
。
OpenVPN常见问题解答提到这个错误,并build议stream量可能被防火墙(在服务器上或在客户端)。 客户端到达服务器的情况并非如此(所以udp/1154
stream量在防火墙上是打开的)。
以前的设置工作,我能想到的唯一的变化是服务器端的变化:它曾经是在一个局域网,与udp/1154
转发给它,现在在一个DMZ(它pipe理DNAT本身通过iptables / shorewall,如果需要的话)。 由于客户端的数据包到达服务器,我不认为这是原因。
在进一步挖掘之前,我想抛开防火墙问题:
CORPORATEIP
,例如UDP
和TCP
也是开放的) 我的上面关于防火墙的假设不是正确的问题吗?
(因为我想确保返回path不受阻碍,所以我在服务器上放置了一个小的HTTP服务器,并从公司LAN连接到它,连接通过(相同的path))
# server configuration port 1194 proto udp dev tun0 ca /etc/openvpn/ca.crt cert /etc/openvpn/server.crt dh /etc/openvpn/dh2048.pem server 10.10.13.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 208.67.222.222" push "dhcp-option DNS 208.67.220.220" duplicate-cn keepalive 10 120 comp-lzo user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 3
# client configuration route-nopull route 10.10.10.0 255.255.255.0 route 10.10.11.0 255.255.255.0 route 10.10.12.0 255.255.255.0 client dev tun proto udp remote SERVER_IP 1194 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server comp-lzo verb 3 <ca> -----BEGIN CERTIFICATE----- MIIEgDCCA2igAwIBAgIJ... (...) b4yiCAmaA8p5JRYqYBiT... p20oZw== -----END CERTIFICATE----- </ca> <cert> Certificate: (...) 8f:d4:9d:d0 -----BEGIN CERTIFICATE----- MIIE3DCCA8SgAwIBAgIBA... (...) eGOJMoV4vXQ31DZmEl33l... -----END CERTIFICATE----- </cert> <key> -----BEGIN PRIVATE KEY----- MIIEvwIBADANBgkqhkiG9... (...) APOSuHJ4aXJocgOK3jGoK... -----END PRIVATE KEY----- </key>
TL; DR:问题最终在出站防火墙。
这是一个带有透明代理的防火墙,它可以过滤“应用程序”(这是如何实现的 – 这是一个BlueCoat设备)。 我被授权使用VPN(这包括OpenVPN)和处理授权的守护程序在周末期间崩溃 – 有效地丢弃我的数据包。
这是一个本地化的问题,我考虑删除问题,但有一个奇怪的行为,可能会帮助一个面临类似问题的人:只有一些OpenVPN数据包由BlueCoat标记为“VPN” – 所以最初的连接正在经历(即CLIENT_HARD_RESET
),但其他数据包( SERVER_HARD_RESET
开始)被阻塞。
如果一切都被封锁,那么排除故障要容易得多,误导的是部分丢失的stream量。