EC2に構築するSofteatherは便利で良いぞ！

久しぶりに記事投稿します。
インフラやってる人です。

今回のテーマはVPN環境構築です。

オフィス増えたりオフィス移転したりそもそも今のVPNってあんまり使い勝手良くないよね、とか色々あったついでに記事化することにいたしました。

VPNのサーバ構築って難しいですよねーって話もありつつ、何のソフトがいいんだろうっていう話があるのですが、openvpnとSofteatherを試した結果、Softeatherの方が快適でした。

ちなみにopenvpnは過去に何度か試してますが、何度も失敗しています。
（繋がりはするけどルーティングがうまくできないとか、なぜか証明書が通らないとか。）

でも、Softeatherのルーティングは調べた結果、かなりわかりやすいようにみなさん書いていらっしゃるのでとてもやりやすかったです。

# Softeather簡易構築手順

SofteatherをEC2インスタンス内に構築する話の簡易手順になります。
簡易って書きながらがっつり書いてますけど…。

## 参考記事

困ったときは以下の記事を参考にすればだいたいのことが解決するので一度参照すると良いかと思います。

- [コマンドヘルプ(公式)](https://ja.softether.org/4-docs/1-manual/6)
- [クラスメソッドの参考記事](https://dev.classmethod.jp/cloud/aws/rk-2018-02-12-softethervpn/)
- [DHCP楽々設定Qiita記事](https://qiita.com/kawaz/items/772350b9741f190605c3)
- [IDCフロンティアの構築記事](https://inaba-serverdesign.jp/blog/20170817/softether_vpn_idcf_cloud_centos7.html)

## server情報

検証利用のサーバPrivate IP:172.31.10.31 (内部からサーバの設定を見たい場合はこちら)
検証利用のサーバPublic IP:18.182.112.221 (社外からVPNを利用する時はこちら)

VPNのIPアドレス: ***10.150.0.1***
VPNのDHCP割り当て領域: ***10.150.0.0/16***

よく記事で見かけるのが `192.168.30.0/24` でした。
社内適用する上でIPのレンジってデフォルトの192.168.30.0/24だと被る環境出てくるんじゃないの？ってことで、VPNのIPやVPNのDHCP割り当て領域を変えてます。

解放しておくポート

UDP:4500 -> 0.0.0.0/0
UDP:500 -> 0.0.0.0/0

TCP:443 -> 社内の自分がつなぐ拠点のみ(172.10.0.0/16)

## 拠点情報

AWS: `172.31.0.0/16`
A拠点: `172.10.0.0/16` <- ぼくのいる拠点
B拠点: `172.11.0.0/16` 
C拠点: `172.12.0.0/16` 

```
ダミーのIPです。
```

## vpnserverの再起動方法

```
sudo vpnserver stop
sudo vpnserver start
```

## 事前準備

softeatherのダウンロードURLですが、以下に保存されています。

- [SoftEatherのある場所](https://jp.packetix-download.com/files/packetix/)

欲しいバージョン -> Linux -> Packetix_VPN_Server -> 64bitと進んでいくとファイルがダウンロードできます。
Packetixという名前らしいです。

```
curl -O https://jp.packetix-download.com/files/packetix/v4.28-9669-beta-2018.09.11-tree/Linux/PacketiX_VPN_Server/64bit_-_Intel_x64_or_AMD64/vpnserver-v4.28-9669-beta-2018.09.11-linux-x64-64bit.tar.gz
```

永遠のbeta版…。

以下はコマンドを淡々と叩けばOKです

```
mkdir softeather
mv vpnserver-v4.28-9669-beta-2018.09.11-linux-x64-64bit.tar.gz softeather
cd softeather
sudo yum install gcc
sudo zxvf vpnserver-v4.28-9669-beta-2018.09.11-linux-x64-64bit.tar.gz softeather
cd vpnserver
make
```

数回 `1` `enter` を押せばOK

```
cd ../
sudo mv vpnserver /usr/local/
sudo chown root:root -R /usr/local/vpnserver
sudo chmod 600 /usr/local/vpnserver/*
sudo chmod 700 /usr/local/vpnserver/vpncmd
sudo chmod 700 /usr/local/vpnserver/vpnserver
sudo vim /etc/profile
```

以下をファイルの一番最後に記述

```
export PATH=/usr/local/vpnserver:$PATH
```

```
sudo visudo
```

以下の通り `/usr/local/vpnserver` のパスを末尾に追記する

```
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/vpnserver
```

## 構築セットアップ関連

### 楽して構築したい人向け

以下の記事を参考に作った方が楽かもしれないです。

- [DHCP楽々設定Qiita記事](https://qiita.com/kawaz/items/772350b9741f190605c3)

### 一旦自力で設定してみたい人向け

ルーティング情報は拠点が多くなるとめんどくさいって後悔しますよ…。

```
sudo vpnserver start
sudo vpncmd
```

成功すると `vpnserver>` という表示に切り替わる

```
HubCreate main
```

*パスワードを入力* してください

```
UserCreate {user name} /Group:none /REALNAME:root /NOTE:none
UserPasswordSet {user name}
```

*パスワードを入力* を入力してください

```
IPSecEnable /L2TP:yes /L2TPRAW:no /ETHERIP:no /DEFAULTHUB:main
```

ここまでは何も考えずに作成してOK
ルーティング情報はカスタマイズが必要なため環境に合わせてのセットアップが必要です。

社内だと多分こんな感じになるのかと思われます。

```
Dhcpset /Start:10.150.0.2 /End:100.150.255.254 /Mask:255.255.0.0 /Expire:7200 /GW:10.150.0.1 /DNS:10.150.0.1 /DNS2:none /Domain:none /Log:yes /PushRoute:"172.31.0.0/255.255.0.0/10.150.0.1,172.10.0.0/255.255.0.0/10.150.0.1,172.11.0.0/255.255.0.0/10.150.0.1,172.12.0.0/255.255.0.0/10.150.0.1"
SecureNatEnable
SecureNatHostSet /MAC:none /IP:10.150.0.1 /MASK:255.255.0.0
flush
exit
```

### GUIからセットアップしたい人向け

- [Softeatherのサーバーマネージャソフト](http://www.softether-download.com/ja.aspx?product=softether)

CUIからは不慣れなのでGUIで設定してみたいという人向けにGUIが提供されています。
詳細はIDCフロンティアのブログを読んでいただくのが良いかと思います。

- [IDCフロンティアの構築記事](https://inaba-serverdesign.jp/blog/20170817/softether_vpn_idcf_cloud_centos7.html)

とはいえ、VPNの管理アカウントに対してロックかけておきたいので一度はGUIで起動するのが良さそうです。
理由としては最初のHubCreateコマンドでHub作成を行った後にパスワードを書けられるのですが、 `vpncmd` コマンドでログインする際、情報を何も入力していない場合は、簡単に管理アカウントでログインできることになっちゃうんですよね。
そしてコマンドが打ち放題なので一度GUIでログインしておくのおすすめです。

接続時はEC2のPrivate IP(172.31.10.31:443)で接続します。
初回はユーザ名が空欄、パスワードも空欄ですが、パスワード設定後はパスワード欄に設定したパスワードを入力します。

## 接続確認

Google検索でIPアドレスと検索して最初の方で引っかかったURLで確認(18.182.112.221がPublic IPなので18.182.112.221になっていればOK)
内部の接続確認はPrivate IPで確認するとつながりました。

構築環境の問題かもしれませんが、内部に立てているDNSサーバの情報を見る必要があるっぽく、内部の名前解決ができてないですね。

# まとめ

最初は繋がらなくて

コ◯ンくん「あれれぇー？おかしいぞー？あのおじさん、SecureNat使ってるのにDhcpのIPが違うからインターネットにも繋がらなくて困ってるぞぉー？」

みたいなことになってました。
Google検索かけても外に出られないからどうなってんだよ…って思ってGUIからSecureNatの情報を見たらVPNのIPが192.168.30.1でした。
そりゃダメだ。

IDCフロンティアの記事にも書かれていたのですが、Bridgeいるのかな？と思ったら全然そんなことはなかったです。

現状できなくて困ってるのは内部のDNSが引けないためIPアドレスで接続してる形なことです。
なんか設定がいるのかなーと思ってますが、この辺はわかり次第、別記事にしたいと思います。