修复OpenVPN客户端上的``TLS错误:TLS握手失败''


16

我正在Arch Linux服务器上配置OpenVPN 2.3.6-1,以便通过公共Internet加密SMB通信。当我在一个Linux虚拟机客户端上测试设置时,出现错误:TLS Error: TLS handshake failed

我快速阅读(OpenVZ上的OpenVPN TLS错误:TLS握手失败(谷歌建议的解决方案没有帮助)),并尝试从默认UDP切换到TCP,但这仅导致客户端反复报告连接超时。我还尝试禁用密码和TLS身份验证,但这导致服务器失败Assertion failed at crypto_openssl.c:523。在这两种情况下,都对客户端和服务器配置进行了必需的更改。

我一直按照(https://wiki.archlinux.org/index.php/OpenVPN)上的说明设置OpenVPN和(https://wiki.archlinux.org/index.php/Create_a_Public_Key_Infrastructure_Using_the_easy-rsa_Scripts)创建密钥和证书。我与这些说明唯一的差异是指定了我自己的计算机名称及其对应的密钥/证书文件名称。

另请参阅我有关保护Internet上的SMB流量的原始问题:(Samba共享的简单加密

谁能解释我如何解决这个问题?

细节:

服务器:Arch Linux(最新)通过以太网电缆直接连接到网关。没有iptables。

客户端:VirtualBox 4.3.28r100309 Windows 8.1主机上的Arch Linux(最新)虚拟机,桥接网络适配器。没有iptables。Windows防火墙已禁用。

网关:已启用端口1194的端口转发,没有防火墙限制。

这分别是服务器和客户端上的配置文件。我根据Arch Wiki上的说明创建了这些文件。

/etc/openvpn/server.conf (仅非注释行):

port 1194
proto udp
dev tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server-name.crt
key /etc/openvpn/server-name.key
dh /etc/openvpn/dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
keepalive 10 120
tls-auth /etc/openvpn/ta.key 0
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3

/etc/openvpn/client.conf (仅非注释行):

client
dev tun
proto udp
remote [my public IP here] 1194
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client-name.crt
key /etc/openvpn/client-name.key
remote-cert-tls server
tls-auth /etc/openvpn/ta.key 1
comp-lzo
verb 3

这是在具有上述配置的计算机上运行openvpn的输出。我先启动服务器,然后启动客户端。

openvpn /etc/openvpn/server.conf服务器上的输出:

Thu Jul 30 17:02:53 2015 OpenVPN 2.3.6 x86_64-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [MH] [IPv6] built on Dec  2 2014
Thu Jul 30 17:02:53 2015 library versions: OpenSSL 1.0.2d 9 Jul 2015, LZO 2.09
Thu Jul 30 17:02:53 2015 NOTE: your local LAN uses the extremely common subnet address 192.168.0.x or 192.168.1.x.  Be aware that this might create routing conflicts if you connect to the VPN server from public locations such as internet cafes that use the same subnet.
Thu Jul 30 17:02:53 2015 Diffie-Hellman initialized with 2048 bit key
Thu Jul 30 17:02:53 2015 Control Channel Authentication: using '/etc/openvpn/ta.key' as a OpenVPN static key file
Thu Jul 30 17:02:53 2015 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Jul 30 17:02:53 2015 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Jul 30 17:02:53 2015 Socket Buffers: R=[212992->131072] S=[212992->131072]
Thu Jul 30 17:02:53 2015 ROUTE_GATEWAY 192.168.0.1/255.255.255.0 IFACE=enp5s0 HWADDR=##:##:##:##:##:##
Thu Jul 30 17:02:53 2015 TUN/TAP device tun0 opened
Thu Jul 30 17:02:53 2015 TUN/TAP TX queue length set to 100
Thu Jul 30 17:02:53 2015 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Thu Jul 30 17:02:53 2015 /usr/bin/ip link set dev tun0 up mtu 1500
Thu Jul 30 17:02:53 2015 /usr/bin/ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2
Thu Jul 30 17:02:53 2015 /usr/bin/ip route add 10.8.0.0/24 via 10.8.0.2
Thu Jul 30 17:02:53 2015 GID set to nobody
Thu Jul 30 17:02:53 2015 UID set to nobody
Thu Jul 30 17:02:53 2015 UDPv4 link local (bound): [undef]
Thu Jul 30 17:02:53 2015 UDPv4 link remote: [undef]
Thu Jul 30 17:02:53 2015 MULTI: multi_init called, r=256 v=256
Thu Jul 30 17:02:53 2015 IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0
Thu Jul 30 17:02:53 2015 IFCONFIG POOL LIST
Thu Jul 30 17:02:53 2015 Initialization Sequence Completed

openvpn /etc/openvpn/client.conf客户端上的输出:

Thu Jul 30 21:03:02 2015 OpenVPN 2.3.6 x86_64-unknown-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [MH] [IPv6] built on Dec  2 2014
Thu Jul 30 21:03:02 2015 library versions: OpenSSL 1.0.2d 9 Jul 2015, LZO 2.09
Thu Jul 30 21:03:02 2015 WARNING: file '/etc/openvpn/client-name.key' is group or others accessible
Thu Jul 30 21:03:02 2015 WARNING: file '/etc/openvpn/ta.key' is group or others accessible
Thu Jul 30 21:03:02 2015 Control Channel Authentication: using '/etc/openvpn/ta.key' as a OpenVPN static key file
Thu Jul 30 21:03:02 2015 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Jul 30 21:03:02 2015 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Jul 30 21:03:02 2015 Socket Buffers: R=[212992->131072] S=[212992->131072]
Thu Jul 30 21:03:02 2015 NOTE: UID/GID downgrade will be delayed because of --client, --pull, or --up-delay
Thu Jul 30 21:03:02 2015 UDPv4 link local: [undef]
Thu Jul 30 21:03:02 2015 UDPv4 link remote: [AF_INET][my public IP here]:1194
Thu Jul 30 21:04:02 2015 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Thu Jul 30 21:04:02 2015 TLS Error: TLS handshake failed
Thu Jul 30 21:04:02 2015 SIGUSR1[soft,tls-error] received, process restarting
Thu Jul 30 21:04:02 2015 Restart pause, 2 second(s)

1
您的客户端根本不会收到服务器的响应。您有忘记了的防火墙,或者端口转发不起作用。
迈克尔·汉普顿

2
tcpdump -ni eth0 udp and port 1194 在服务器上那样进行数据包嗅探,并确保数据包是否到达。如果它们存在,则防火墙丢弃数据包可能存在问题,如果没有,则很可能是路由器上的端口转发存在一些问题。您也可以在路由器上执行此操作。试试看,尝试使用更高的端口,这并不常见,但也许您的ISP搞砸了,例如端口11194 / UDP或53 / UDP。
Michal Sokolowski

是的,这是转发。我通常不使用UDP,因此在创建规则时忘记更改协议。我将其发布为答案。
凯尔(Kyle)2015年

3
如果数据包显示在服务器上的tcpdump中,是否有办法确保它们正确到达openvpn?
Joost 2015年

Answers:


9

我也有这个问题。

我正在为服务器使用digitalocean提供程序,问题出在浮动IP功能上。

为了解决这个问题,您必须更新openvpn配置设置:

local <ip anchor>

ip锚应该是从ip addr命令收集的ip地址,请参见示例: 在此处输入图片说明

归功于此职位


pfsense设备也有此问题。local <ip address of VPN server>在服务器配置中添加条目可以解决该问题。请注意,对于TCP,不需要此条目,只有UDP才能给出错误。
文森佐·皮(Fincenzo Pii)

5

正如Michael Hampton和Michal Sokolowski在对我的问题的评论中所建议的那样,这是我在网关上创建的端口转发规则的问题。OpenVPN配置为使用UDP,并且我忘记了在网关上从TCP切换到UDP,因为我通常不使用该协议。现在,转发规则使用UDP,并且我的VPN正常运行了。


0

如果在更新OS内核后出现。或传入的数据包显示在服务器上的tcpdump中,但仍然不起作用。尝试简单的防火墙禁用/启用。也许有人会帮忙。

sudo ufw disable
sudo ufw enable


0

由于服务器端的默认网关配置错误,我遇到了此问题。OpenVPN服务器正在尝试从客户端进行连接尝试,但是由于它从未到达正确的路由器,因此响应丢失了。


您还记得必须在哪里更改吗?进来了etc/openvpn/server.conf吗?
亚瑟·阿特

我认为服务器端的路由表出了点问题。用检查ip route
lanoxx

0

我只是有这个问题。在检查我的.ovpn文件时,我发现?.ddns.net已更改为IP地址,这就是为什么它没有连接的原因。我将IP重新更改为?.ddns.net地址,并已连接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.