GCPにSoftether Serverを立てる(iPhone/ラズパイから接続)(NAT超えWake on LAN[2])


はじめに

前回の続きです.
とりあえずやりたいことはこんなんです.

今回は「GCPにSoftether Serverを立てる(iPhone/ラズパイから接続)」です.

Softether Client

GCPにSoftether Clientをインストール

まず,Softether Clientをインストールします.(※もしかしたら,必要ないかもです.)
GCPにSSH接続し,必要なモジュールをインストールします.

sudo apt update
sudo apt-get install -y gcc make wget tzdata git libreadline-dev libncurses-dev libssl-dev bridge-utils

Softherで指定するCPUのためにCPU情報を取得します.

$ lscpu
Architecture:        x86_64 <<< bit info
CPU op-mode(s):      32-bit, 64-bit <<< which bit cpu can handle
Byte Order:          Little Endian
CPU(s):              1
On-line CPU(s) list: 0
Thread(s) per core:  1
Core(s) per socket:  1
Socket(s):           1
NUMA node(s):        1
Vendor ID:           GenuineIntel
CPU family:          6
Model:               79
Model name:          Intel(R) Xeon(R) CPU @ 2.20GHz
Stepping:            0
CPU MHz:             2200.000

上記情報を元に公式サイトからClientのダウンロード用URLを取得します.

# Download and Install
mkdir tmp
cd /tmp
wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.34-9745-beta/~~~~.tar.gz
tar -xvf ~~~.tar.gz
cd vpnclient
make # >> Enter 1

# move to usr/local
cd ../
sudo mv vpnclient/ /usr/local/

# set permission
cd /usr/local/vpnclient/
sudo chmod 600 *
sudo chmod 700 vpncmd vpnclient

再起動した時にSoftether Clientが起動するようにサービスを作成します.

sudo vi /etc/systemd/system/vpnclient.service
/etc/systemd/system/vpnclient.service
[Unit]
Description=SoftEther VPN Client
After=network.target network-online.target

[Service]
ExecStart=/usr/local/vpnclient/vpnclient start
ExecStop=/usr/local/vpnclient/vpnclient stop
Type=forking
RestartSec=3s

[Install]
WantedBy=multi-user.target

先ほど作成したサービスを有効にします.

sudo systemctl daemon-reload
sudo systemctl start vpnclient
sudo systemctl enable vpnclient

Softether Server

GCPにSoftether Serverを立てる

Client同様に公式サイトからServerのダウンロード用URLを取得します.※GCPにはClientとServerの両方インストールします.

# Download and Install
mkdir tmp
cd /tmp
wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.34-9745-beta/~~~~.tar.gz #取得したURLをここで貼り付け
tar -xvf ~~~.tar.gz
cd vpnserver
make # >> Enter 1

# move to usr/local
cd ../
sudo mv vpnserver/ /usr/local/

# set permission
cd /usr/local/vpnserver/
sudo chmod 600 *
sudo chmod 700 vpncmd vpnserver

再起動した時にSoftether serverが起動するようにサービスを作成します.

sudo vi /etc/systemd/system/vpnserver.service
/etc/systemd/system/vpnserver.service
[Unit]
Description=SoftEther VPN Server
After=network.target network-online.target

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

[Install]
WantedBy=multi-user.target

先ほど作成したサービスを有効にします.

# read service
sudo systemctl daemon-reload

# enable and start
sudo systemctl enable vpnserver.service
sudo systemctl start vpnserver.service

server用のポートを解放する

VPN接続用にGCPのポート(TCP992,1194,5555のいずれか,UDP500,4500,1701)を開放する必要があります.

手順はSSH用にポート開放した手順と同様です.

port1

画像の「さっき設定したやつ」のところに適宜,「TCP992,1194,5555のいずれか」と「UDP500,4500,1701(iPhoneのL2TP用)」入力して保存します.

port2

softether serverの詳細な設定を行う

