LoginSignup
2
4

【図解】SoftEther VPNを使ってLinux上でVPNサーバの環境構築をする

Last updated at Posted at 2024-05-26

1. はじめに

私はデータ活用社会創成プラットフォームmdxを使ったプロジェクトに携わっています。
そのプロジェクトの中で、関係者だけが使える研究・開発環境が欲しいという要望があり、VPNを導入することにしました。
そこで今回はLinux上でVPNの環境を構築した手順を紹介していきます。
VPNが何なのかということについては、「4-1. VPNについて」で説明します。

2. 環境

  • Ubuntu 20.04.6 LTS

3. 手順

3-1. サーバ側

※権限がないと言われたらコマンドの一番最初にsudoをつけてください。

3-1-1. SoftEther VPNのインストール

まずはパッケージマネージャのアップデートを行う。

sudo apt update

次に、必要なパッケージをインストールする。

sudo apt install -y make gcc

次に、SoftEther VPN Serverのダウンロード先リンクを選択する。

以下のサイトから自分にあった環境を選択する。

※SoftEther VPNで検索→「ダウンロード」を選択→「SoftEther VPNのダウンロード」を選択してこのページに行ける。

私は下の画像のような選択をした。

image.png

ただし、「CPUを選択」の部分に関してはuname -mのコマンドを入力することで確認できる。

選択したら、一番上に出てきた最新ビルドと書かれたもののリンクを右クリックしてコピーしておく。

コピーしたリンク先のファイルをwgetコマンドを使ってダウンロードする。

wget https://jp.softether-download.com/files/softether/v4.43-9799-beta-2023.08.31-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.43-9799-beta-2023.08.31-linux-x64-64bit.tar.gz

※URLは各自コピーしたものに置き換える。

ファイルのダウンロードが終わったら、そのファイルを解凍する。

tar -xzvf softether-vpnserver-v4.43-9799-beta-2023.08.31-linux-x64-64bit.tar.gz

※ファイルは各自のものに置き換える。

解答すると、vpnserverフォルダが作成される。

そのフォルダの中に入り、ビルドをする。

cd vpnserver/
make

ビルドが終わったらディレクトリを/usr/local/に移動する。
※パスについては公式ドキュメント 7.3.1 推奨するオペレーションシステムの構成に従った

cd ..
sudo mv vpnserver/ /usr/local/

これにより、/usr/local/vpnserverに移動した。

最後にファイルの所有者と権限を変更する。

cd /usr/local
sudo chown -R root:root vpnserver
cd vpnserver
sudo chmod 600 *
sudo chmod 700 vpncmd
sudo chmod 700 vpnserver

以下のように表示されればOK。

xxx@xxx:/usr/local/vpnserver$ ll
-rw------- 1 root root 20245 12ŒŽ 8 16:14 License_ReadMeFirst.txt
-rw------- 1 root root 20317 12ŒŽ 8 16:14 License_ReadMeFirstSjis.txt
-rw------- 1 root root 30210 12ŒŽ 8 16:14 License_ReadMeFirstUtf.txt
-rw------- 1 root root 609 12ŒŽ 8 16:14 Makefile
-rw------- 1 root root 4018399 12ŒŽ 8 16:14 hamcore.se2
-rw------- 1 root root 1942994 12ŒŽ 9 02:23 libcrypto.a
-rw------- 1 root root 336070 12ŒŽ 9 02:23 libssl.a
-rwx------ 1 root root 1814216 12ŒŽ 9 02:23 vpncmd*
-rw------- 1 root root 1630858 12ŒŽ 9 02:23 vpncmd.a
-rwx------ 1 root root 1814120 12ŒŽ 9 02:23 vpnserver*
-rw------- 1 root root 1630304 12ŒŽ 9 02:23 vpnserver.a

3-1-2. SoftEther VPN Serverの開始

systemdを用いた方法で行う。

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

ファイルの変更をsystemdに反映する。

sudo systemctl daemon-reload

vpnserverのサービスを開始する。

sudo systemctl start vpnserver

サービスの自動起動も有効にしておく。

sudo systemctl enable vpnserver

3-1-3. SoftEther VPN Serverの設定

sudo ./vpncmd

で対話式のユーザインタフェースで設定を始める。

下のように表示されたら1を選択する。

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.

By using vpncmd program, the following can be achieved.

1. Management of VPN Server or VPN Bridge
2. Management of VPN Client
3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)

Select 1, 2 or 3:

そのあとの2つの質問はそのまま何も入力せずにEnterを押す。

Specify the host name or IP address of the computer that the destination VPN Server or VPN Bridge is operating on.
By specifying according to the format 'host name:port number', you can also specify the port number.
(When the port number is unspecified, 443 is used.)
If nothing is input and the Enter key is pressed, the connection will be made to the port number 8888 of localhost (this computer).
Hostname of IP Address of Destination:

