【Centos7】SoftEther Server 構築手順【L2TP/IPsec】

SoftEtherを利用してVPN Serverを構築する手順です
環境は Centos7.3 1611 を利用です

マシンの中に 仮想HUBを作って仮想DHCPサーバを動かし、仮想NICで通信できるようにします
サーバの待ち受けポートはとりあえず 44444 で構築
好きなように変えてくださいです

Androidなどからは UDP500、UDP4500 も利用です（IPsec）
Androidから接続する手順は[こちら](https://qiita.com/nobu-maple/items/36f30e58311627a85508)


構築イメージ
　－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
　｜
　｜ VPN-Hub1 (10.10.10.110)：VpnHub1（仮想DHCP)
　｜　　　　↑↓　
　｜　　　　VPN-Nic1 (10.10.10.111)：tap_tap1
　｜
　｜　　　　物理NIC（192.168.56.101）：待ち受けポート：44444
　｜
　－－－－－－－－－－－－－－－－－－－－[CentOS7 SoftEther Server]

#SoftEther インストール

## コンパイル環境
```
# mkdir -p /usr/local/src/yum/21.softether_server
# cd       /usr/local/src/yum/21.softether_server
# yum --enablerepo=epel          ¥
      --downloadonly             ¥
      --downloaddir=./           ¥
      install                    ¥
      gcc                        ¥
      gcc-c++                    ¥
      glibc                      ¥
      make                       ¥
      binutils                   ¥
      zlib                       ¥
      openssl                    ¥
      readline                   ¥
      ncurses                    ¥
      zlib-devel                 ¥
      openssl-devel              ¥
      readline-devel             ¥
      ncurses-devel              ¥
      psmisc                     ¥

# yum localinstall *.rpm
```

## SoftEther - Serverのダウンロード
　　最新版は確認：http://jp.softether-download.com/files/softether/

```
# wget  --proxy-user=user    \
      --proxy-password=pass  \
      -e HTTP_PROXY=proxy.com:8080   \
      http://jp.softether-download.com/files/softether/v4.22-9634-beta-2016.11.27-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.22-9634-beta-2016.11.27-linux-x64-64bit.tar.gz

  ※  http://jp.softether-download.com/files/softether/v4.29-9680-rtm-2019.02.28-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.29-9680-rtm-2019.02.28-linux-x64-64bit.tar.gz


# ls -l
      -rw-r--r-- 1 root root 6275265 11月 27  2016 softether-vpnserver-v4.22-9634-beta-2016.11.27-linux-x64-64bit.tar.gz

  ※  -rw-rw-r--  1 root root   6249245  2月 28 19:41 softether-vpnserver-v4.29-9680-rtm-2019.02.28-linux-x64-64bit.tar.gz
```

※ 2019/3/12 追記 バージョンが 4.22から4.29に変わってます



## SoftEther 展開 ＆ コンパイル

```
# tar xvfz softether-vpnserver-v4.22-9634-beta-2016.11.27-linux-x64-64bit.tar.gz

※　# tar xvfz softether-vpnserver-v4.29-9680-rtm-2019.02.28-linux-x64-64bit.tar.gz

# cd vpnserver/
make
```

※ 2019/3/12 追記 バージョンが 4.22から4.29に変わってます

## SoftEther インストール

```
# cd ..
# mv vpnserver   /usr/local/
# cd /usr/local/vpnserver/
```

## SoftEther セキュリティ設定
接続ＩＰ限定 - 127.0.0.1以外からは管理モードで接続不可

```
# echo "127.0.0.1"  >  adminip.txt
# chmod  600  *
# chmod  700  .  vpncmd vpnserver  lib code  chain_certs
```

## SoftEther のtapデバイスに固定IPアドレスを付与するシェル

```bash:/usr/local/vpnserver/setting_ip.sh
#!/bin/bash

# case Static IP
TAP_IF="tap_tap1"

# 30sec Loop
for i in {1..30}
do
    sleep 1
    ip tap | grep --quiet ${TAP_IF}
    STATUS=$?
    if [ "${STATUS}" == "0" ]
    then
        ifcfg  ${TAP_IF}  add  10.10.10.111/24
        break;
    fi
done
exit 0
```

