GCP上にSoftEtherを用いてVPN環境を構築
動機
クラウド環境ってどれも(AWSとGCP)VPN機能はあるが, どれも拠点間VPNでネットワーク機器や既存の環境を持っていない場合、使い勝手が悪いと感じていました.
一方, クラウド環境にVPSを切り,環境構築を作りその上に踏み台サーバを作ってその中で何かをするのもだるいと感じたので, OpenVPNやSoftEtherを使って全てその中で完結させれば幸せになるのではと考えた次第です.
(某ROS1だとネットワークセグメント分けると辛いとこあるじゃないですか. そこら辺の良きソリューションは教えていただきたいところではある.)
やること
softehterを用いてL3 VPNをGCP上に構築する.
SoftEther
登さんが作られたVPN ソフトウェアで, フリーで使えます.(どこかのOpenVPN ASとは大違いですわ)
結構手軽に構築できます.
オンプレだとプロミスキャスモード使ってL2 VPN作れるんですが, GCPのようなクラウドでは基本的にはプロミスキャスモードはサポートされていないとのこと.
せやな.
すんなり納得.
https://serverfault.com/questions/997756/gcp-compute-instance-nic-in-promiscuous-mode
VPN Server側の準備
インスタンスの生成
- GCPにてプロジェクトを用意
- [Compute Engine] -> [VM インスタンス]内の"インスタンスを作成"をクリック
- External IPをStaticなものを確保
- お名前.comやRoute 53, Cloud DNS等でAレコードで雑に登録(今回はお名前.com)
ファイヤウォールの設定
TCPで使用するport 番号を通すポリシを設定する.
今回はTCPの5555を開放した.(雑)
SoftEtherの設定
インストール
下準備です.
software-commonとかでも良さげ.
1$ yum --enablerepo=epel
2 --downloadonly
3 --downloaddir=.
4 install
5 gcc
6 gcc-c++
7 glibc
8 make
9 binutils
10 zlib
11 openssl
12 readline
13 ncurses
14 zlib-devel
15 openssl-devel
16 readline-devel
17 ncurses-devel
18 psmisc
以下のコマンドでSoftEtherのvpn server側のソフトをダウンロードします.
1 $ sudo wget https://jp.softether-download.com/files/softether/v4.34-9745-rtm-2020.04.05-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.34-9745-rtm-2020.04.05-linux-x64-64bit.tar.gz
2
3$ tar zxvf softether-vpnserver-v4.34-9745-rtm-2020.04.05-linux-x64-64bit.tar.gz
以下のコマンドでビルドします。
1$ cd vpnserver/
2
3$ make
各種コマンドを権限を設定.
1$ sudo mv vpnserver /usr/local/
2$ cd /usr/local/vpnserver/
3$ sudo chmod 600 *
4$ sudo chmod 700 vpncmd
5$ sudo chmod 700 vpnserver
6$ sudo chown -R root:root *
systemdにて操作可能設定にします.
上の手順に書いた/usr/local/にvpnserverを配置していることを前提としています.
しかし, /usr/local/にソフトを置くのはunix原理主義者感がある.
以下のサイトにパスについてhttps://linuc.org/study/knowledge/544/よくまとまっています.
「/bin」「/usr/bin」「/usr/local/bin」ディレクトリの使い分け
https://linuc.org/study/knowledge/544/
UNIX系OSのディレクトリ構造表(CentOS 7.3)
https://qiita.com/uhooi/items/c1388f8d803641bfb8f3
1$ sudo vi /etc/systemd/system/vpnserver.service
2
3[Unit]
4Description=ichiro's softether vpn server
5After=network.target network-online.target
6
7[Service]
8Type=forking
9ExecStart=/usr/local/vpnserver/vpnserver start
10ExecStop=/usr/local/vpnserver/vpnserver stop
11
12[Install]
13WantedBy=multi-user.target
このserviceファイルには複数セクションがあり,今回使ったものは以下です.
Unit セクション
- Description: 説明などを書く
- After: サービスの依存関係.ここではnetworkとnetwork-onlineのターゲットユニット.
複数のサービス(ユニット)をまとめたものがターゲットユニットです.
Service セクション
- Type: 実行コマンドとメインプロセスをどのように扱うかについて.
forkingは起動完了の判定がコマンド終了時となる.
- ExecStart: スタート時の実行コマンドを書く
- ExecStop: ストップ時の実行コマンドを書く
Install セクション
- WantedBy: 実質ランレベルの指定.
.wantsディレクトリに今回ではmulti-user.target.wantsのようなmulti-user.target(ランレベル 3)に対するシンボリックリンクが作成される.
VPNServer起動と設定
以下にてVPN Serverを起動.
1$ systemctl daemon-reload
2$ systemctl restart vpnserver.service
以下にて環境をチェック.
1 $ ./vpncmd
2./vpncmd
3vpncmd command - SoftEther VPN Command Line Management Utility
4SoftEther VPN Command Line Management Utility (vpncmd command)
5Version 4.20 Build 9608 (English)
6Compiled 2016/04/17 21:59:35 by yagi at pc30
7Copyright (c) SoftEther VPN Project. All Rights Reserved.
8
9By using vpncmd program, the following can be achieved.
10
111. Management of VPN Server or VPN Bridge
122. Management of VPN Client
133. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)
14
15Select 1, 2 or 3: 3
16
17VPN Tools has been launched. By inputting HELP, you can view a list of the commands that can be used.
18
19VPN Tools>check
20Check command - Check whether SoftEther VPN Operation is Possible
21---------------------------------------------------
22SoftEther VPN Operation Environment Check Tool
23
24Copyright (c) SoftEther VPN Project.
25All Rights Reserved.
26
27If this operation environment check tool is run on a system and that system passes, it is most likely that SoftEther VPN software can operate on that system. This check may take a while. Please wait...
28
29Checking 'Kernel System'...
30 Pass
31Checking 'Memory Operation System'...
32 Pass
33Checking 'ANSI / Unicode string processing system'...
34 Pass
35Checking 'File system'...
36 Pass
37Checking 'Thread processing system'...
38 Pass
39Checking 'Network system'...
40 Pass
41
42All checks passed. It is most likely that SoftEther VPN Server / Bridge can operate normally on this system.
43
44The command completed successfully.
1 $ ./vpncmd
2vpncmd command - SoftEther VPN Command Line Management Utility
3SoftEther VPN Command Line Management Utility (vpncmd command)
4Version 4.20 Build 9608 (English)
5Compiled 2016/04/17 21:59:35 by yagi at pc30
6Copyright (c) SoftEther VPN Project. All Rights Reserved.
7
8By using vpncmd program, the following can be achieved.
9
101. Management of VPN Server or VPN Bridge
112. Management of VPN Client
123. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)
13
14Select 1, 2 or 3: 1
仮想HUBの作成
1> HubCreate NEWHUBNAME
ユーザの作成
1> UserCreate USERNAME
ユーザのパスワード作成
1> UserPasswordSet USERNAME
Secure NAT設定
Windows にはSoftEther VPN Server ManagerというGUIで設定できる便利なやつがいる.
./vpncmdでも設定可能.
以下のコマンドでSecureNATを設定.
1> DhcpGet
2> DhcpEnable
3> SecureNatEnable
正直SoftEther VPN Server Managerでは説明が必要ないほど整ったGUI環境が提供されている.
Client側設定
ubuntu 18.04に入れました.
手順はvpnserverと大体同じ.
1$ wgethttps://jp.softether-download.com/files/softether/v4.34-9745-rtm-2020.04.05-tree/Linux/SoftEther_VPN_Client/64bit_-_Intel_x64_or_AMD64/softether-vpnclient-v4.34-9745-rtm-2020.04.05-linux-x64-64bit.tar.gz
2$ tar xxvf softether-vpnclient-v4.34-9745-rtm-2020.04.05-linux-x64-64bit.tar.gz
3
4$ cd vpnclient
5$ make
6
7$ sudo mv vpnserver /usr/local/
8$ cd /usr/local/vpnclient/
9$ sudo chmod 600 *
10$ sudo chmod 700 vpncmd
11$ sudo chmod 700 vpnclient
12$ sudo chown -R root:root *
systemdの設定を以下に実施.
1$ $ sudo vi /etc/systemd/system/vpnclient.service
2
3[Unit]
4Description=ichiro's softether vpn client
5After=network.target network-online.target
6
7[Service]
8Type=forking
9ExecStart=/usr/local/vpnclientr/vpnclient start
10ExecStop=/usr/local/vpnclient/vpnclient stop
11
12[Install]
13WantedBy=multi-user.target
例のごとくvpnclientを起動!
1$ systemctl daemon-reload
2$ systemctl restart vpnclient.service
vpncmdで環境のチェック
1 $ ./vpncmd
2./vpncmd
3vpncmd command - SoftEther VPN Command Line Management Utility
4SoftEther VPN Command Line Management Utility (vpncmd command)
5Version 4.20 Build 9608 (English)
6Compiled 2016/04/17 21:59:35 by yagi at pc30
7Copyright (c) SoftEther VPN Project. All Rights Reserved.
8
9By using vpncmd program, the following can be achieved.
10
111. Management of VPN Server or VPN Bridge
122. Management of VPN Client
133. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)
14
15Select 1, 2 or 3: 3
16
17> check
2. Management of VPN ClientにてClient側の設定
以下のコマンドにてvpn用のnicを作成, アカウント作成, VPNに接続
1> niccreate vpn
2> nicenable vpn
3> accountcreate
4> accountpasswordset
5> accountconnect
6> accountstartupset
以下にてアカウント情報をリストできる.
Connectedや接続完了となっていればOkay!
1> accountlist
以下のコマンドにてvpnserver側のDHCPサーバよりIPアドレスを取得.
1$ sudo dhclient vpn_vpn(先程作成したNIC)
以上, VPNサーバが尋常ではなく手軽に作成することができます.
素晴らしすぎる.
最新版ではHTML 5版クライアントがついています.近々使ってみようかと思います.
SecureNATにDHCPの機能があるんですが、デフォゲの情報を入れておくとpushされた情報によってクライアント側にルーティングテーブルが2つできるというツラミがあります.ネットワークさっぱりなので少しつまづきました.
あと、Mac OS側ではtuntapが古くてbrewでインストールできない端末がありました。
brew cleanupとか良いかもしれません。面倒なんでl2tpの設定が楽だし使いやすい.
あとは時間を見つけてfirewallとIAPの設定でも書きますかね~~~~.
今回はこの辺で.