TryHackMeのVPN接続でエラーが発生した場合の対応方法

# はじめに
本記事では、TryHackMeのVPN接続でエラーが発生した場合の対応方法について記載しています。

普段、TryHackMeを利用する場合は、自前のKali Linuxを使用しています。
先日、Kali Linuxを最新のバージョンにアップグレードしたところ、TryHackMeのVPN接続でエラーが発生し、VPN接続できない事象が発生しました。

エラー内容を基に調査を行なっていたところ、TryHackMeが公開しているVPNに関するトラブルシューティングのツールの存在を知りました。

以下、ツールの利用方法について紹介します。

## 事象内容
いつものようにVPN接続を試みたところ、以下のエラーが出力されて、VPN接続ができませんでした。

```console
2023-06-11 21:22:26 WARNING: Compression for receiving enabled. Compression has been used in the past to break encryption. Sent packets are not compressed unless "allow-compression yes" is also set.
2023-06-11 21:22:26 DEPRECATED OPTION: --cipher set to 'AES-256-CBC' but missing in --data-ciphers (AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305). OpenVPN ignores --cipher for cipher negotiations. 
2023-06-11 21:22:26 Note: '--allow-compression' is not set to 'no', disabling data channel offload.
2023-06-11 21:22:26 OpenVPN 2.6.3 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] [DCO]
2023-06-11 21:22:26 library versions: OpenSSL 3.0.9 30 May 2023, LZO 2.10
2023-06-11 21:22:26 DCO version: N/A
2023-06-11 21:22:26 TCP/UDP: Preserving recently used remote address: [AF_INET]54.193.240.194:1194
2023-06-11 21:22:26 Socket Buffers: R=[212992->212992] S=[212992->212992]
2023-06-11 21:22:26 UDPv4 link local: (not bound)
2023-06-11 21:22:26 UDPv4 link remote: [AF_INET]54.193.240.194:1194
2023-06-11 21:22:26 TLS: Initial packet from [AF_INET]54.193.240.194:1194, sid=dbef5693 a0c1e16c
2023-06-11 21:22:27 VERIFY OK: depth=1, CN=ChangeMe
2023-06-11 21:22:27 VERIFY KU OK
2023-06-11 21:22:27 Validating certificate extended key usage
2023-06-11 21:22:27 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
2023-06-11 21:22:27 VERIFY EKU OK
2023-06-11 21:22:27 VERIFY OK: depth=0, CN=server
2023-06-11 21:22:27 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, peer certificate: 2048 bit RSA, signature: RSA-SHA256
2023-06-11 21:22:27 [server] Peer Connection Initiated with [AF_INET]54.193.240.194:1194
2023-06-11 21:22:27 TLS: move_session: dest=TM_ACTIVE src=TM_INITIAL reinit_src=1
2023-06-11 21:22:27 TLS: tls_multi_process: initial untrusted session promoted to trusted
2023-06-11 21:22:28 SENT CONTROL [server]: 'PUSH_REQUEST' (status=1)
2023-06-11 21:22:28 PUSH: Received control message: 'PUSH_REPLY,route 10.10.0.0 255.255.0.0,route-metric 1000,route-gateway 10.2.0.1,topology subnet,ping 5,ping-restart 120,ifconfig 10.2.0.132 255.255.128.0,peer-id 18'
2023-06-11 21:22:28 OPTIONS IMPORT: --ifconfig/up options modified
2023-06-11 21:22:28 OPTIONS IMPORT: route options modified
2023-06-11 21:22:28 OPTIONS IMPORT: route-related options modified
2023-06-11 21:22:28 OPTIONS ERROR: failed to negotiate cipher with server.  Add the server's cipher ('AES-256-CBC') to --data-ciphers (currently 'AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305') if you want to connect to this server.
2023-06-11 21:22:28 ERROR: Failed to apply push options
2023-06-11 21:22:28 Failed to open tun/tap interface
2023-06-11 21:22:28 SIGUSR1[soft,process-push-msg-failed] received, process restarting
2023-06-11 21:22:28 Restart pause, 1 second(s)
```

