無法連線到 LAN 外的 OpenVPN

無法連線到 LAN 外的 OpenVPN

我已經在路由器後面設定了 OpenVPN,並轉發了連接埠1194。 VPN 使用子網路10.3.15.0/24並位於192.168.1.14LAN 上。

當我在本地連接或從家庭網路連接到公共 IP 時,它可以工作。但在我嘗試過的其他網路上卻沒有。

我無法建立與 VPN 的連接,並且在客戶端上我得到:

Mon Apr 20 13:50:42 2015 UDPv4 link local: [undef]
Mon Apr 20 13:50:42 2015 UDPv4 link remote: [AF_INET]83.***.***.***:1194
Mon Apr 20 13:51:42 2015 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Mon Apr 20 13:51:42 2015 TLS Error: TLS handshake failed
Mon Apr 20 13:51:42 2015 SIGUSR1[soft,tls-error] received, process restarting
Mon Apr 20 13:51:42 2015 Restart pause, 2 second(s)

我認為這可能是防火牆問題,這是來自我的 iptables:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     all  --  10.3.15.0/24         anywhere             ctstate NEW

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

但我嘗試沖洗桌子,但沒有成功。運行時tcpdump -qni any port 1194會進行一些通訊(在兩種情況下):

13:44:35.936684 IP 194.***.***.****.53929 > 192.168.1.14.1194: UDP, length 14
13:44:41.043704 IP 194.***.***.****.22955 > 192.168.1.14.1194: UDP, length 14
13:44:43.063426 IP 194.***.***.****.22955 > 192.168.1.14.1194: UDP, length 14
13:44:43.544690 IP 194.***.***.****.53929 > 192.168.1.14.1194: UDP, length 14

我也注意到了一些關於 的事情destination port unreachable,但這些錯誤消失了。

這是我的伺服器配置:

port 1194
proto udp
dev tun

ca openvpn_certs/host-ca.pem
cert openvpn_certs/host-cert.pem
key openvpn_certs/host-key.pem
dh openvpn_certs/dh1024.pem

server 10.3.15.0 255.255.255.0
route 10.3.15.0 255.255.255.0
ifconfig-pool-persist ipp.txt

push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
push "redirect-gateway def1 bypass-dhcp"
push "remote-gateway 10.3.15.1"

client-to-client
max-clients 20

keepalive 10 120
comp-lzo

user nobody
group nobody

persist-key
persist-tun
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log

verb 11

這是我的客戶端配置:

client
dev vpn
dev-type tun
proto udp
remote server.remote 1194
resolv-retry infinite
nobind
ns-cert-type server
persist-key
persist-tun
pull
ca certs/ca-host.pem
cert certs/cert-local.pem
key certs/key-local.pem
comp-lzo
verb 11

伺服器運行 Alpine linux,客戶端運行 Gentoo。

我被困住了,不知道去哪裡尋找,有什麼想法或指導嗎?

謝謝!

答案1

首先,我不確定您使用的是哪個版本的 OpenVPN,但「遠端網關」在 v2.3.2 中不是有效選項。如果您使用的是舊版本,請檢查本機手冊頁並在必要時刪除該指令。


根據OpenVPN 維基,錯誤「TLS 金鑰協商失敗...」幾乎總是由以下原因導致:

  1. 伺服器網路上的外圍防火牆正在過濾傳入的 OpenVPN 封包(預設情況下 OpenVPN 使用 UDP 或 TCP 連接埠號碼 1194)。

    • 在您的情況下這似乎不太可能,但請檢查路由器的防火牆以確定。
  2. OpenVPN 伺服器機器上執行的軟體防火牆正在過濾連接埠 1194 上的傳入連線。

    • 假設您通常將預設 INPUT 策略設為接受,您提供的篩選表看起來不錯。否則,您需要允許 UDP 連接埠 1194:

      iptables -A INPUT -p udp -m udp --dport 1194 -j ACCEPT
      
  3. 伺服器網路上的 NAT 閘道沒有將 TCP/UDP 1194 連接埠轉送到 OpenVPN 伺服器電腦內部位址的規則。

  4. OpenVPN 用戶端設定的設定檔中沒有正確的伺服器位址。用戶端設定檔中的遠端指令必須指向伺服器本身或伺服器網路閘道的公用 IP 位址。

  5. Windows 防火牆阻止對 openvpn.exe 二進位檔案的存取。您可能需要將其列入白名單(將其新增至「例外」清單),OpenVPN 才能正常運作。


如果您仍然遇到問題,則您的公鑰基礎架構可能有問題。我不熟悉 Alpine linux 以及他們的 OpenVPN 軟體包是否帶有 easy-rsa,所以繼續吧下載最新版本並將其解壓縮到您的伺服器和(最好)非網路連接電腦(您的憑證授權單位)上的適當位置。為簡單起見,我假設您的伺服器正在為客戶端產生請求。在兩個系統上,更改為提取 EasyRSA 的目錄並...

cp vars.example vars
editor ./vars

在 CA 系統上,取消註釋並相應地編輯組織欄位(EASYRSA_REQ_COUNTRY 等)。在伺服器上,可以選擇更改“set_var EASYRSA_PKI”,使其指向適當的位置(例如/etc/openvpn/pki)。

在伺服器上產生憑證請求:

./easyrsa init-pki
./easyrsa gen-req <your_server_name> nopass
./easyrsa gen-req <some_client_name> nopass

在非伺服器上,建立一個新的 CA:

./easyrsa init-pki
./easyrsa build-ca

將 .req 檔案複製到您的 CA 系統,然後匯入並簽署:

./easyrsa import-req server /tmp/<your_server_name>.req
./easyrsa import-req client /tmp/<some_client_name>.req
./easyrsa sign-req server <your_server_name>
./easyrsa sign-req client <some_client_name>

將新簽署的憑證以及 CA 憑證複製到伺服器和用戶端上的適當位置。然後,在伺服器上產生 dh 參數:

 ./easyrsa gen-dh

最後,將客戶端金鑰複製到客戶端電腦(如果尚不存在),並使用新金鑰和憑證位置更新您的設定。


答案2

確保您的伺服器憑證是使用 nsCertType=server 名稱進行簽署的(如果您使用 easyrsa3,則此名稱已被棄用,而不是預設值)。如果不是,用戶端設定中的「ns-cert-type server」指令將導致 tls 握手失敗。請改用「remote-cert-tls server」。

相關內容