LinuxにVPN Serverをインストールします(SoftEther VPN)

クラウドにVPN Serverを設置する記事を書いてから1年ほど経ちました。
https://minokamo.tokyo/2020/10/17/2866/
https://minokamo.tokyo/2019/12/07/386/
インストールや設定の仕方に変更があったかもしれないので、改めてインストールをしたいと思います。インストールするOSはubuntu21.04、VPNの種類は最新版のsoftether vpnとします。
https://ja.softether.org/
ubuntuはリポジトリによるインストールがあり、インストールが容易そうだったのでこれに決めました。
OSのファイアーウォールは無効にして作業をします。
GitHubに説明があるので、書いてあることを行うだけです。
https://github.com/SoftEtherVPN

sudo apt-get update && sudo apt-get upgrade
sudo apt-add-repository ppa:paskal-07/softethervpn && sudo apt-get install softether-vpnserver

インストールが完了したので状態を確認し、OS起動時にVPNのサービスも起動するようにします。

sudo systemctl status softether-vpnserver
sudo systemctl enable softether-vpnserver

ubuntuのコマンドによる作業は困難なので、手元にあるWindows PCで設定します。Windows版のSoftEther VPN Serverがインストールしてある状態ですが、新規で接続をする時も簡易ウィザードが出てくれます。
「新しい接続設定」をクリックして進みます。接続設定名を任意で決め、ホスト名にクラウドサービスの外部IPアドレスを入力します。使用するポート番号は5555にしました。新規で先ほど作成したVPNに接続するわけですがパスワードは設定してないので、Windowsでも管理パスワードは入力せずOKボタンを押します。
これだけで接続できるはずです。エラーで接続できません。
GCPにてファイアーウォールの設定を見直します。5555の上り方向のポート番号が開放してありませんでした。記述して保存します。
Windowsの画面に戻り、接続を試みると接続できました。管理者パスワードの確認画面が現れるので決めておきます。

ここからは簡易セットアップにそって進めます。
このVPN Serverの用途は個人が安全な接続をして、ファイル共有などをする目的なので「リモートアクセスVPNサーバー」だけにチェックを入れて次に進みます。仮想HUB名は任意で決めます。「ダイナミックDNS機能」では何もできないので閉じるボタンを押します。後から有効、無効は設定できます。また、ダイナミックDNSというのはグローバルIPアドレスとドメイン名を紐づけるもので、IPアドレスが変更になってもドメイン名で接続が可能になります。ありがたいことに下記のドメインを割り当ててくれます。
○○.softether.net
自分でドメインを所有していてそれを使用したい時はこの機能は不要です。
次の画面のIPsecやL2TPの機能では「L2TPサーバー機能を有効にする(L2TP over IPsec)」にチェックを入れました。スマートフォンやWindows10にあるVPN機能で接続をする場合は必要です。
IPsec事前共有鍵も任意で決定します。VPN Azureの機能は無効にしました。グローバルIPが無いインターネット環境の人はこれを有効にすることで容易に自宅のサーバーを公開できたりします。
次は接続するユーザーを設定することができます。後からでもできますが、一人だけ作成しておきます。ここでは、ユーザー名を任意で決め、認証方法をパスワードにして作成します。パスワードも2回同じものを入力しておきます。そうしないとOKボタンを押せません。ローカルブリッジの設定ですがデバイスとしてubuntuのネットワークインターフェースが選べますが、それを選択しなくてもVPN環境は作成できるはずです。最後に使用してないポートは停止しておきます。

それではクライアントをインストールして接続をしてみましょう。
Softether ダウンロードセンターでVPN Clientをダウンロードします。


ダウンロードしたファイルを実行すればインストールは完了です。
VPN クライアント接続マネージャで「新しい接続設定の作成」に必要な情報を入力します。ホスト名、ポート番号、接続するユーザー、パスワードを入力して保存します。
その後、接続を試みるも接続はできるが、DHCPからIPの割り当てに失敗し切断されます。
「Secure NAT機能」を有効にし、仮想DHCPを有効にしても失敗します。ネットワークインターフェースを2つにしたり、ブリッジの作成をしてもうまく機能しませんでした。
同じ設定で、OSがRHEL8では正常に動作しました。ただし、リポジトリによるインストールは見つからなかったので公式サイトを参考に、インストールしています。公式サイトで推奨システムにubuntuが記載されていないからかどうかは不明です。

https://ja.softether.org/4-docs/1-manual/9/9.3