```
# chmod 700 /usr/local/vpnserver/setting_ip.sh
```


## SoftEther Server の自動起動設定

　サービスの起動時に、仮想LANデバイス(tap_tap1)に固定IPアドレスを付与する

```/usr/lib/systemd/system/vpnserver.service
[Unit]
Description=SoftEther VPN Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStartPost=/usr/local/vpnserver/setting_ip.sh
ExecStop=/usr/local/vpnserver/vpnserver stop

[Install]
WantedBy=multi-user.target
```

```
# systemctl  daemon-reload
# systemctl  enable  vpnserver
```


#SoftEther Server の設定


## □ VPN Server の管理モード起動

 まだいろいろ設定していないので、サービス(systemctl)としてではなく直接 vpnserver を起動する

```
# cd /usr/local/vpnserver
# ./vpnserver  start 
# ./vpncmd  localhost  /SERVER
```


## □ VPN Server のヘルプ確認

```
VPN Server>help
下記の 205 個のコマンドが使用できます:
 About                      - バージョン情報の表示
 AcAdd                      - 接続元 IP 制限リストにルールを追加 (IPv4)
 AcAdd6                     - 接続元 IP 制限リストにルールを追加 (IPv6)
 AcDel                      - 接続元 IP 制限リスト内のルールの削除
 AcList                     - 接続元 IP 制限リストのルール一覧の取得
 AccessAdd                  - アクセスリストへのルールの追加 (IPv4)
 AccessAdd6                 - アクセスリストへのルールの追加 (IPv6)
 AccessAddEx                - アクセスリストへのルールの追加 (IPv4, 遅延・ジッタ・パケットロス設定可能)
 AccessAddEx6               - アクセスリストへのルールの追加 (IPv6, 遅延・ジッタ・パケットロス設定可能)
 AccessDelete               - アクセスリストからルールを削除
 AccessDisable              - アクセスリストのルールの無効化
 AccessEnable               - アクセスリストのルールの有効化
 AccessList                 - アクセスリストのルール一覧の取得
 AdminOptionList            - 仮想 HUB 管理オプションの一覧の取得
 AdminOptionSet             - 仮想 HUB 管理オプションの値の設定
 BridgeCreate               - ローカルブリッジ接続の作成
 BridgeDelete               - ローカルブリッジ接続の削除
 BridgeDeviceList           - ローカルブリッジに使用できる LAN カード一覧の取得
 BridgeList                 - ローカルブリッジ接続の一覧の取得
 CAAdd                      - 信頼する証明機関の証明書の追加
 CADelete                   - 信頼する証明機関の証明書の削除
 CAGet                      - 信頼する証明機関の証明書の取得
 CAList                     - 信頼する証明機関の証明書一覧の取得
 Caps                       - サーバーの機能・能力一覧の取得
 CascadeAnonymousSet        - カスケード接続のユーザー認証の種類を匿名認証に設定
 CascadeCertGet             - カスケード接続に用いるクライアント証明書の取得
 CascadeCertSet             - カスケード接続のユーザー認証の種類をクライアント証明書認証に設定
 CascadeCompressDisable     - カスケード接続の通信時のデータ圧縮の無効化
 CascadeCompressEnable      - カスケード接続の通信時のデータ圧縮の有効化
 CascadeCreate              - 新しいカスケード接続の作成
 CascadeDelete              - カスケード接続の削除
 CascadeDetailSet           - カスケード接続の高度な通信設定の設定
 CascadeEncryptDisable      - カスケード接続の通信時の暗号化の無効化
 CascadeEncryptEnable       - カスケード接続の通信時の暗号化の有効化
 CascadeGet                 - カスケード接続の設定の取得
 CascadeList                - カスケード接続一覧の取得
 CascadeOffline             - カスケード接続のオフライン状態への設定
 CascadeOnline              - カスケード接続のオンライン状態への設定
 CascadePasswordSet         - カスケード接続のユーザー認証の種類をパスワード認証に設定
 CascadePolicySet           - カスケード接続セッションのセキュリティポリシーの設定
 CascadeProxyHttp           - カスケード接続の接続方法を HTTP プロキシサーバー経由接続に設定
 CascadeProxyNone           - カスケード接続の接続方法を直接 TCP/IP 接続に設定
 CascadeProxySocks          - カスケード接続の接続方法を SOCKS プロキシサーバー経由接続に設定
 CascadeRename              - カスケード接続の名前の変更
 CascadeServerCertDelete    - カスケード接続のサーバー固有証明書の削除
 CascadeServerCertDisable   - カスケード接続のサーバー証明書の検証オプションの無効化
 CascadeServerCertEnable    - カスケード接続のサーバー証明書の検証オプションの有効化
 CascadeServerCertGet       - カスケード接続のサーバー固有証明書の取得
 CascadeServerCertSet       - カスケード接続のサーバー固有証明書の設定
 CascadeSet                 - カスケード接続の接続先の設定
 CascadeStatusGet           - カスケード接続の現在の状態の取得
 CascadeUsernameSet         - カスケード接続の接続に使用するユーザー名の設定
 Check                      - SoftEther VPN の動作が可能かどうかチェックする
 ClusterConnectionStatusGet - クラスタコントローラへの接続状態の取得
 ClusterMemberCertGet       - クラスタメンバの証明書の取得
 ClusterMemberInfoGet       - クラスタメンバの情報の取得
 ClusterMemberList          - クラスタメンバの一覧の取得
 ClusterSettingController   - VPN Server の種類をクラスタコントローラに設定
 ClusterSettingGet          - 現在の VPN Server のクラスタリング構成の取得
 ClusterSettingMember       - VPN Server の種類をクラスタメンバに設定
 ClusterSettingStandalone   - VPN Server の種類をスタンドアロンに設定
 ConfigGet                  - VPN Server の現在のコンフィグレーションの取得
 ConfigSet                  - VPN Server へのコンフィグレーションの書き込み
 ConnectionDisconnect       - VPN Server に接続中の TCP コネクションの切断
 ConnectionGet              - VPN Server に接続中の TCP コネクションの情報の取得
 ConnectionList             - VPN Server に接続中の TCP コネクション一覧の取得
 Crash                      - VPN Server / Bridge プロセスでエラーを発生させプロセスを強制終了する
 CrlAdd                     - 無効な証明書の追加
 CrlDel                     - 無効な証明書の削除
 CrlGet                     - 無効な証明書の取得
 CrlList                    - 無効な証明書リストの一覧の取得
 Debug                      - デバッグコマンドの実行
 DhcpDisable                - SecureNAT 機能の仮想 DHCP サーバー機能の無効化
 DhcpEnable                 - SecureNAT 機能の仮想 DHCP サーバー機能の有効化
 DhcpGet                    - SecureNAT 機能の仮想 DHCP サーバー機能の設定の取得
 DhcpSet                    - SecureNAT 機能の仮想 DHCP サーバー機能の設定の変更
 DhcpTable                  - SecureNAT 機能の仮想 DHCP サーバー機能のリーステーブルの取得
 DynamicDnsGetStatus        - ダイナミック DNS 機能の現在の状態の取得
 DynamicDnsSetHostname      - ダイナミック DNS ホスト名の設定
 EtherIpClientAdd           - EtherIP / L2TPv3 over IPsec サーバー機能のクライアントデバイスからの接続を受付けるための接続設定の追加
 EtherIpClientDelete        - EtherIP / L2TPv3 over IPsec サーバー機能のクライアントデバイスからの接続を受付けるための接続設定の削除
 EtherIpClientList          - EtherIP / L2TPv3 over IPsec サーバー機能のクライアントデバイスからの接続を受付けるための接続設定の一覧表示
 ExtOptionList              - 仮想 HUB 拡張オプションの一覧の取得
 ExtOptionSet               - 仮想 HUB 管理オプションの値の設定
 Flush                      - VPN Server / Bridge の未保存の設定データを設定ファイルに強制保存する
 GroupCreate                - グループの作成
 GroupDelete                - グループの削除
 GroupGet                   - グループ情報と所属しているユーザー一覧の取得
 GroupJoin                  - グループにユーザーを追加
 GroupList                  - グループ一覧の取得
 GroupPolicyRemove          - グループのセキュリティポリシーの削除
 GroupPolicySet             - グループのセキュリティポリシーの設定
 GroupSet                   - グループ情報の設定
 GroupUnjoin                - グループからユーザーを削除
 Hub                        - 管理する仮想 HUB の選択
 HubCreate                  - 新しい仮想 HUB の作成
 HubCreateDynamic           - 新しいダイナミック仮想 HUB の作成 (クラスタリング用)
 HubCreateStatic            - 新しいスタティック仮想 HUB の作成 (クラスタリング用)
 HubDelete                  - 仮想 HUB の削除
 HubList                    - 仮想 HUB の一覧の取得
 HubSetDynamic              - 仮想 HUB の種類をダイナミック仮想 HUB に変更
 HubSetStatic               - 仮想 HUB の種類をスタティック仮想 HUB に変更
 IPsecEnable                - IPsec VPN サーバー機能の有効化 / 無効化
 IPsecGet                   - IPsec VPN サーバー機能の現在の設定の取得
 IpDelete                   - IP アドレステーブルエントリの削除
 IpTable                    - IP アドレステーブルデータベースの取得
 KeepDisable                - インターネット接続の維持機能の無効化
 KeepEnable                 - インターネット接続の維持機能の有効化
 KeepGet                    - インターネット接続の維持機能の取得
 KeepSet                    - インターネット接続の維持機能の設定
 LicenseAdd                 - 新しいライセンスキーの登録
 LicenseDel                 - 登録されているライセンスの削除
 LicenseList                - 登録されているライセンス一覧の取得
 LicenseStatus              - 現在の VPN Server のライセンス状態の取得
 ListenerCreate             - TCP リスナーの追加
 ListenerDelete             - TCP リスナーの削除
 ListenerDisable            - TCP リスナーの動作停止
 ListenerEnable             - TCP リスナーの動作開始
 ListenerList               - TCP リスナー一覧の取得
 LogDisable                 - セキュリティログまたはパケットログの無効化
 LogEnable                  - セキュリティログまたはパケットログの有効化
 LogFileGet                 - ログファイルのダウンロード
 LogFileList                - ログファイル一覧の取得
 LogGet                     - 仮想 HUB のログ保存設定の取得
 LogPacketSaveType          - パケットログに保存するパケットの種類と保存内容の設定
 LogSwitchSet               - ログファイルの切り替え周期の設定
 MacDelete                  - MAC アドレステーブルエントリの削除
 MacTable                   - MAC アドレステーブルデータベースの取得
 MakeCert                   - 新しい X.509 証明書と秘密鍵の作成 (1024 bit)
 MakeCert2048               - 新しい X.509 証明書と秘密鍵の作成 (2048 bit)
 NatDisable                 - SecureNAT 機能の仮想 NAT 機能の無効化
 NatEnable                  - SecureNAT 機能の仮想 NAT 機能の有効化
 NatGet                     - SecureNAT 機能の仮想 NAT 機能の設定の取得
 NatSet                     - SecureNAT 機能の仮想 NAT 機能の設定の変更
 NatTable                   - SecureNAT 機能の仮想 NAT 機能のセッションテーブルの取得
 Offline                    - 仮想 HUB をオフラインにする
 Online                     - 仮想 HUB をオンラインにする
 OpenVpnEnable              - OpenVPN 互換サーバー機能を有効化 / 無効化
 OpenVpnGet                 - OpenVPN 互換サーバー機能の現在の設定を取得
 OpenVpnMakeConfig          - OpenVPN 互換サーバー機能に接続可能なサンプルの OpenVPN 設定ファイルの生成
 OptionsGet                 - 仮想 HUB のオプション設定の取得
 PolicyList                 - セキュリティポリシーの種類と設定可能値の一覧を表示
 RadiusServerDelete         - ユーザー認証に使用する RADIUS サーバー設定の削除
 RadiusServerGet            - ユーザー認証に使用する RADIUS サーバー設定の取得
 RadiusServerSet            - ユーザー認証に使用する RADIUS サーバーの設定
 Reboot                     - VPN Server サービスの再起動
 RouterAdd                  - 新しい仮想レイヤ 3 スイッチの定義
 RouterDelete               - 仮想レイヤ 3 スイッチの削除
 RouterIfAdd                - 仮想レイヤ 3 スイッチへの仮想インターフェイスの追加
 RouterIfDel                - 仮想レイヤ 3 スイッチの仮想インターフェイスの削除
 RouterIfList               - 仮想レイヤ 3 スイッチに登録されているインターフェイス一覧の取得
 RouterList                 - 仮想レイヤ 3 スイッチ一覧の取得
 RouterStart                - 仮想レイヤ 3 スイッチの動作の開始
 RouterStop                 - 仮想レイヤ 3 スイッチの動作の停止
 RouterTableAdd             - 仮想レイヤ 3 スイッチへのルーティングテーブルエントリの追加
 RouterTableDel             - 仮想レイヤ 3 スイッチのルーティングテーブルエントリの削除
 RouterTableList            - 仮想レイヤ 3 スイッチのルーティングテーブル一覧の取得
 SecureNatDisable           - 仮想 NAT および DHCP サーバー機能 (SecureNAT 機能) の無効化
 SecureNatEnable            - 仮想 NAT および DHCP サーバー機能 (SecureNAT 機能) の有効化
 SecureNatHostGet           - SecureNAT 機能の仮想ホストのネットワークインターフェイス設定の取得
 SecureNatHostSet           - SecureNAT 機能の仮想ホストのネットワークインターフェイス設定の変更
 SecureNatStatusGet         - 仮想 NAT および DHCP サーバー機能 (SecureNAT 機能) の動作状況の取得
 ServerCertGet              - VPN Server の SSL 証明書の取得
 ServerCertRegenerate       - 指定された CN (Common Name) を持つ自己署名証明書を新たに作成し VPN Server に登録
 ServerCertSet              - VPN Server の SSL 証明書と秘密鍵の設定
 ServerCipherGet            - VPN 通信で使用される暗号化アルゴリズムの取得
 ServerCipherSet            - VPN 通信で使用される暗号化アルゴリズムの設定
 ServerInfoGet              - サーバー情報の取得
 ServerKeyGet               - VPN Server の SSL 証明書の秘密鍵の取得
 ServerPasswordSet          - VPN Server の管理者パスワードの設定
 ServerStatusGet            - サーバーの現在の状態の取得
 SessionDisconnect          - セッションの切断
 SessionGet                 - セッション情報の取得
 SessionList                - 接続中のセッション一覧の取得
 SetEnumAllow               - 仮想 HUB の匿名ユーザーへの列挙の許可設定
 SetEnumDeny                - 仮想 HUB の匿名ユーザーへの列挙の禁止設定
 SetHubPassword             - 仮想 HUB の管理パスワードを設定する
 SetMaxSession              - 仮想 HUB の最大同時接続セッション数を設定する
 SstpEnable                 - Microsoft SSTP VPN 互換サーバー機能を有効化 / 無効化
 SstpGet                    - Microsoft SSTP VPN 互換サーバー機能の現在の設定を取得
 StatusGet                  - 仮想 HUB の現在の状況の取得
 SyslogDisable              - syslog 送信機能の無効化
 SyslogEnable               - syslog 送信機能の設定
 SyslogGet                  - syslog 送信機能の取得
 TrafficClient              - 通信スループット測定ツールクライアントの実行
 TrafficServer              - 通信スループット測定ツールサーバーの実行
 UserAnonymousSet           - ユーザーの認証方法を匿名認証に設定
 UserCertGet                - 固有証明書認証のユーザーの登録されている証明書の取得
 UserCertSet                - ユーザーの認証方法を固有証明書認証に設定し証明書を設定
 UserCreate                 - ユーザーの作成
 UserDelete                 - ユーザーの削除
 UserExpiresSet             - ユーザーの有効期限の設定
 UserGet                    - ユーザー情報の取得
 UserList                   - ユーザー一覧の取得
 UserNTLMSet                - ユーザーの認証方法を NT ドメイン認証に設定
 UserPasswordSet            - ユーザーの認証方法をパスワード認証に設定しパスワードを設定
 UserPolicyRemove           - ユーザーのセキュリティポリシーの削除
 UserPolicySet              - ユーザーのセキュリティポリシーの設定
 UserRadiusSet              - ユーザーの認証方法を RADIUS 認証に設定
 UserSet                    - ユーザー情報の変更
 UserSignedSet              - ユーザーの認証方法を署名済み証明書認証に設定
 VpnAzureGetStatus          - VPN Azure 機能の現在の状態の取得
 VpnAzureSetEnable          - VPN Azure 機能の有効化 / 無効化
 VpnOverIcmpDnsEnable       - VPN over ICMP / VPN over DNS サーバー機能を有効化 / 無効化
 VpnOverIcmpDnsGet          - 現在の VPN over ICMP / VPN over DNS サーバー機能の設定を取得

それぞれのコマンドの使用方法については、"コマンド名 ?" と入力するとヘルプが表示されます。
コマンドは正常に終了しました。

```

