Softether VPNにおける音声通話サービス最適化設定

この記事はSoftether VPNにおいてDiscord等の音声通話サービスに最適化する設定について記載されています。
すべての環境でこの動作は保証されるものでもなく、また、この記事の内容はSoftetherプロジェクト及び関連団体の公式見解ではないことにご了承ください。
なお、この記事の内容も最適化には影響しますがより効果的な方法を確立した↓の記事を設定することを推奨します。

[SecureNATを無効化したSoftetherVPN server構築](https://qiita.com/honahuku/items/7be170ffe36405fc5c88)

# 環境
## Server
```
NTT PC Communications, WebARENA indigo 
KVM Instance 1 CPU 1 GB
CentOS Stream 8 (X86_64)
```
サーバーマシンにはindigoというVPSを利用しています。
ここではServerはSoftether構築済みという体で解説します。
構築記事は[softether VPNをCentos7で構築する。](https://qiita.com/honahuku/items/1fdc8c6b6ad49816f1a0)等を参考に構築してください。
## Client
```
Windows 10 20H2 Build 19042.1110
Windows 11 Insider Preview (Dev) Build 22000.100
```
クライアントはWindows10とWindows11の2機で動作検証を行いました。
こちらも既に接続環境が構築されているものとします。

## Network
サーバーマシンにはグローバルIPv4アドレスが割り振られています。
クライアントのネットワークはプロキシサーバーが稼働しており、外部向けの通信はすべてこれを経由する必要があります。
また、クライアント側にはNATが存在しますがこのNATの設定は変更せずに今回の設定を行います。

# サーバー側の設定変更
サーバー側での設定を変更します。

## 仮想hub設定
Windowsマシンからサーバー管理ツールを起動し、対象サーバーへログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593714/790549ca-f1b7-576d-36dc-99b7a9b2da53.png)
左下の`仮想hub拡張オプションの編集`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593714/e0f1ef05-7ba6-917f-1381-4c3df64489e2.png)
以下の3つの項目を編集します。

```
DisableUserModeSecureNAT = 1
DisableKernelModeSecureNAT = 1
DisableIpRawModeSecureNAT = 0
```

## ローカルブリッジ設定
私が利用している方法では、SecureNAT 機能を有効にしNATによるアドレス変換とDHCPサーバー機能を比較的簡単に実現しています。
このSecureNAT 機能とローカルブリッジを併用するとスループットが低下する場合があることが知られています。([公式の機能説明ページ](https://ja.softether.org/4-docs/1-manual/3/3.7#3.7.4_.E4.BB.AE.E6.83.B3_NAT_.E6.A9.9F.E8.83.BD.E3.81.AE.E6.B3.A8.E6.84.8F.E4.BA.8B.E9.A0.85)を参考にしてください)
よって、ローカルブリッジを有効にしている場合はこの設定を削除する必要があります。
なお、[こちらの記事](https://zaki-hmkc.hatenablog.com/entry/2020/01/22/231020)のような方法でSoftetherの仮想NICと物理NICをブリッジ接続し、DNSを有効化することで同様の設定が行えるはずです。ですが仮想NICは物理NICと一部挙動が違う上、この設定を理解するには高度なネットワークに関する知識を必要とするため、パフォーマンスを求めていない場合は今回の方法で問題ないでしょう。

### ローカルブリッジの削除
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593714/44993684-8097-6e1b-8b18-f004fb94e8fa.png)
サーバー管理ツールの接続後最初の画面です。
右下のローカルブリッジ設定を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593714/8696d787-e462-90c6-c314-cdbfe422559b.png)
画像のようにローカルブリッジが設定されている場合は、その接続設定を選択し、`ローカルブリッジの削除`を実行します。
ローカルブリッジが特に設定されていない場合はこの設定は必要ありません。

# クライアント側の設定変更
クライアント側での設定を変更します。

## TCPコネクション数の編集
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593714/97740910-1ba3-cd55-a34a-0f2f2add38b2.png)

クライアント接続マネージャーを起動し、接続設定を右クリック、`プロパティ`を選択します。
右下の`通信の詳細設定`、`VPN通信に利用するTCPコネクション数`を`32本`に設定します。
右下の`OK`を選択し設定を反映してください。

# Discordの設定変更
音声通話サービスの設定変更手順として、今回はDiscordの設定を変更します。
この設定はアプリ版のみ動作します。ブラウザから利用している場合は[公式サイト](https://discord.com/)よりDiscordのクライアントソフトウェアをダウンロードしてください。

## サービスの品質
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593714/6ca38f9e-cfe4-60b8-d5d7-0640147d7494.png)
Discordの`設定`より、`アプリの設定`、`音声・ビデオ`、`サービスの品質`、`サービス品質向上のためパケットの優先度設定を有効にします`を有効に変更します。

## オーディオのサブシステム
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593714/b161b727-e893-5efd-07c2-d33a166eb342.png)

Discordの`設定`より、`アプリの設定`、`音声・ビデオ`、`オーディオのサブシステム`を`Legacy`に変更します。

以上で設定は完了です。Discordなどを実際に利用して動作を確認してください。
 
# 参考文献
Discordのオーディオのサブシステムについてのディスカッション。一部ネットワーク環境はこの設定変更で改善が見られるとのこと。私の環境もこれに該当しました。
https://www.reddit.com/r/discordapp/comments/62as33/for_those_of_you_with_troubles_having_others/

SecureNATの動作について。SecureNATはスループットの低下を招きます。ですがこの設定変更で改善が見られました。
https://ja.softether.org/4-docs/3-kb/VPNFAQ036

SecureNATによる動作不良の例
https://itkotsukotsu.hatenablog.com/entry/2020/10/13/235324