RHEL8(Red Hat Enterprise Linux 8)にSoftether VPN Serverをインストールします。GCPにIP転送を有効にして作成してあります。
公式サイトのインストール方法を参考にして作業します。
SoftEther ダウンロードセンターでLinux版のVPN Serverのダウンロードリンクを取得しておきます。

CPUの情報は下記のコマンドで確認しておきます。「CPUを選択」で適合するものを選択しておきます。

cat /proc/cpuinfo
arch

ターミナルでWGETコマンドを使用してファイルをダウンロードします。

wget コピーしたURL

WGETが無かったのでインストールし、再度ダウンロードコマンドを入力します。

sudo dnf install wget

ダウンロードしたファイルを展開(解凍)します。

tar xzvf ダウンロードしたファイル名

vpnserverというディレクトリにファイルがある状態で解凍されるので、そのディレクトリに移動します。その後、makeコマンドを実行します。
makeのインストールは以前記事にしました。
https://minokamo.tokyo/2021/10/12/4024/

cd vpnserver
sudo make
[mamushi@instance-1 vpnserver]$ sudo make
--------------------------------------------------------------------

SoftEther VPN Server (Ver 4.38, Build 9760, Intel x64 / AMD64) for Linux Build Utility
Copyright (c) SoftEther Project at University of Tsukuba, Japan. All Rights Reserved.

--------------------------------------------------------------------


Copyright (c) all contributors on SoftEther VPN project in GitHub.
Copyright (c) Daiyuu Nobori, SoftEther Project at University of Tsukuba, and SoftEther Corporation.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and limitations under the License.


DISCLAIMER
==========

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, UNDER JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, MERGE, PUBLISH, DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS SOFTWARE, THAT ANY JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS SOFTWARE OR ITS CONTENTS, AGAINST US (SOFTETHER PROJECT, SOFTETHER CORPORATION, DAIYUU NOBORI OR OTHER SUPPLIERS), OR ANY JURIDICAL DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND OF USING, COPYING, MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, AND/OR SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO EXCLUSIVE JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, JAPAN. YOU MUST WAIVE ALL DEFENSES OF LACK OF PERSONAL JURISDICTION AND FORUM NON CONVENIENS. PROCESS MAY BE SERVED ON EITHER PARTY IN THE MANNER AUTHORIZED BY APPLICABLE LAW OR COURT RULE.

USE ONLY IN JAPAN. DO NOT USE THIS SOFTWARE IN ANOTHER COUNTRY UNLESS YOU HAVE A CONFIRMATION THAT THIS SOFTWARE DOES NOT VIOLATE ANY CRIMINAL LAWS OR CIVIL RIGHTS IN THAT PARTICULAR COUNTRY. USING THIS SOFTWARE IN OTHER COUNTRIES IS COMPLETELY AT YOUR OWN RISK. THE SOFTETHER VPN PROJECT HAS DEVELOPED AND DISTRIBUTED THIS SOFTWARE TO COMPLY ONLY WITH THE JAPANESE LAWS AND EXISTING CIVIL RIGHTS INCLUDING PATENTS WHICH ARE SUBJECTS APPLY IN JAPAN. OTHER COUNTRIES' LAWS OR CIVIL RIGHTS ARE NONE OF OUR CONCERNS NOR RESPONSIBILITIES. WE HAVE NEVER INVESTIGATED ANY CRIMINAL REGULATIONS, CIVIL LAWS OR INTELLECTUAL PROPERTY RIGHTS INCLUDING PATENTS IN ANY OF OTHER 200+ COUNTRIES AND TERRITORIES. BY NATURE, THERE ARE 200+ REGIONS IN THE WORLD, WITH DIFFERENT LAWS. IT IS IMPOSSIBLE TO VERIFY EVERY COUNTRIES' LAWS, REGULATIONS AND CIVIL RIGHTS TO MAKE THE SOFTWARE COMPLY WITH ALL COUNTRIES' LAWS BY THE PROJECT. EVEN IF YOU WILL BE SUED BY A PRIVATE ENTITY OR BE DAMAGED BY A PUBLIC SERVANT IN YOUR COUNTRY, THE DEVELOPERS OF THIS SOFTWARE WILL NEVER BE LIABLE TO RECOVER OR COMPENSATE SUCH DAMAGES, CRIMINAL OR CIVIL
RESPONSIBILITIES. NOTE THAT THIS LINE IS NOT LICENSE RESTRICTION BUT JUST A STATEMENT FOR WARNING AND DISCLAIMER.