## □ VPN Server の管理者パスワードの設定

```
>ServerPasswordSet
```

## □ 各種無効化：インターネット接続維持

```
>KeepDisable
>KeepGet
      現在の状態           |無効
```

## □ 各種無効化：OpenVPN 互換サーバー

```
>OpenVpnEnable  no  /PORTS:1194
>OpenVpnGet
      OpenVPN 互換サーバー機能が有効|いいえ
```

## □ 各種無効化：Microsoft SSTP VPN

```
>SstpEnable  no
>SstpGet
      SSTP VPN 互換サーバー機能が有効|いいえ
```




## □ 各種無効化：VPN Azure

```
>VpnAzureSetEnable  no
>VpnAzureGetStatus
      VPN Azure 機能が有効|いいえ
```


## □ 各種無効化：VPN over ICMP・DNS

```
>VpnOverIcmpDnsEnable  /ICMP:no  /DNS:no
>VpnOverIcmpDnsGet
      VPN over ICMP サーバーが有効|いいえ
      VPN over DNS サーバーが有効 |いいえ
```


## □ TCP リスナーの設定
 既存は全削除、追加する44444 のみ有効化

```
>ListenerCreate 44444
>ListenerList
      ポート番号|状態
      ----------+------
      TCP 443   |動作中
      TCP 992   |動作中
      TCP 1194  |動作中
      TCP 5555  |動作中
      TCP 44444 |動作中

>ListenerDelete 443
>ListenerDelete 992
>ListenerDelete 1194
>ListenerDelete 5555
>ListenerList
      TCP 44444 |動作中
```

