原始问题
我已经设置了一个 OpenVPN 服务器和一个 OpenVPN 客户端。
问题是,只有当服务器防火墙允许传入的 OpenSSH 连接时,客户端才能发起连接。
这些是客户端时的服务器防火墙规则是能够发起连接。
$ ufw status verbose
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere // <---
Anywhere on eth0 ALLOW IN 1194/udp
Anywhere on tun0 ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6) // <---
Anywhere (v6) on eth0 ALLOW IN 1194/udp (v6)
Anywhere (v6) on tun0 ALLOW IN Anywhere (v6)
Anywhere ALLOW OUT 1194/udp on eth0
Anywhere ALLOW OUT Anywhere on tun0
Anywhere (v6) ALLOW OUT 1194/udp (v6) on eth0
Anywhere (v6) ALLOW OUT Anywhere (v6) on tun0
ufw delete allow OpenSSH
在服务器上运行后,客户端不是能够发起 VPN 连接
这是当客户端无法发起连接时我们收到的日志输出。
$ sudo openvpn --config /etc/openvpn/client.conf
...
OpenVPN 2.4.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on May 14 2019
library versions: OpenSSL 1.1.1 11 Sep 2018, LZO 2.08
Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Control Channel MTU parms [ L:1621 D:1184 EF:66 EB:0 ET:0 EL:3 ]
Data Channel MTU parms [ L:1621 D:1450 EF:121 EB:406 ET:0 EL:3 ]
Local Options String (VER=V4): 'V4,dev-type tun,link-mtu 1557,tun-mtu 1500,proto UDPv4,keydir 1,cipher AES-256-CBC,auth SHA1,keysize 256,tls-auth,key-method 2,tls-client'
Expected Remote Options String (VER=V4): 'V4,dev-type tun,link-mtu 1557,tun-mtu 1500,proto UDPv4,keydir 0,cipher AES-256-CBC,auth SHA1,keysize 256,tls-auth,key-method 2,tls-server'
TCP/UDP: Preserving recently used remote address: [AF_INET]xxx.xxx.xxx.xxx:1194
Socket Buffers: R=[212992->212992] S=[212992->212992]
UDP link local: (not bound)
UDP link remote: [AF_INET]xxx.xxx.xxx.xxx:1194
当 VPN 服务器不允许传入的 OpenSSH 连接时,客户端如何启动 OpenVPN 连接?
編輯
这是我们的客户端配置:
ca ca.crt
cert vpn_client_01.crt
cipher AES-256-CBC
client
dev tun
key vpn_client_01.key
nobind
persist-key
persist-tun
proto udp
remote vpn.xxx.ca 1194
remote-cert-tls server
resolv-retry infinite
tls-auth ta.key 1
verb 4
答案1
您添加的两个 OpenVPN 规则允许流量,前提是源端口是1194
,不是目的端口。这可能产生两个后果:
- 即使客户端使用
1194
源端口,在通过 NAT 时,该端口也可能会发生变化。因此客户端将被拒绝访问。 - 如果有人使用
1194
作为源端口,他就可以访问您的所有UDP
服务。
您可能想要在目标端口上添加规则:
ufw allow in on eth0 proto udp to any port 1194
至于为什么防火墙允许 OpenVPN 访问,当允许 OpenSSH 时,这是一个有趣的问题:您可以将输出添加到iptables -nvL ufw-user-input
问题中,或者检查在建立 OpenVPN 会话时哪个规则计数器会增加。
答案2
(密钥方向)值keydir
不匹配。请--key-direction 1
在 OpenVPN 客户端配置中指定,然后您就会找到答案。允许的值为 0 和 1。