web-dev-qa-db-ja.com

OpenVPN TLSが失敗し、接続が切断され続けます

昨日、自宅のサーバーにDebian 9とOpenVPNをインストールしましたが、すべてが問題なく機能していました( このガイド に従いました)。しかし、今朝、OpenVPNは機能していて(クライアント側)、突然何もロードされなくなりました。 VPNに再接続しようとしましたが、5分または10分間機能しましたが、何も起こりませんでした。

いくつかの調査を行い、コマンドsystemctl status openvpn@serverを使用してOpenVPNサーバーのステータスを確認したところ、次のメッセージが表示されました。

TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
TLS Error: TLS handshake failed
SIGUSR1[soft,tls-error] received, client-instance restarting

繰り返しますが、私はインターネットでこのエラーを調べましたが、何も問題を解決しませんでした。その間に、他に2つのエラーが発生しました。

TLS Error: local/remote TLS keys are out of sync

そして

Authenticate/Decrypt packet error: cipher final failed

これがTLSと関係があることは明らかですか?サーバーのta.keyとクライアント(Windows)のconfigフォルダーの両方にopenvpn --genkey --secret ta.keyで生成されたファイル/etc/openvpn/があります。


Ufwを無効にしてみましたが、問題が解決しないため、ファイアウォールの問題ではないかと思います。とにかくufw statusの結果は次のとおりです。

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
1194/udp                   ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
1194/udp (v6)              ALLOW       Anywhere (v6)

これが私が/etc/ufw/before.rulesに追加したものです:

*nat
:POSTROUTING ACCEPT [0.0]
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
COMMIT

server.conf(コメントなし):

port 1194
proto udp4
dev tun
ca ca.crt
cert server.crt
key server.key  # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

Push "redirect-gateway def1 bypass-dhcp"
Push "dhcp-option DNS 82.196.9.45"
Push "dhcp-option DNS 89.46.223.237"

keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
max-clients 10
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
explicit-exit-notify 1

そして最後にclient.ovpn(コメントと証明書なし):

client
dev tun
proto udp4
remote [server-ip] 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3

<ca>
-----BEGIN CERTIFICATE-----
(...)
-----END CERTIFICATE-----
</ca>

<cert>
Certificate:
    (...)
-----BEGIN CERTIFICATE-----
(...)
-----END CERTIFICATE-----
</cert>

<key>
-----BEGIN PRIVATE KEY-----
(...)
-----END PRIVATE KEY-----
</key>

どんな提案も歓迎します、ありがとう!

1
Rallph

次のようにサーバーを再インストールしました this そしてすべてが問題なく動作しています

構成ファイル(サーバーではkey-direction、クライアントでは0)に1を追加しなかったためだと思います。これは、構成で変更されたのはほとんど唯一のものだからです。

0
Rallph

OpenVPNのTLS認証キー事前共有キー です。

must生成oneキーを作成し、同じキーをサーバーとクライアントにコピーします。
私が正しく理解していない限り、サーバーとクライアントの両方でそのキーを生成しました(つまり、2つの異なるキーです)。したがって、1つのキーを生成し、それを両方のシステムにコピーすると、ローカル/リモートキーが同期していないというエラーは発生しません。

先に進む、これはないあなたの場合の問題のようです。あなたがそれを間違った方法で使用したのは私の誤解です。

OpenVPNメーリングリストアーカイブ (私の強調)から:

このメッセージは、OpenVPNを[〜#〜] udp [〜#〜]モードで実行しているときに発生する可能性があります。これは、UDPがnotコネクション型であるため、簡単な方法はありません。接続の側で、反対側がダウンまたは再起動したことを確認します。このエラーはTCPモードで実行している場合はほとんど発生しません。TCPはクライアント/サーバーのセマンティクスと接続を強制するためです-リセットすると、接続のいずれかの側がダウンします。

注:以下は、具体的な参照/データがバックアップされていないステートメントです。

その引用と、OpenVPNが実行されているプロトコルとしてdp4を構成したという事実を考慮すると、それはbadのアイデアであるように思われます。 [〜#〜] tls [〜#〜][〜#〜] udp [〜#〜]と一緒に使用します。 TLSは安全なプロトコルであることが意図されているため、UDPが保証しない信頼性の高い接続が必要です。

RFC 5246 --TLSから:

信頼できるトランスポートプロトコル(TCP [TCP]など)の上に階層化された最下位レベルは、TLSレコードプロトコルです。

したがって、TLS doesは信頼できる接続を必要とするため、UDPは使用しないでください。
理由の詳細については、 セキュリティSEのこの回答 でも読むことができます。

から切り替えるだけです:

proto udp4

に:

proto tcp

OpenVPN構成で。

参考資料(詳細を読むため):
OpenVPN-tls-authの使用
OpenVPNメーリングリスト
OpenVPN HowTo-構成
セキュリティSE-TLSがTCPを必要とするのはなぜですか?
RFC 5246-TLSプロトコル
ウィキペディア-UDP

0
Fanatique