READ AND UNDERSTAND THE 'src/WARNING.TXT' FILE BEFORE USING THIS SOFTWARE. SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE WITH LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'src/THIRD_PARTY.TXT' FILE.


--------------------------------------------------------------------


make[1]: Entering directory '/tmp/vpnserver'
Preparing SoftEther VPN Server...
ranlib lib/libcharset.a
ranlib lib/libcrypto.a
ranlib lib/libedit.a
ranlib lib/libiconv.a
ranlib lib/libintelaes.a
ranlib lib/libncurses.a
ranlib lib/libssl.a
ranlib lib/libz.a
ranlib code/vpnserver.a
gcc code/vpnserver.a -fPIE -O2 -fsigned-char -pthread -m64 -lm -lrt -lpthread -L./ lib/libssl.a lib/libcrypto.a lib/libiconv.a lib/libcharset.a lib/libedit.a lib/libncurses.a lib/libz.a lib/libintelaes.a -ldl -o vpnserver
ranlib code/vpncmd.a
gcc code/vpncmd.a -fPIE -O2 -fsigned-char -pthread -m64 -lm -lrt -lpthread -L./ lib/libssl.a lib/libcrypto.a lib/libiconv.a lib/libcharset.a lib/libedit.a lib/libncurses.a lib/libz.a lib/libintelaes.a -ldl -o vpncmd
./vpncmd /tool /cmd:Check
vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Version 4.38 Build 9760   (English)
Compiled 2021/08/17 22:32:49 by buildsan at crosswin
Copyright (c) SoftEther VPN Project. All Rights Reserved.

VPN Tools has been launched. By inputting HELP, you can view a list of the commands that can be used.

VPN Tools>Check
Check command - Check whether SoftEther VPN Operation is Possible
---------------------------------------------------
SoftEther VPN Operation Environment Check Tool

Copyright (c) SoftEther VPN Project.
All Rights Reserved.

If 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...

Checking 'Kernel System'...
              Pass
Checking 'Memory Operation System'...
              Pass
Checking 'ANSI / Unicode string processing system'...
              Pass
Checking 'File system'...
              Pass
Checking 'Thread processing system'...
              Pass
Checking 'Network system'...
              Pass

All checks passed. It is most likely that SoftEther VPN Server / Bridge can operate normally on this system.

The command completed successfully.


--------------------------------------------------------------------
The preparation of SoftEther VPN Server is completed !


*** How to switch the display language of the SoftEther VPN Server Service ***
SoftEther VPN Server supports the following languages:
  - Japanese
  - English
  - Simplified Chinese

You can choose your prefered language of SoftEther VPN Server at any time.
To switch the current language, open and edit the 'lang.config' file.


Note: the administrative password is not set on the VPN Server. Please set your own administrative password as soon as possible by vpncmd or the GUI manager.


*** How to start the SoftEther VPN Server Service ***

Please execute './vpnserver start' to run the SoftEther VPN Server Background Service.
And please execute './vpncmd' to run the SoftEther VPN Command-Line Utility to configure SoftEther VPN Server.

Of course, you can use the VPN Server Manager GUI Application for Windows / Mac OS X on the other Windows / Mac OS X computers in order to configure the SoftEther VPN Server remotely.

*** For Windows users ***
You can download the SoftEther VPN Server Manager for Windows
from the http://www.softether-download.com/ web site.
This manager application helps you to completely and easily manage the VPN server services running in remote hosts.


*** For Mac OS X users ***
In April 2016 we released the SoftEther VPN Server Manager for Mac OS X.
You can download it from the http://www.softether-download.com/ web site.
VPN Server Manager for Mac OS X works perfectly as same as the traditional Windows versions. It helps you to completely and easily manage the VPN server services running in remote hosts.



*** PacketiX VPN Server HTML5 Web Administration Console (NEW) ***
This VPN Server / Bridge has the built-in HTML5 Web Administration Console.

After you start the server daemon, you can open the HTML5 Web Administration Console is available at

https://127.0.0.1:5555/
or
https://ip_address_of_the_vpn_server:5555/

This HTML5 page is obviously under construction, and your HTML5 development contribution is very appreciated.

--------------------------------------------------------------------

make[1]: Leaving directory '/tmp/vpnserver'

次に、vpnserverを推奨された場所に配置します。

sudo mv /tmp/vpnserver /usr/local

