LAN外のOpenVPNに接続できません

LAN外のOpenVPNに接続できません

ルーターの背後に OpenVPN を設定し、ポート転送しました1194。VPN はサブネットを使用しており10.3.15.0/24192.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 のバージョンがわかりませんが、'remote-gateway' は v2.3.2 では有効なオプションではありません。古いバージョンを使用している場合は、ローカルのマニュアル ページを確認し、必要に応じてそのディレクティブを削除してください。


によるOpenVPN ウィキ「TLS キーのネゴシエーションに失敗しました...」というエラーは、ほとんどの場合、次の原因で発生します。

  1. サーバーのネットワーク上の境界ファイアウォールが、着信 OpenVPN パケットをフィルタリングしています (デフォルトでは、OpenVPN は UDP または TCP ポート番号 1194 を使用します)。

    • あなたの場合はそうではないようですが、念のためルーターのファイアウォールを確認してください。
  2. OpenVPN サーバー マシン自体で実行されているソフトウェア ファイアウォールが、ポート 1194 の着信接続をフィルタリングしています。

    • 提供されたフィルター テーブルは、通常はデフォルトの INPUT ポリシーが accept に設定されていると仮定すると、問題ないように見えます。それ以外の場合は、UDP ポート 1194 を許可する必要があります。

      iptables -A INPUT -p udp -m udp --dport 1194 -j ACCEPT
      
  3. サーバーのネットワーク上の NAT ゲートウェイには、OpenVPN サーバー マシンの内部アドレスへの TCP/UDP 1194 のポート転送ルールがありません。

  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' を使用してください。

関連情報