OpenVPN TLS 握手失敗 - 還能是什麼?
我在兩個非常不同的網路上有兩個非常不同的客戶端,都無法連接到新配置的 OpenVPN 伺服器,都導致伺服器上的日誌條目如下所示:
Aug 8 20:37:15 myserver ovpn-server[3797]: 12.34.56.78:48573 TLS: Initial packet from [AF_INET]12.34.56.78:48573, sid=80063aef 9e45c93a Aug 8 20:38:15 myserver ovpn-server[3797]: 12.34.56.78:48573 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) Aug 8 20:38:15 myserver ovpn-server[3797]: 12.34.56.78:48573 TLS Error: TLS handshake failed Aug 8 20:38:15 myserver ovpn-server[3797]: 12.34.56.78:48573 SIGUSR1[soft,tls-error] received, client-instance restarting
客戶端是連接到 NAT ADSL 路由器的 *buntu 筆記型電腦上的 OpenVPN,以及帶有內置 OpenVPN 客戶端的 3G/4G WWAN 路由器。
這是我到目前為止檢查過的內容:
- 防火牆已打開(嗯,TLS 握手會如何開始)
- 兩端正確設置時間/日期
- OpenVPN 客戶端是最新的(至少在筆記型電腦上,在 3G/4G 路由器上更難檢查)
- UDP 埠號在協商的生命週期內不會改變(見上面的日誌)
還有什麼可能導致這種情況?
**編輯:**所以,情節變厚了……絕望中,我嘗試將整個配置鏈更改為使用 TCP,否則一切都保持原樣。砰! 我的 *buntu 筆記型電腦上的 OpenVPN 客戶端能夠立即連接。但是當 3G/4G 路由器的 OpenVPN 客戶端甚至不支持 TCP 傳輸怎麼辦?我還沒說完呢!
**編輯:**在這裡要清楚;我改變了四件事來讓它工作:
- 編輯 OpenVPN 的配置來
proto tcp
代替proto udp
並重新啟動 OpenVPN- 向伺服器的 iptables 防火牆添加了一條新規則,以允許 TCP 1194 - 否則與允許 UDP 1194 的現有規則相同
- 在我的筆記型電腦連接的路由器中的防火牆規則的服務定義上編輯了協議,以允許 TCP 1194 出站而不是 UDP 1194 出站(實際上只是一個下拉框)
- 通過網路管理器在我的筆記型電腦上編輯 OpenVPN 連接資訊並選中
Use a TCP connection
復選框其他所有設置和配置都與以前相同。
**編輯:**我偷偷懷疑我的 VPN 伺服器上的 UDP 流量路由發生了一些奇怪的事情;OpenVPN配置綁定的IP地址不是伺服器的主IP地址,事實上它甚至不在同一個子網上。路由表如下所示:
$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 11-22-33-1.thing 0.0.0.0 UG 0 0 0 eth0 22.33.44.0 * 255.255.255.0 U 0 0 0 eth0 10.8.0.0 * 255.255.255.0 U 0 0 0 tun0 11.22.33.0 * 255.255.255.0 U 0 0 0 eth0 $ ip route default via 11.22.33.1 dev eth0 onlink 22.33.44.0/24 dev eth0 proto kernel scope link src 22.33.44.55 10.8.0.0/24 dev tun0 proto kernel scope link src 10.8.0.1 11.22.33.0/24 dev eth0 proto kernel scope link src 11.22.33.44
22.33.44.55 IP 地址是後來分配的,是 OpenVPN 綁定的那個。現在我是第一個承認我對 IP 路由幾乎一無所知的人,但是“新”IP 地址上的 UDP 流量是否會因為它沒有自己的預設路由而失去 - 或者其他什麼?
事實證明我是對的:
local 22.33.44.55
OpenVPN 中的選項server.config
不見了。添加它並重新啟動 OpenVPN 解決了這個問題,UDP 傳輸現在可以在我的輔助 IP 上執行。沒有它,來自 OpenVPN 的響應將通過預設 IP 發送——儘管我不明白為什麼這也不能阻止 TCP 工作。男生錯誤,如果你願意的話,但是我使用的 OpenSSL 配置腳本 ( https://github.com/Angristan/OpenVPN-install )確實要求在設置期間使用 IP 地址,所以我只是假設它已經配置好了正確。