## □ いったん停止

```
>Quit
# ./vpnserver stop
```

## □ DDns、NATトラサーバル、IPv6 の無効化

　vpnserver の設定ファイルを直接編集
　※ vpnserver を起動したまま編集しても元に戻されちゃうので、必ずvpnserverを停止してから編集のコト

```
# cp -p vpn_server.config vpn_server.config.org
# vi vpn_server.config
      declare DDnsClient
      {
              bool Disabled true
          
      declare ServerConfiguration
      {
              bool DisableIPv6Listener true
              bool DisableNatTraversal true
```


## □ 再起動＆接続

　残しておいたポートを指定して接続できること（指定しないと接続できないこと）
　設定したパスワードの入力を求められること

```
# ./vpnserver start
# ./vpncmd  localhost:44444  /SERVER
```

## □ デフォルト HUB の削除

　セキュリティのためというかデフォルトのHUB名は消しておく

```
>HubList
      仮想 HUB 名     |DEFAULT

>HubDelete  DEFAULT
```

## □ 仮想 HUB の作成（ダミー用）

　接続時にデフォルトで利用されるダミー用のHUB
　HUBのパスワードも設定しとくこと

```
>HubCreate  VpnHub0_dummy
      パスワード:
      確認入力  :
```

## □ 仮想 HUB の作成（通常利用のためのＨＵＢ）