OpenVPNのバージョンは、2.6.3です。

`2023-06-11 21:22:26 DEPRECATED OPTION: --cipher set to 'AES-256-CBC' but missing in --data-ciphers (AES-256-GCM:AES-128-GCM:CHACHA20-POLY1305). OpenVPN ignores --cipher for cipher negotiations.`の出力からOpenVPNの設定に問題があることが推定できます。

## 対応方法
エラーメッセージを基に調査を行なっていると、[openvpn-troubleshooting](https://github.com/tryhackme/openvpn-troubleshooting)を発見しました。

このツールは、Linux上のOpenVPN を使用して、TryHackMeネットワークへの接続をトラブルシューティングするためのスクリプトです。

ツールを利用するための手順は以下の通りです。

ツールをダウンロード後、ファイルに実行権限を付与した上で実行します。
※`<Your .ovpn file>`の箇所は、TryHackMeからダウンロードした、任意の`.ovpn`ファイルを指定します。

`$ chmod +x thm-troubleshoot`
`$ ./thm-troubleshoot`

```console
	 _____           _   _            _    __  __		
	|_   _| __ _   _| | | | __ _  ___| | _|  \/  | ___
	  | || '__| | | | |_| |/ _` |/ __| |/ / |\/| |/ _ \
	  | || |  | |_| |  _  | (_| | (__|   <| |  | |  __/
	  |_||_|   \__, |_| |_|\__,_|\___|_|\_\_|  |_|\___|
	           |___/

Looks like you're running Kali 						@MuirlandOracle


[-] Script is being run as a low-privileged user
Would you like to run this script with higher privileges automatically (Y/n)? Y
[+] Re-running with root permissions
[-] Config not found in current directory
Please enter the path to your config: <Your .ovpn file>
[+] Config Located successfully
[+] Stable internet connection
[+] OpenVPN is installed
[-] tun0 interface does not exist
Would you like the script to attempt a connection automatically (Y/n)?  Y
[+] Connecting....
[-] Using outdated switch for ciper negotiations. Attempting to update...
[+] Successfully updated cipher switch! Please connect to the vpn using the following command: 
sudo openvpn <Your .ovpn file>
```

上記、ツールを実行後、TryHackMeのVPN接続を試すと、正常に接続することができました。

また、TryHackMeからダウンロードしている`.ovpn`ファイルを確認すると、暗号化のオプションについて`data-ciphers`に変更されていることが確認できました。

```config
client
dev tun
proto udp
sndbuf 0
rcvbuf 0
remote 54.193.240.194 1194
resolv-retry infinite
nobind
explicit-exit-notify 3
persist-key
persist-tun
remote-cert-tls server
auth SHA512
data-ciphers AES-256-CBC
comp-lzo
key-direction 1
verb 3
reneg-sec 0
<ca>
```

::: note warn
フォーラムでも、同様の事象が確認できました。

- [OpenVPN complaining of depreciated ciphers? READ ME!](https://tryhackme.com/forum/thread/62bc5fb1fcafa700618f25f0)
- [OpenVPN Cipher Issue](https://tryhackme.com/forum/thread/62bad83cf1848200429736f3)
:::

# おわりに
公式からこのようなツールが公開されていることに感謝します。

余談ですが、私はKali Linuxをベアメタルで構築しています。
Kali Linuxの構築に興味がありましたら、以下の記事をどうぞ。

- [自作PCの組み立て方　ベアメタルで構築するKali Linux【PC組み立て編】](https://qiita.com/Brutus/items/4d6da6a989f2a64ec9a2)
- [自作PCの組み立て方　ベアメタルで構築するKali Linux【構築編】](https://qiita.com/Brutus/items/a35654b7644fb358b9cd)