OpenVPN接続クライアントをアップデートしたら、TPLinkルータに搭載されているOpenVPNサーバに接続できなくなった話。

# 概要（遭遇した問題）
自宅にOpenVPNサーバ機能を搭載するTP-Link製ルータを設置し、旧来よりアクセスポイントとして自宅に設置しつつ外出先から自宅内ネットワークにアクセスするためのVPNサーバとしても利用していた。
最近、リモートアクセス時に利用しているクライアント（OpenVPN GUI）を最新バージョン（v2.6.10）にアップデートしたところ、このVPNサーバに接続できなくなった。この事から原因の調査と解決策の模索をした。



# 本問題の解決方法（結論だけ知りたい人向け）
TP-Linkルータで生成された　.ovpn ファイルをテキストエディタ等で開き、以下のように修正。
※機種によってはこの方法では解決しない模様。

``` diff:OpenVPNサーバ接続用ファイル.opvn
client
dev tun
proto udp
float
nobind
- cipher AES-128-CBC
+ data-ciphers-fallback AES-128-CBC
comp-lzo adaptive
resolv-retry infinite
remote-cert-tls server
persist-key
persist-tun
remote 固定IPまたはドメイン名 ポート番号

以下証明書・鍵情報
```



# 問題が発生した環境
OpenVPNサーバ：TP-Link AX3000(Archer AX50)（FW：1.0.14 Build 20240108 rel.42655(4A50)）
※本TP-Linkルータは多数のルータ配下に設置しており、3重ルーティング状態で運用しているが、本問題の根本原因とは無関係であるため、弊家の詳細なネットワーク構成については割愛する。
OS：Windows 11 Pro（23H2）
VPN接続クライアント：OpenVPN（v2.6.10）


### 問題の再現性
複数の固定回線、モバイルネットワーク、デバイスでテストした結果以下のよう結果となった。

|OS  |接続ソフト  |接続環境  |接続結果  |
|---|---|---|---|
|Windows11 Pro（23H2）|OpenVPN（v2.6.10）|固定回線|失敗|
|Windows11 Home（23H2）|OpenVPN（v2.6.10）|モバイル回線|失敗|
|Windows11 Home（23H2）|OpenVPN（v2.5.5）|モバイル回線|成功|
|Android（14）|OpenVPN Connect-OpenVPN App 3.4.1|固定回線|成功|
|Android（14）|OpenVPN Connect-OpenVPN App 3.4.1|モバイル回線|成功|

本結果から、OS側の問題やネットワークの問題ではなく接続ソフトウェア側のトラブルと推測された。



## エラーログ
``` エラーログ.log
2024-04-13 15:26:17 OPTIONS ERROR: failed to negotiate cipher with server. Configure --data-ciphers-fallback if you want to connect to this server.
2024-04-13 15:26:17 ERROR: Failed to apply push options
2024-04-13 15:26:17 Failed to open tun/tap interface
```
OpenVPNサーバへの接続を開始したところ、サーバへ何度も接続試行しつつ、上記エラーログを出力し続けた。
このログから、ciphers周りで何かエラーが発生していると考えられた。



## 試行錯誤と接続結果
TP-Link製ルータからエクスポートされた .opvnファイルの内容を以下のように書き換え接続テストを実施し、問題なく接続できるようになったことを確認した。

|実施内容 |接続結果  |
|---|---|
|data-ciphers AES-128-CBC　 行の追加|×|
|--data-ciphers AES-128-CBC　行の追加|×|
|data-ciphers AES-128-CBC　行の追加 <br> data-ciphers-fallback　行の追加|×|
|data-ciphers-fallback AES-128-CBC　行の追加|×|
|data-ciphers 行の追加 <br> data-ciphers-fallback AES-128-CBC　行の追加|×|
|data-ciphers AES-128-CBC　行の追加 <br> data-ciphers-fallback AES-128-CBC　行の追加|×|
|その他多数のパターン|×|
|cipher AES-128-CBC 行の削除 <br> data-ciphers-fallback AES-128-CBC　行の追加|〇|



## 調査して判明した事
本事象はOpenVPN 2.6系になってからのOpenSSL 3.0 の機能変更に伴うエラーだと考えられ、先述したようにOpenVPNの接続用コンフィグの内容を書き換える事により解決する可能性がある。



## 追記
機種によってはこの方法では解決しない事が判明した。

|問題発生有無|本手法で解決したか|機種  |ハードウェアバージョン|発売時期|
|---|---|---|---|---|
|発生|×|A2600(Archer AC2600)|v1|2018年|
|発生|〇|AX3000(Archer AX50)|v1|2019年|
|調査中|調査中|AX3000(Archer AX23V)|v1.0|2023年|



## 追記　公式サイトの案内
[公式サイトの記事](https://www.tp-link.com/jp/support/faq/3317/)より抜粋。
OpenVPNクライアントのアップグレードに伴いArcher A10 v1など一部機種でエラー表示とともにサーバーに接続できない問題が生じるようになりました。
対処法はOpenVPNクライアントソフトウェア側でSecurity LevelをInsecureに設定のうえご利用ください。ファームウェアアップデートの対応可否は未定となっております。
## まとめ
今まで接続できていた、TP-Link製ルータ内蔵のOpen VPNサーバに接続できない時、本手法により接続できるようになる可能性がある。しかし本手法は暫定的な回避策であり将来的にこの手法は使えなくなる可能性がある点には注意が必要である。
根本的な原因解決のため、ルータ機器メーカにはファームウェアアップデート等により、OpenVPNサーバに利用しているライブラリ等を最新のものに更新していただきたい。



## 最後に
私の知識不足等により間違った記述をしていたり、根本的に間違っている個所等ありましたらお詫び申し上げます。


# 参考にしたサイト
https://qiita.com/kindlittlebird/items/dfd5f6058fc26e723c44
https://s3b.astro.ncu.edu.tw/~daisuke/notebook/Computer___Network/20230516_00.html
https://www.openvpn.jp/2023/03/29/1445/
https://gri.jp/media/entry/24555
https://www.tp-link.com/jp/support/faq/3317/