　実際の接続で利用するHUB
　※ 接続時にこのHUB名を明示的に指定させるためにダミーとは別に作成
　こちらもHUB管理用のパスワードを設定しとくこと

```
>HubCreate  VpnHub1
      パスワード: *********************
      確認入力  : *********************
```

## □ 仮想 HUB の確認

```
>HubList
      仮想 HUB 名     |VpnHub0_dummy
      仮想 HUB 名     |VpnHub1
```

## □ IPsec VPN サーバー機能の有効化（デフォルトはダミーHubに設定）

　L2TP/IPsec で接続するための設定
　　PSKの文字列はクライアントから接続するときに必要です
　　（Androidなど一部クライアントでは使える文字に制限があるようです）

```
>IPsecEnable  /L2TP:yes  /L2TPRAW:no  /ETHERIP:no  /PSK:ipsecvpn  /DEFAULTHUB:VpnHub0_dummy
>IPsecGet
      L2TP over IPsec サーバー機能は有効            |はい
      Raw L2TP サーバー機能は有効                   |いいえ
      EtherIP / L2TPv3 over IPsec サーバー機能は有効|いいえ
      IPsec 事前共有鍵の文字列                      |ipsecvpn
      デフォルト仮想 HUB 名                         |VpnHub0_dummy
```