If connecting to the server by Virtual Hub Admin Mode, please input the Virtual Hub name.
If connecting by server admin mode, please press Enter without inputting anything.
Specify Virtual Hub Name:
Connection has been established with VPN Server "localhost" (port 443).

You have administrator privileges for the entire VPN Server.

3-1-3-1. 仮想HUBの作成と選択

仮想HUBを作成する。

HubCreate main

mainが仮想HUBの名前

HubListと入力して、作成した仮想HUBの情報が表示されればOK。

作成した仮想HUBを選択し、設定を始める。

Hub main

以下のように表示されればOK。

VPN Server>Hub main
Hub command - Select Virtual Hub to Manage
The Virtual Hub "main" has been selected.
The command completed successfully.

VPN Server/main>

3-1-3-2. ユーザの作成

ユーザを作成する。

UserCreate user1 /GROUP:none /REALNAME:none /NOTE:none

user1の部分を変える。

ユーザのパスワードを設定する。

UserPasswordSet user1

UserListと入力して、作成したユーザの情報が表示されればOK。

ここで設定したユーザ名とパスワードは、クライアントがVPNに接続するとき必要であるためメモしておく。

3-1-3-3. L2TP over IPsecの有効化

SoftEhter VPNがサポートするVPNプロトコルは色々ある1が、iPhoneで使えるプロトコルがIKEv2、IPsec、L2TPの3つであったため今回はL2TP over IPsecを選択した。

IPsecEnable /L2TP:yes /L2TPRAW:no /ETHERIP:no /DEFAULTHUB:main

事前共有キーを入力するように求められるので設定する。

設定した事前共有キーはクライアントがVPNに接続するとき必要であるためメモしておく。

3-1-3-4. SecureNAT機能の有効化

SoftEther VPNのために独自に開発されたSecureNAT機能というものがある

SecureNATについては、「4-2. SecureNATについて」で解説している。

SecureNatEnable

3-1-3-5. 仮想DHCPサーバの設定

以下のコマンドを入力する。

DhcpSet /START:192.168.30.10 /END:192.168.30.200 /MASK:255.255.255.0 /EXPIRE:7200 /GW:192.168.30.1 /DNS:192.168.30.1 /DNS2:none /DOMAIN:none /LOG:yes /PUSHROUTE:"xxx.xxx.xxx.xxx/yyy.yyy.yyy.yyy/192.168.30.1"

ただし、デフォルトゲートウェイなどの192で始まっているIPアドレスについては任意のものを設定できる。
しかし、クライアントの環境によってはWi-Fiに接続できなくなったりすることがあったため注意する。
今回は公式ドキュメントに書かれていた例を参考にした。

また、xxx.xxx.xxx.xxx/yyy.yyy.yyy.yyyの部分を自身の環境に合わせて変える。
自身の環境の確認方法を紹介する。

まず、net-toolsパッケージをインストールする。

sudo apt install -y net-tools

以下のコマンドを入力する。

route

例えば、以下のように表示されれば、xxx.xxx.xxx.xxx/yyy.yyy.yyy.yyy10.0.0.0/255.255.255.0とする。

xxx@xxx:~$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         _gateway        0.0.0.0         UG    100    0        0 ens1s0
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 ens1s0

個人的にこのDhcpSetコマンドが一番ややこしかったため詳しく解説する。

まず、DhcpSetコマンドのパラメータ引数を以下のテーブルにまとめる。

パラメータ引数 説明
/START クライアントに対して配布するアドレス帯の開始点
/ENT クライアントに対して配布するアドレス帯の終了点
/MASK クライアントに対して指定するサブネットマスク
/EXPIRE 有効期限(単位は秒)
/GW デフォルトゲートウェイのIPアドレス
/DNS DNSサーバのIPアドレス
/DNS2 2つ目のDNSサーバのIPアドレス
/DOMAIN ドメイン名
/LOG セキュリティログを保存するかどうか
/PUSHROUTE ルーティングの設定。<社内LANなどのネットワークアドレス>/<社内LANなどのサブネットマスク>/<デフォルトゲートウェイ>の形で設定できる。

つまり、上のコマンドによって下の画像のようなイメージの構成に設定している。
image.png

3-1-3-6. 終了

exit

SoftEther VPN Server ではプログラム全体の構造が慎重に設計されており、どのような設定変更を行っても VPN Server のプロセス自体の再起動は一切必要ありません。2

3-1-4. ポートの開放

SoftEther VPNはデフォルトで、

  • 443/tcp
  • 992/tcp
  • 5555/tcp

の3つのポートを使用する3

