T4gインスタンスにIPv6を有効にしてSoftEther VPN Server を構築する

SoftEther VPN Serverをなるべく安く構築したいと思い、AWSのT4gインスタンスに構築してみました。IPv6も使えるようにしています。

# IPv6 CIDRの追加とルートテーブルの設定
EC2へインスタンスを構築する前に、VPCでIPv6を利用できるようにする必要があります。

### VPCへIPv6 CIDRを追加

VPCコンソールのVPCを開き、「CIDRの編集」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/fd9a9926-a163-7150-56b0-0d2b5124e784.png)
「新しいIPv6 CIDRの追加」をクリックし、Amazon提供のIPv6 CIDRブロックにチェックが入っている状態で「CIDRの選択」をクリックすると、VPCにIPv6 CIDR(/56)が割り当てられます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/14220898-aa7f-5e68-1788-da68998c5fcc.png)

### サブネットへIPv6 CIDRを追加

次に、サブネットにもIPv6アドレスを割り当てます。
VPCコンソールのサブネットを開き、「IPv6 CIDRの編集」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/e06998ff-5684-7e52-313f-a8c5e751f5e8.png)
「IPv6 CIDRを追加」をクリックし、2桁の16進数字(00～FF)を入力して保存をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/75ee8280-5592-5390-2873-9309337d10cc.png)
続いて、「IPv6 CIDRの編集」の上にある、「自動割り当てIP設定の変更」をクリックします。その中の、IPv6アドレスの自動割り当てを有効にするにチェックを入れ、保存をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/b04f2b36-8fcc-954f-2422-78837310e1b3.png)

必要であれば、VPCが持つ他のサブネットにも前述の作業を実施しましょう。ちなみに、VPCに割り当てられるIPv6 CIDRは/56固定、サブネットに割り当てられるIPv6 CIDRは/64固定で、変更することはできません。

### IPv6のルートテーブルを追加

VPCコンソールのルートテーブルを開き、IPv6 CIDRを追加したVPCのルートテーブルを選択します。ルートタブにある、ルートの編集をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/ca56251e-d7f0-84db-b184-8850816ae249.png)
::/0に対し、Internet Gatewayへのルートを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/96172317-0d4d-1d61-cde2-1f8f79d2637b.png)

# EC2インスタンスの生成
さて、EC2インスタンスを生成します。今回はなるべく安く構築するため、minimalイメージを利用し、EBSの容量削減を図ります。

EC2コンソールのAMIを開き、左上の自己所有と書かれている部分をクリックしパブリックイメージに切り替えます。「amzn2-ami-minimal」と検索し、出てきたイメージのAMIを選択して起動します。この時、所有者がamazonと書かれていることを確認してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/024a8a51-a5ad-eb55-b7d9-d684f1aa5487.png)

インスタンスタイプは、t4g.nanoを使用します。インスタンスの詳細の設定画面では、IPv6が使われるようになっていることを確認します。また、必要であればIPv6アドレスを任意で指定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/08ed2ae1-29cc-6de6-63e2-1f6cde201efc.png)

ストレージのボリュームタイプはgp3、容量は3GBで作成します。IOPSの初期値が4000になっているため、3000に変更してください。
セキュリティグループはとりあえずSSHできるように設定します。

# SoftEther VPN Serverのインストール
SSHでインスタンスにログインします。SSHクライアントソフトによるかもしれませんが、TeraTermでIPv6アドレスで接続する際は、IPv6アドレスを[]で囲まないと認識しないため注意してください。

インスタンスにログイン後、SoftEther VPN Serverをインストールします。x86系はバイナリファイルがあるのですが、Arm系のバイナリは用意されていないため、ソースコードからビルドする必要があります。[公式サイトの手順に沿って実施します。][1]

### SoftEtherに必要なパッケージのインストール

```
sudo yum -y install -y wget
sudo yum -y groupinstall "Development Tools"
sudo yum -y install readline-devel ncurses-devel openssl-devel
```

### SoftEtherのソースコードのダウンロード
GitHubからダウンロードもできますが、今回は公式サイトで配布されているものを利用します。
https://ja.softether.org/5-download/src
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/f8d994bf-2fa0-d5f2-04cc-e7f1d94d1054.png)

```
wget <コピーしたリンクを貼り付け>
```

今回ダウンロードしたファイルは、「softether-src-v4.34-9744-beta.tar.gz」です。違うファイルをダウンロードした場合は以降読み替えて利用してください。
ダウンロードしたファイルは展開しておきます。

```
tar xzvf softether-src-v4.34-9744-beta.tar.gz
```

### SoftEtherのインストール

```
cd v4.34-9744/
./configure
make
```

makeすると、以下のようなエラーが出ました。```-m64```のオプションが理解できない、と。何故！！！

```
cc: error: unrecognized command line option ‘-m64’
make: *** [tmp/objs/Mayaqua/Cfg.o] Error 1
```

調べたところ、Arm系のgccにはm64オプションがないとのこと。この対処でいいのかよく分かりませんが、Makefileから```-m64```を消したらうまくいきました。

```
vi Makefile
```
vimで、m64の文字列を探し、手動で消します。私の環境では4か所ありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/9acd9657-3e50-3ee0-7f8c-b09a35b19ac4.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/776880/73560a29-2132-b3de-3517-6778f67a7ba7.png)

Makefileを保存したら、インストール作業を続行します。

```
make
sudo make install
```

### SoftEtherの自動起動の設定

```
sudo vi /etc/systemd/system/vpnserver.service
```

```plaintext:vpnserver.service
[Unit]
Description=SoftEther VPN Server
After=network.target network-online.target

[Service]
ExecStart=/usr/bin/vpnserver start
ExecStop=/usr/bin/vpnserver stop
Type=forking
RestartSec=3s

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

```
sudo systemctl start vpnserver
sudo systemctl enable vpnserver
```

# SoftEther VPN Serverの設定
インストールが終わったら、SoftEther VPN Server Managerから設定を行います。煮るなり焼くなりお好きにどうぞ。

# おわりに
当初の予定では、手持ちのYAMAHA RTX1210とL2TPv3で拠点間接続するところまでやりたかったのですが、何故かうまくいかなかったため諦めました。。。現在strongSwanの勉強中です。

[追記]strongSwanで拠点間接続する記事を書きました。
https://qiita.com/kerorinfather/items/d92c6a489a0b38ac081d

# 参考にしたサイト
[SoftEther VPN を UNIX 上でビルドする方法][1]

[1]:https://ja.softether.org/5-download/src/2.unix