## □ 操作するHUBを指定（ダミー用設定）

```
>Hub VpnHub0_dummy
```

## □ ダミーHub設定：仮想 HUB の匿名ユーザーへの列挙の禁止、最大同時接続セッション数、オフライン設定

```
>SetEnumDeny
>SetMaxSession 1
>Offline
>OptionsGet
      匿名ユーザーに対する仮想 HUB の列挙|禁止
      最大同時接続セッション数           |1
      状態                               |オフライン
      仮想 HUB の種類                    |スタンドアロン
```


## □ 操作するHUBを指定（通常利用ＨＵＢ設定）

```
>Hub  VpnHub1
```

## □ 利用Hub設定：仮想 HUB の匿名ユーザーへの列挙の禁止、最大同時接続セッション数、オンライン設定

```
>SetEnumDeny
>SetMaxSession  1
>OnLine
>OptionsGet
      匿名ユーザーに対する仮想 HUB の列挙|禁止
      最大同時接続セッション数           |1
      状態                               |オンライン
      仮想 HUB の種類                    |スタンドアロン
```

## □ 利用Hub設定：SecureNAT 機能の仮想 NAT 機能の無効化

```
>NatDisable
>NatGet
      仮想 NAT 機能を使用する          |いいえ
```

## □ 利用Hub設定：SecureNAT 機能の仮想ホストのネットワークインターフェイス設定

