Ubuntu 22.04 LTS に SoftEther をインストール 

## 要約
 * PPA(Dmitry Verkhoturov氏作成)を使う方法が多く出てきますが、この方法はobsoleteです。
 * Ubuntu 21.04からはsoftether-vpn群が使えるので単にこれを入れれば良いです。

## インストール
```shell
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.1 LTS"

$ sudo apt-get update

# お好みで
$ sudo apt-get install softether-common softether-vpncmd softether-vpnserver softether-vpnclient softether-vpnbridge
```

## 設定
### VPN Tools / check

```shell
$ which vpncmd
/bin/vpncmd

$ vpncmd
vpncmd コマンド - SoftEther VPN Developer Edition コマンドライン管理ユーティリティ
SoftEther VPN コマンドライン管理ユーティリティ (vpncmd コマンド)
Developer Edition
Version 5.01 Build 9674   (Japanese)
Compiled 2021/11/24 10:24:33 by Unknown at Unknown
Copyright (c) all contributors on SoftEther VPN project in GitHub.
Copyright (c) Daiyuu Nobori, SoftEther Project at University of Tsukuba, and SoftEther Corporation.
All rights reserved.

vpncmd プログラムを使って以下のことができます。

1. VPN Server または VPN Bridge の管理
2. VPN Client の管理
3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)

1 - 3 を選択: 3


VPN Tools を起動しました。HELP と入力すると、使用できるコマンド一覧が表示できます。

VPN Tools>check
Check コマンド - SoftEther VPN の動作が可能かどうかチェックする
---------------------------------------------------
SoftEther VPN 動作環境チェックツール
Developer Edition

Copyright (c) all contributors on SoftEther VPN project in GitHub.
Copyright (c) Daiyuu Nobori, SoftEther Project at University of Tsukuba, and SoftEther Corporation.
All Rights Reserved.

この動作環境チェックツールを実行したシステムがテストに合格した場合は、SoftEther VPN ソフトウェアが動作する可能性が高いで
す。チェックにはしばらく時間がかかる場合があります。そのままお待ちください...

'カーネル系' のチェック中...
              [合格] ○
'メモリ操作系' のチェック中...
              [合格] ○
'ANSI / Unicode 文字列処理系' のチェック中...
              [合格] ○
'ファイルシステム' のチェック中...
              [合格] ○
'スレッド処理システム' のチェック中...
              [合格] ○
'ネットワークシステム' のチェック中...
Connect Failed. (0)
              [不合格] ×

一部のチェック結果は不合格でした。システムの動作環境を確認してください。このシステム上で SoftEther VPN Server / Bridge
を実行した場合、問題が発生する可能性があります。

コマンドは正常に終了しました。

VPN Tools>exit
```

ありゃ、fail？

### 原因検索

出力メッセージがわかりにくいですが、
いろいろ探した結果、解決策が
https://github.com/SoftEtherVPN/SoftEtherVPN/issues/1230#issuecomment-733921717
にありました。
SoftEtherが`CipherString`の`SECLEVEL=2`に対応していないようです。

`openssl_conf`から辿っていった設定の`CipherString`の`SECLEVEL`が0 or 1である必要があります。

`/etc/ssl/openssl.cnf`:
```diff_ini
[system_default_sect]
- CipherString = DEFAULT:@SECLEVEL=2
+ MinProtocol = TLSv1.2
+ CipherString = DEFAULT:@SECLEVEL=1
```

なお、実際にVPN通信に使用する暗号化アルゴリズムは、ServerCipherSetコマンドで設定できます。
また、checkが失敗するだけで、VPN Server自体はSECLEVEL=2に戻しても動作します。



### SECLEVELって？

このSECLEVELが何なのか、たどっていくと
https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set_security_level.html
最終的にこちらに行き着きました。翻訳は抜粋なので原文確認してください。

 * Level 0
   * なんでもあり。過去との互換性用。
 * Level 1
   * 1024ビット未満のRSA, DSA, DHと、160ビット未満のECCは使用禁止。
   * SSL 2.0も使用禁止。
   * MAC(メッセージ認証コード)にMD5を使用するのも禁止。
 * Level 2 (デフォルト)
   * 2048ビット未満のRSA, DSA, DHと、224ビット未満のECCは使用禁止。
   * Level 1に加えてSSL 3.0, RC4, 圧縮も使用禁止。
 * Level 3
   * 3072ビット未満のRSA, DSA, DHと、256ビット未満のECCは使用禁止。 
   * Level 2に加えてTLS 1.0、セッションチケット使用禁止
 * Level 4
   * 7680ビット未満のRSA, DSA, DHと、384ビット未満のECCは使用禁止。
   * MACにSHA1を使用するのも禁止。
   * Level 3に加えてTLS 1.1も使用禁止。
 * Level 5
   * 15360ビット未満のRSA, DSA, DHと、512ビット未満のECCは使用禁止。

## VPN Serverの設定

```shell
$ vpncmd
vpncmd コマンド - SoftEther VPN Developer Edition コマンドライン管理ユーティリティ
SoftEther VPN コマンドライン管理ユーティリティ (vpncmd コマンド)
Developer Edition
Version 5.01 Build 9674   (Japanese)
Compiled 2021/11/24 10:24:33 by Unknown at Unknown
Copyright (c) all contributors on SoftEther VPN project in GitHub.
Copyright (c) Daiyuu Nobori, SoftEther Project at University of Tsukuba, and SoftEther Corporation.
All rights reserved.

vpncmd プログラムを使って以下のことができます。

1. VPN Server または VPN Bridge の管理
2. VPN Client の管理
3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)

1 - 3 を選択: 1

接続先の VPN Server または VPN Bridge が動作しているコンピュータの IP アドレスまたはホスト名を指定してください。
'ホスト名:ポート番号' の形式で指定すると、ポート番号も指定できます。
(ポート番号を指定しない場合は 443 が使用されます。)
何も入力せずに Enter を押すと、localhost (このコンピュータ) のポート 443 に接続します。
接続先のホスト名または IP アドレス:

サーバーに仮想 HUB 管理モードで接続する場合は、仮想 HUB 名を入力してください。
サーバー管理モードで接続する場合は、何も入力せずに Enter を押してください。
接続先の仮想 HUB 名を入力:
VPN Server "localhost" (ポート 443) に接続しました。

VPN Server 全体の管理権限があります。

VPN Server>ServerPasswordSet
ServerPasswordSet コマンド - VPN Server の管理者パスワードの設定
パスワードを入力してください。キャンセルするには Ctrl+D キーを押してください。

パスワード: ****************
確認入力  : ****************


コマンドは正常に終了しました。

VPN Server>exit

$ sudo ufw allow 443
```

  * ローカルPCから`https://<サーバーのIP>/admin/`にアクセス
    * オレオレ証明書なので警告が出るけど良い 
  * administrator / 先ほどのパスワードでログイン
  * 情報が正しいことを確認
  * あとはBridgeCreateとかIPsecEnableとか色々と設定。