
ルーターの背後に OpenVPN を設定し、ポート転送しました1194
。VPN はサブネットを使用しており10.3.15.0/24
、192.168.1.14
LAN 上にあります。
ローカルで接続している場合、またはホーム ネットワークからパブリック 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 キーのネゴシエーションに失敗しました...」というエラーは、ほとんどの場合、次の原因で発生します。
サーバーのネットワーク上の境界ファイアウォールが、着信 OpenVPN パケットをフィルタリングしています (デフォルトでは、OpenVPN は UDP または TCP ポート番号 1194 を使用します)。
- あなたの場合はそうではないようですが、念のためルーターのファイアウォールを確認してください。
OpenVPN サーバー マシン自体で実行されているソフトウェア ファイアウォールが、ポート 1194 の着信接続をフィルタリングしています。
提供されたフィルター テーブルは、通常はデフォルトの INPUT ポリシーが accept に設定されていると仮定すると、問題ないように見えます。それ以外の場合は、UDP ポート 1194 を許可する必要があります。
iptables -A INPUT -p udp -m udp --dport 1194 -j ACCEPT
サーバーのネットワーク上の NAT ゲートウェイには、OpenVPN サーバー マシンの内部アドレスへの TCP/UDP 1194 のポート転送ルールがありません。
OpenVPN クライアント構成の構成ファイルには正しいサーバー アドレスがありません。クライアント構成ファイルのリモート ディレクティブは、サーバー自体またはサーバー ネットワークのゲートウェイのパブリック IP アドレスのいずれかを指している必要があります。
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' を使用してください。