また、L2TP/IPsecを使用するときには追加で、

  • 500/udp
  • 4500/udp

の2つのポートも使用する4

今回はL2TP/IPsecを使用するため、計5つのポートを開放する必要がある。

mdxではポートの設定を独自のポータル画面で行うことができるため、今回はその画面でポートを開放した。

Ubuntuでポートの開放をしたい場合は以下の記事を参考にする。

3-2. クライアント側

Windowsの場合を説明する。

「設定」→「ネットワークとインターネット」→「VPN」と選択していく。
スクリーンショット 2024-05-26 195542.png

「VPN接続を追加する」を選択。

image.png

以下のように入力する。

変数 入力する値
VPNプロバイダー Windows(ビルトイン)
接続名 任意
サーバ名またはアドレス サーバのURLまたはIPアドレス
VPNの種類 事前共有キーを使ったL2TP/IPsec
事前共有キー IPsecEnableコマンドを入力したときに設定した事前共有キー
サインイン情報の種類 ユーザー名とパスワード
ユーザ名(オプション) UserCreateコマンドを入力したときに設定したユーザー名
パスワード(オプション) UserPasswordSetコマンドを入力したときに設定したパスワード

設定したら保存を押す。

接続を押して接続済みと表示されればOK。

4. 解説

4-1. VPNについて

VPNとはVirtual Private Networkの略で、自宅にいながら社内LAN環境に接続したりするために使われる技術のことである。

それによって、外部に公開せず社内LAN内だけで動かしているサービスなどに自宅にいながらアクセスすることができたりする。

VPNにはプロトコルがいくつかあり、それぞれのプロトコルによって通信速度やセキュリティ性能、互換性などが異なる5

具体的には以下のようなプロトコルがある5

VPNプロトコル 特徴
PPTP 通信速度は速いが、安全性が低い。
SSTP セキュリティは高いがMicrosoftが所有するプロトコルでオープンソースではない。
L2TP 暗号化の機能はないためIPsecというセキュリティシステムとセットで使用する。互換性に優れているが速度が遅くなりがち。
IKEv2 安全性が高く、通信速度も速いが、オープンソースではない。
OpenVPN 安全性や速度に優れていてオープンソースである。

また、VPNに接続することでグローバルIPアドレスが変わり、国で制限されているサービスなどにアクセスしたりすることもできる。

例えばVPNに接続していない状態だと、

C:\xxx>curl ifconfig.me
xxx.xxx.xxx.xxx

だったものが、VPNに接続すると、

C:\xxx>curl ifconfig.me
yyy.yyy.yyy.yyy

という風になる。

※ifconfig.meというネットワークの接続情報を表示してくれるWebサービスにcurlをすることでグローバルIPアドレスを確認することができる。

4-2. SecureNATについて

公式ドキュメントによると、

「SecureNAT (セキュアナット) 」機能は、SoftEther VPN のために独自に開発された、これまでに存在しなかった画期的な機能です。SecureNAT を使用すると、セキュリティ的により安心なネットワークを構築することができます。

と紹介されている。

SecureNAT機能には、

  • 仮想NAT機能
  • 仮想DHCPサーバ機能

の2つが搭載されている。

image.png
3.7 仮想 NAT および仮想 DHCP サーバーより

この機能によって、上の図のようにSoftEther VPNを動かしているサーバコンピュータ自体の変更を加えることなく既存の社内LANなどに接続することができる。
また、サーバコンピュータ自体の変更を加えないため、システム管理者権限を必要としないことも1つのメリットである。

おわりに

Linux上でVPNの環境構築をする手順を紹介しました。
いいねとストック、よろしくお願いします。
また、間違っている点や質問があればぜひコメントお願いします。

参考文献

  1. 筑波大学大学院研究プロジェクト SoftEther VPN. SoftEther VPN Serverがサポートする VPN プロトコル. https://ja.softether.org/3-spec

  2. 筑波大学大学院研究プロジェクト SoftEther VPN. 3.3 VPN Server 管理. https://ja.softether.org/4-docs/1-manual/3/3.3

  3. 筑波大学大学院研究プロジェクト SoftEther VPN. 3.3.6 リスナーポート. https://ja.softether.org/4-docs/1-manual/3/3.3

  4. 筑波大学大学院研究プロジェクト SoftEther VPN. VPN Server 側での L2TP/IPsec 機能の有効化方法. NAT が存在する場合の注意事項. https://ja.softether.org/4-docs/2-howto/L2TP_IPsec_Setup_Guide/1

  5. VPNのプロトコルの種類の比較と選び方!おすすめのVPNプロバイダーの特徴とは. https://www.itscom.co.jp/forbiz/column/vpn/1976/ 2

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4