AWSとSoftEtherとUbuntuを使って、VPNを構築した話

こんにちは、takazonessです。
今回、AWSとSoftEtherとUbuntuを使い、VPNを構築しました。

結構簡単にできたので皆さんに共有したいと思います！

参考にした記事
https://qiita.com/ak-sakatoku/items/e8b6a29470b1716435ca
https://qiita.com/Tateshm/private/a7ae8b7bb276d604b046

# 前提条件
まず前提条件として
・Ubuntuを使用し、EC2インスタンスの構築
・ポートの開放
```
TCP : 22 (SSH)
UDP : 500
UDP : 4500
```
こちらを行ってください。
今回はアーキテクチャタイプが`64ビット(×86)`のものを使用しいるため、`64ビット(Arm)`でインスタンスを作成されると、不具合が発生する可能性がありますのでご注意ください。

以下、推奨インスタンスタイプ
```
t2.micro
t3.micro
t3a.micro
```
上記のインスタンスタイプで構築すれば、基本問題ないはずです。多分。

# ダウンロード
まずはダウンロードから！
https://www.softether-download.com/ja.aspx?product=softether
![スクリーンショット 2024-03-13 181826.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3740235/855934e7-c618-7954-252e-8e4b404335f0.png)
こんな感じで、選択していき、一番最新のものを選びましょう！

以下、ダウンロードと展開コマンド
```
# ダウンロード
wget https://www.softether-download.com/files/softether/v4.43-9799-beta-2023.08.31-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.43-9799-beta-2023.08.31-linux-x64-64bit.tar.gz
# 展開
tar zxvf softether-vpnserver-v4.43-9799-beta-2023.08.31-linux-x64-64bit.tar.gz
```
# インストール
次にインストールしていきます。
```
# make
cd vpnserver
make
cd ..
# ファイル権限を付与
sudo chown root:root -R /opt/vpnserver
```
# VPN起動前設定
次にVPNサーバの設定をしていきます。
```sh
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens5: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 9001 qdisc fq_codel state UP group default qlen 1000
    link/ether 06:de:48:1f:65:13 brd ff:ff:ff:ff:ff:ff
    inet 10.0.11.55/20 metric 100 brd 10.0.15.255 scope global dynamic ens5
       valid_lft 2789sec preferred_lft 2789sec
    inet6 fe80::4de:48ff:fe1f:6513/64 scope link 
       valid_lft forever preferred_lft forever
```
まず、`ip addr`と打ち、2番目の項目の英数字を覚えておきましょう！(ここでは`ens5`、以後`NIC`と呼びます。)
SoftEther VPN Serverは起動してから設定を行うので、まずサービスとして登録させ、起動させましょう！

まず、以下のコマンド打ちましょう。
```
sudo vi /etc/systemd/system/vpnserver.service
```
打つと、エディタの画面に移るので、下記内容を入力してください！
```vpnserver.service
[Unit]
Description=SoftEther VPN Server
After=network.target auditd.service
ConditionPathExists=!/opt/vpnserver/do_not_run

[Service]
Type=forking
EnvironmentFile=-/opt/vpnserver
ExecStartPre=/sbin/ip link set dev <NICの名前> promisc on
ExecStart=/opt/vpnserver/vpnserver start
ExecStop=/opt/vpnserver/vpnserver stop
KillMode=process
Restart=on-failure

# Hardening
PrivateTmp=yes
ProtectHome=yes
ProtectSystem=full
ReadOnlyDirectories=/
ReadWriteDirectories=-/opt/vpnserver
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_BROADCAST 
CAP_NET_RAW CAP_SYS_NICE CAP_SYS_ADMIN CAP_SETUID

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

# 起動！！！！！
これで起動前設定は完了です！
実際に起動していきましょう！
```
sudo systemctl daemon-reload
sudo systemctl start vpnserver
sudo systemctl status vpnserver
sudo systemctl enable vpnserver
```
無事起動に成功したら、`vpncmd`というツールで設定を行います！
もし`vpncmd`が入っていなかったら、下記コマンドを入力しましょう。
```shell
sudo apt install vpncmd
```
（あってるとは思いますが、間違えたらすみません）
# VPN起動後設定
次に起動後の設定をしていきます！
```shell-session
$ vpncmd
```
↓
```
1を選択
[空のままで2回Enter]
vpnserver> ←この表記になったら以下を順番に入力していきましょう

HubCreate <任意の名前でHUB名>
Hub <任意の名前で作ったHUB名>
UserCreate <任意のユーザ名> /GROUP:none /REALNAME:none /NOTE:none
UserPasswordSet <任意のユーザ名> /PASSWORD:<任意のパスワード>
IPsecEnable /L2TP:yes /L2TPRAW:no /ETHERIP:no /DEFAULTHUB:<任意の名前で作ったHUB名>
→事前共有キー設定に移行　<任意の事前共有キー>
DhcpSet /START:192.168.30.10 /END:192.168.30.200 /MASK:255.255.255.0 /EXPIRE:7200
/GW:192.168.30.1 /DNS:192.168.30.1 /DNS2:none /DOMAIN:none /LOG:yes 
/PUSHROUTE:"10.0.0.0/255.255.0.0/192.168.30.1"
```
`/PUSHROUTE:"10.0.0.0/255.255.0.0/192.168.30.1"`の部分、特に`10.0.0.0/255.255.0.0`の部分は環境によって違うので、
https://qiita.com/Tateshm/private/a7ae8b7bb276d604b046
↑この記事を参考にしてみてください！

# 最後に

ここまで、見てくださりありがとうございました。
正直かなり見づらい部分もあると思いますので、分かりづらい部分ありましたらコメントくだされば幸いです。