さらに、配置したディレクトリに移動して、ファイル・ディレクトリの権限を変更します。

cd /usr/local/vpnserver
sudo chmod 600 *
sudo chmod 700 vpncmd
sudo chmod 700 vpnserver

systemd用の起動スクリプトも作成します。公式サイトではスタートアップスクリプトへの登録方法が記載されております。ここは、他のサイトでも多用されているsystemd用の起動スクリプトを採用します。
system関連のディレクトリに移動して、空のファイルを作成し、次の内容を記述して保存します。

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

記述内容
[Unit]
Description=SoftEther VPN Server
After=network.target

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

[Install]
WantedBy = multi-user.target

VPN Serverの状態を確認すると、起動していません。起動します。

sudo systemctl status vpnserver
sudo systemctl start vpnserver

Loaded: loaded (/etc/systemd/system/vpnserver.service; disabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Thu 2021-10-14 11:24:04 UTC; 7min ago
Process: 1622 ExecStart=/usr/local/vpnserver/vpnserver start (code=exited, status=203/EXEC)

エラーが発生しました。
新しいスクリプトファイルを作成した時は再読み込みが必要でした。

sudo systemctl daemon-reload
sudo systemctl start vpnserver

Job for vpnserver.service failed because the control process exited with error code.
See “systemctl status vpnserver.service" and “journalctl -xe" for details.

しかし、またエラーが発生しました。
ここで時間を費やしましたが、SELinuxが原因だと判明しました。
状態を確認します。

getenforce

Enforcingとなり施行されているので一時的に無効にします。

sudo setenforce 0

ただし再起動後に有効になります。再起動後も無効にするには設定ファイルに記述する必要があります。

sudo vi /etc/selinux/config

SELINUX=enforcingをSELINUX=disableに変更します。
今度は起動することができました。

後から接続でトラブルが出るかもしれないので、OS自体のIP転送の有無を確認しておきます。
GCPではVMレベルでIP転送が有効になっているとのことですが、よく意味がわからなかったのでOSでも確認することにしました。

https://cloud.google.com/vpc/docs/create-use-multiple-interfaces?hl=ja

制限事項
既存の VM からネットワーク インターフェースを追加または削除することはできません。
IP 転送は VM レベルで有効になっており、個々のインターフェースには適用できません。

まずは、それ関連を検索します。forwardingの値がすべて0になっているので、有効にして設定を適用します。

sysctl -a | grep forwarding
sudo /bin/su -c "echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf"
sudo sysctl -p

SELINUXは無効にしたが、ファイアーウォールも有効になっていたので設定をします。ファイアーウォールを無効にするのもなんだったので、VPN Serverの接続に必要なポート番号の通過を許可します。
スマートフォンやWindows10のVPNでも接続できるようにします。

sudo systemctl status firewalld
sudo firewall-cmd --list-all --zone=public
sudo firewall-cmd --add-port=5555/tcp --zone=public --permanent
sudo firewall-cmd --add-port=500/udp --zone=public --permanent
sudo firewall-cmd --add-port=4500/udp --zone=public --permanent
sudo systemctl restart firewalld

GCPのファイアーウォールでも同じように開放します。


次は肝心のVPNの設定をします。このままコマンド入力をして設定も可能ですが、接続さえできればWindowsに管理マネージャをインストールして設定できます。
簡易セットアップにそって進みます。セットアップ完了後は「仮想HUBの管理」をクリックして「仮想NATおよび仮想DHCPサーバー機能」から「Secure NAT機能を有効にする」をONにします。「Secure NATの設定」で仮想DHCPを有効にしておきます。仮想NAT機能も使用します。MACアドレスやIPアドレスは初期値のままとします。

これでセットアップは完了したのでクライアント接続をしてみましょう。
まずはWindows10の標準機能であるVPN接続をしてみます。VPN Serverで設定した内容を記述します。VPNの種類は「事前共有キーを使ったL2TP/IPsec」を選択します。すべて入力したら保存をします。

その後、接続が出来れば成功です。
次はSoftether Clientを使用して接続します。こちらもサーバーに設定したホスト名、ユーザー名などを入力して接続します。

うまくいけばサーバーからIPアドレスを付与されます。

接続した状態でブラウザを開き自分のIPアドレスを調べます。このアドレスがVPN Serverの外部IPアドレスになっていることを確認します。

89.142.133.34.bc.googleusercontent.com

このインストール方法はCentOS Streamでも正常に動作しました。

教育

Posted by admin