```
>SecureNatHostSet  /MAC:none  /IP:10.10.10.110  /MASK:255.255.255.0
>SecureNatHostGet
      MAC アドレス    |00-AC-11-C6-09-A2
      IP アドレス     |10.10.10.110
      サブネットマスク|255.255.255.0
```

## □ 利用Hub設定：SecureNAT 機能の仮想 DHCP サーバー機能の有効化

```
>DhcpSet  /START:10.10.10.150  /END:10.10.10.159  /MASK:255.255.255.0  /EXPIRE:7200  /GW:none  /DNS:none  /DNS2:none  /DOMAIN:none  /LOG:yes
>DhcpGet
      仮想 DHCP 機能を使用する            |はい
      配布アドレス帯の開始                |10.10.10.150
      配布アドレス帯の終了                |10.10.10.159
      サブネットマスク                    |255.255.255.0
      リース期限 (秒)                     |7200
      デフォルトゲートウェイアドレス      |なし
      DNS サーバー アドレス 1             |なし
      DNS サーバー アドレス 2             |なし
      ドメイン名                          |
      NAT および DHCP の動作のログ保存    |はい
      プッシュする静的ルーティングテーブル|
```

## □ 利用Hub設定：SecureNAT 機能の有効化

```
>SecureNatEnable
>SecureNatStatusGet
      仮想 HUB 名                     |VpnHub1
      NAT TCP/IP セッション数         |0 セッション
      NAT UDP/IP セッション数         |0 セッション
      NAT ICMP セッション数           |0 セッション
      NAT DNS セッション数            |0 セッション
      割り当て済み DHCP クライアント数|0 クライアント
      カーネルモード NAT で動作中     |いいえ
      Raw IP モード NAT で動作中      |いいえ
```

