ocserv[14506]: GnuTLS error (at worker-vpn.c:861): An unexpected TLS packet was received.
ocserv[14506]: GnuTLS error (at worker-vpn.c:861): An unexpected TLS packet was received.
このエラー "An unexpected TLS packet was received" は、通常 TLS/SSL の通信設定の不一致 によって発生します。 OpenConnect サーバー (ocserv) とクライアントの間で、TLS 通信の設定が適切に合致していない可能性があります。
🔍 考えられる原因
- ocserv が TCP instead of UDP で動作している
- OpenConnect VPN では、通常 TCP (HTTPS) と UDP (DTLS) の両方を使用できます。
- クライアントが DTLS (UDP) で接続しようとしているのに、サーバーが TCP しか受け入れていない場合、このエラーが発生することがあります。
- TLS バージョンのミスマッチ
ocservの設定 (ocserv.conf) で TLS バージョン がクライアントと一致していない可能性があります。- 設定を確認し、
min-tls-versionの値を適切に設定してください。
- GnuTLS ライブラリの不具合
- サーバーやクライアントが古い GnuTLS バージョンを使用している場合、互換性の問題が発生する可能性があります。
- 最新の GnuTLS に更新してみてください。
- 証明書の問題
- サーバー証明書 (
/etc/ocserv/内) が正しく設定されていない、または期限切れになっている可能性があります。 ocserv.confでcert-fileやkey-fileの設定を確認し、証明書が有効かどうかチェックしてください。
- サーバー証明書 (
🛠 解決策
✅ 1. DTLS の設定を修正
ocserv.conf を開き、DTLS を有効化 する設定を確認してください。
bash
sudo nano /etc/ocserv/ocserv.conf
以下の設定があるかチェックし、必要なら修正:
ini
udp-port = 443 # UDPポートを適切に設定
dtls-legacy = true # 古い DTLS を許可(必要な場合)
✅ 2. TLS バージョンの確認
TLS のバージョンをクライアントと一致させるため、ocserv.conf の設定を変更:
ini
min-tls-version = 1.2
また、TLS 1.3 を有効化することも推奨されます。
✅ 3. GnuTLS の更新
GnuTLS が古い場合は、最新のバージョンに更新 してください。
bash
sudo apt update && sudo apt upgrade gnutls-bin
✅ 4. 証明書の再確認
証明書の有効期限が切れている可能性があるので、以下のコマンドで確認:
bash
openssl x509 -in /etc/ocserv/server-cert.pem -noout -dates
もし証明書が期限切れなら、Let's Encrypt を使って再取得:
bash
sudo certbot renew
sudo systemctl restart ocserv
📌 まとめ
このエラーは TLS通信の設定不一致や証明書の問題 によって発生することが多いです。 まずは DTLSの設定を確認し、TLSのバージョンをクライアントと合わせる ことで解決できる可能性が高いです。
