我正在尝试将我的 Raspberry Pi 配置为站点 B 上的 OpenVPN 服务器。对于此设置,我要求客户端配置存储在一个单独的文件中,因为它将部署在我的 Android 手机上。我不想弄乱路径,因此:我将通过蓝牙发送文件并 zap!
该配置基于 PKI。该配置灵感来自现有的 VPN(注释掉),其中 Raspy 是客户端(站点 B 到站点 A)。“其他”VPN 可以随时启用,但同样,它目前已被注释掉。我先在 Windows 上尝试,然后再尝试在 Android 上部署,特别是因为我可以随时编辑和重新运行配置,用键盘快速输入并从服务器复制和粘贴内容,因为我始终可以通过 ssh 远程访问它。在移动设备上,我需要花费大量时间来测试。
服务器配置文件
port 1194
proto udp
dev tun
ca /etc/ssl/vpn/ca.crt
cert /etc/ssl/vpn/raspy.crt
key /etc/ssl/vpn/raspy.key
dh /etc/ssl/vpn/dh2048.pem
key-direction 1
tls-auth /etc/ssl/vpn/ta.key 0 # This file is secret
cipher AES-256-CBC # AES
client-config-dir ccd
ifconfig-pool-persist ipp.txt
client-to-client
push "route 192.168.192.0 255.255.255.0 vpn_gateway"
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
log /var/log
verb 6 #helps me troubleshoot
客户端配置文件
dev tun
proto udp
remote raspy.example.me 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
<ca>
-----BEGIN CERTIFICATE-----
Matches the CA certificate deployed on server
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
This is the client certificate that I have signed with common CA
I assume this part of the setup is fine
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN RSA PRIVATE KEY-----
Client private key
-----END RSA PRIVATE KEY-----
</key>
<dh>
-----BEGIN DH PARAMETERS-----
Matches the content of /etc/ssl/vpn/dh2048.pem
-----END DH PARAMETERS-----
</dh>
cipher AES-256-CBC
remote-cert-tls server
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
matches /etc/ssl/vpn/ta.key
-----END OpenVPN Static key V1-----
</tls-auth>
cipher AES-256-CBC
comp-lzo
log /var/log/openvpn.log
verb 6
我是自信的证书设置正确,但与此同时,我将使用 OpenSSL 重新测试它们,以确保链正常。
连接后,我发现以下日志
服务器
Tue Jul 28 11:02:25 2020 us=457781 Authenticate/Decrypt packet error: packet HMAC authentication failed
Tue Jul 28 11:02:25 2020 us=458025 TLS Error: incoming packet authentication failed from [AF_INET]xxx:46976
Tue Jul 28 11:02:27 2020 us=732637 Authenticate/Decrypt packet error: packet HMAC authentication failed
Tue Jul 28 11:02:27 2020 us=732832 TLS Error: incoming packet authentication failed from [AF_INET]xxx:46976
客户
Tue Jul 28 11:02:25 2020 UDP WRITE [42] to [AF_INET]xxx:1194: P_CONTROL_HARD_RESET_CLIENT_V2 kid=0 pid=[ #2 ] [ ] pid=0 DATA len=0
Tue Jul 28 11:02:29 2020 UDP WRITE [42] to [AF_INET]xxx:1194: P_CONTROL_HARD_RESET_CLIENT_V2 kid=0 pid=[ #3 ] [ ] pid=0 DATA len=0
Tue Jul 28 11:02:37 2020 UDP WRITE [42] to [AF_INET]xxx:1194: P_CONTROL_HARD_RESET_CLIENT_V2 kid=0 pid=[ #4 ] [ ] pid=0 DATA len=0
Tue Jul 28 11:02:53 2020 UDP WRITE [42] to [AF_INET]xxx:1194: P_CONTROL_HARD_RESET_CLIENT_V2 kid=0 pid=[ #5 ] [ ] pid=0 DATA len=0
这个设置可能有什么问题?我该如何修复它?
研究
我已经发现这个话题声称已经解决
bznelson wrote: ↑
Mon Apr 09, 2018 10:52 pm
tls-auth /etc/openvpn/easy-rsa/pki/ta.key 0
bznelson wrote: ↑
Mon Apr 09, 2018 10:52 pm
<tls-crypt>
啊,是的,tls-auth/tls-crypt,就是它!非常感谢!我之前运行的是 2.3 服务器,但我最初安装的是 2.4,我想这两者之间存在一些交叉影响。
我在两台主机上运行的是 OpenVPN 2.4.0。我不知道该链接线程对我有何帮助
在同一个主题中,有人谈到了这个错误
这通常意味着您在某处安装了错误的 ta.key。
但我已经检查了三次。键是相同的,但最大的区别在于一个在文件上,一个在内联
我尝试从客户端和服务器完全删除 tls-auth。错误已修复,我还有下一个要关注的错误。因此,上面链接的论坛是正确的,两个相同的密钥之间存在一些混乱
答案1
客户端和服务器配置都需要共享相同的cipher
配置。以下行:
cipher AES-256-CBC
必须同时存在。
答案2
在我的情况下,它是身份验证摘要算法。Pfsense 具有比服务器更安全的默认值,因此必须进行调整。SHA-1 是不安全的默认值,SHA256 似乎是更好的选择。
答案3
也许你的ta.key生成是错误的。
openvpn --genkey tls-auth ta.key(这是错误的!)
请参考官方网站 https://openvpn.net/community-resources/how-to/#hardening-openvpn-security
就我而言,openvpn 2.5.4
警告:使用 --genkey --secret filename 已弃用。请改用 --genkey secret filename。EasyRSA Shell
openvpn --genkey secret ta.key
添加以下配置后,它可以工作。