WindowsまたはMacの方は公式サイトからGUIツールが配布されているので,それをインストールします.

インストールが完了し,実行します.
初期画面>New Setting から新しくホストを作成します.ホストネームに先ほどDDNSで取得したドメインを入力します.この時のパスワードは空で良いです.

OKを選択し,作成したホストをクリックすると,パスワード設定するように言われるので設定します.

仮想ハブを作成します.

DDNSは既に設定しているので,青丸部分はテキトーでいいです.(あとで無効にします.)

VPN Azureは使いません.

Create Userを選択し,ユーザーを作成します.

ユーザーネームとパスワードを設定します.

次にDDNSを無効にします.

設定ファイルを出力し,そのファイルを以下にようにfalseからtrueに編集し保存します.

先ほど編集したファイルを読み込み,適用すればOKです.

⚠️また,443ポートはApacheサーバー用にしたいので,Listener Listから443をStopさせます.

Secure NATの設定

Manage Virtual Hub > Virtual NAT and Virtual DHCP Server (Secure NAT) > Secure NAT Configurationから好きなプライベートアドレスを割り当てます.

今回は最初に載せた上図のような構成にしたいので,192.168.0.0/24のネットワークを構築します.

ClientからServerに接続する

Clientの設定

ClientにはGUIツールがないので,コマンドで操作します.

cd /usr/local/vpnclient/
./vpncmd

仮想NICを作成します.今回はvpn_nicという名前にします.
bash
NicCreate {name}

アカウントを作成します.今回はtestとします.

AccountCreate test
> host and port: {ip address or host name}:{port number} # 前回取得したドメイン:ポート番号は992か1194か5555
> virtual hub name: {server's hub name} # Server Managerで設定したハブ名
> username: {username} # Server Managerで設定したユーザーネーム
> LAN card name: vpn_nic # さっき作成したやつ

AccountPassword test (AccountCreateで作成した名前)
> Password: *****
> standard or radius: standard

AccountConnect test

以下で接続済と出ればOKです.

# check connection status
AccountList

また,再起動時に自動で接続するように設定します.

AccountStartupSet test

これでClientの設定は終わりです.

ルーティングテーブルの設定

先ほど作成した仮想NICにIPアドレスを振るようにします.恐らく,ip aコマンドを打ってもまだ割り当てられていないと思います.

sudo vi /etc/sysctl.conf
/etc/sysctl.conf
net.ipv4.ip_forward=1
sudo sysctl -p
sudo dhclient vpn_{name} # 今回は{name}=vpn_nic
ip a

でIPが割り当てられたらOK

最後にスタートアップ時にDHCPが動くようにします.

sudo vi /home/{user}/vpn/dhcp.sh
/home/{user}/vpn/dhcp.sh
dhclient vpn_{name}

iPhoneから接続する

本題とは逸れますが,一応行います.

まず,iPhone用にL2TPの設定を行います.最初の画面>IPSec/L2TP Settingというのがあるのでそれをクリックします.そして,下図の画面のようにします.

ip addressの部分はDDNSのドメイン名にしてください.

で接続できればOKです.
192.168.0.11が割り当てられていて,ちゃんと接続できていますね!

ラズパイから接続する

softether client

基本的には,GCPにSoftether ClientをインストールClientの設定と同じことをラズパイでします.

IPの固定

ラズパイはIPを固定した方が使い勝手がいい(∵GCP→ラズパイにリバースプロキシしたい)ので,固定します.
/etc/dhcpcd.confに以下を追記します.{name}には,作成した仮想NICの名前が入ります.

/etc/dhcpcd.conf
interface {name}
static ip_address=*.*.*.*/~

再起動して,ホスト(GCPのsoftether serverのインターフェース)にpingが通ればOKです!
※今回は,Secure NATの設定で指定した192.168.0.10pingを送っていいます.

sudo reboot
ping 192.168.0.10 # check host's interface

おわりに

とりあえず,長いのでここで終了です.

参考