GCP上にSoftEtherを用いてVPN環境を構築

Share on:

動機

クラウド環境ってどれも(AWSとGCP)VPN機能はあるが, どれも拠点間VPNでネットワーク機器や既存の環境を持っていない場合、使い勝手が悪いと感じていました.

一方, クラウド環境にVPSを切り,環境構築を作りその上に踏み台サーバを作ってその中で何かをするのもだるいと感じたので, OpenVPNやSoftEtherを使って全てその中で完結させれば幸せになるのではと考えた次第です.

(某ROS1だとネットワークセグメント分けると辛いとこあるじゃないですか. そこら辺の良きソリューションは教えていただきたいところではある.)

やること

softehterを用いてL3 VPNをGCP上に構築する.

SoftEther

登さんが作られたVPN ソフトウェアで, フリーで使えます.(どこかのOpenVPN ASとは大違いですわ)

結構手軽に構築できます.

https://ja.softether.org/

オンプレだとプロミスキャスモード使ってL2 VPN作れるんですが, GCPのようなクラウドでは基本的にはプロミスキャスモードはサポートされていないとのこと.

せやな.

すんなり納得.

https://serverfault.com/questions/997756/gcp-compute-instance-nic-in-promiscuous-mode

VPN Server側の準備

インスタンスの生成

  1. GCPにてプロジェクトを用意
  2. [Compute Engine] -> [VM インスタンス]内の"インスタンスを作成"をクリック
  3. External IPをStaticなものを確保
  4. お名前.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の設定でも書きますかね~~~~.

今回はこの辺で.