## □ 利用Hub設定：VPN Server のリブート（設定反映）

```
>Reboot
```

## □ 利用Hub設定：仮想 HUB の現在の状況の取得

```
>StatusGet
      仮想 HUB 名                   |VpnHub1
      状態                          |オンライン
      種類                          |スタンドアロン
      SecureNAT 機能                |有効
```

## □ 利用Hub設定：仮想 HUB に ユーザ作成（パスワード設定）

　VPN に接続するためのユーザ設定
　パスワードも必ず設定のコト

```
>UserCreate      HubUser1  /GROUP:none  /REALNAME:none  /NOTE:none
>UserPasswordSet HubUser1
      パスワード: *********************
      確認入力  : *********************

>UserList
      ユーザー名      |HubUser1
      認証方法        |パスワード認証
      有効期限        |無期限
```


## □ HUB 操作解除

```
>Hub
```

## □ ブリッジデバイス(TAP)の作成

```
>BridgeCreate   VpnHub1  /DEVICE:tap1  /TAP:yes
>BridgeList
      1   |VpnHub1    |tap1                                      |動作中
```

※ この仮想ブリッジデバイスは仮想HUBにのみ接続して物理LANには接続しない設定となっています
※ このため仮想HUBに接続している相手のみしか通信できません




## □ 設定終了

```
>QUIT
```


## TAPデバイスの確認

```
# ip  tap
      tap_tap1: tap
```

## TAPデバイスへの自動IP付与確認（vpnserverの再起動）

　vpnserver をサービスとして起動して、設定した通りにIPが自動付与されることを確認

```
# ./vpnserver stop
# systemctl  start   vpnserver
# ip  addr  show  tap_tap1
      5: tap_tap1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
          link/ether 00:ac:34:c7:73:0c brd ff:ff:ff:ff:ff:ff
          inet 10.10.10.111/24 brd 10.10.10.255 scope global tap_tap1
             valid_lft forever preferred_lft forever
```

## TAPデバイスのコネクション状況確認

```
# nmcli  con
      名前      UUID                                  タイプ          デバイス
      enp0s8    4759bdd1-c3dc-49a9-8104-b5f21ad93bd5  802-3-ethernet  enp0s8
★    tap_tap1  ea250512-a295-4551-93d0-3e6e9b3a3f9e  tun             tap_tap1
      enp0s3    34cd09a1-20b1-4afb-bbc1-89ce4f0a8912  802-3-ethernet  --
```


## TAPデバイス状況確認

```
# nmcli  dev
      デバイス  タイプ    状態      接続
      enp0s8    ethernet  接続済み  enp0s8
★    tap_tap1  tun       接続済み  tap_tap1
      enp0s3    ethernet  切断済み  --
      lo        loopback  管理無し  --
```

## ファイアウォールの VpnServer ポート解放設定

```xml:/etc/firewalld/services/vpnserver.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
    <short>VPN</short>
    <description>SoftEther VPN Server</description>
    <port protocol="tcp" port="44444"/>
</service>
```

```
# firewall-cmd  --add-service=vpnserver --zone=public --permanent
# firewall-cmd  --add-service=ipsec --zone=public --permanent
# firewall-cmd  --reload
```

## ファイアウォール設定確認

```
# firewall-cmd  --list-all
# firewall-cmd  --service=vpnserver  --get-ports  --permanent
      44444/tcp

# firewall-cmd  --service=ipsec  --get-ports  --permanent
      500/udp 4500/udp

```



以上
とりあえずサーバ側構築は完了

OSを再起動して、サービスとして自動起動＆IPアドレス自動付与されることも確認しとくと良いかも


AndroidからL2TP/IPsecで接続する手順は[こちら](https://qiita.com/nobu-maple/items/36f30e58311627a85508)を見てみてくださいです