hero_picture
Cover Image for リモートワーク実現のためSoftEther VPNを利用したVPNサーバを作ってみた

リモートワーク実現のためSoftEther VPNを利用したVPNサーバを作ってみた

2020/04/06

クラウドソリューション事業部 インフラエンジニアの上野です。

コロナウイルスの影響により、社会的にリモートワーク/テレワークが急激に広がってきています。シーズにおいても公共交通機関を利用する社員にはリモートワークが強く推奨され、来客や訪問についても許可制という方針になっています。

目次

リモートワーク導入に向けた問題点

さて、リモートワークをしようという方針になったのはいいですが、ここでいくつか問題が発生します。特に大きな問題の1つにIP制限された社内のシステムにどうやって外部からの接続を許可するかというものがあります。

通常、社内のシステムに外部から無条件にアクセスは許可されておらず、許可されていたとしても特定のIPアドレスからのみアクセスできるなどの制限がかかっています。

一方でリモートワークで自宅からアクセスする場合は、接続元の自宅のIPアドレスが固定化されていない場合が多く、特定のIPアドレスだけを許可するという運用が難しくなります。

シーズではネットワークのアプライアンス機器を設置してVPNを行っていますが、お客様からも上記のような相談を受けることがあり、手軽に導入することができるSoftEther VPNを利用したVPNサーバを作ってみたいと思います。

サーバの構成

VPNサーバを経由したアクセスはこのような形になります。

今回はVPNサーバをAWS上にEC2インスタンスを立てます。

VPNサーバのインストール

それではVPNサーバを作っていきましょう。

今回はSoftEther VPN( https://ja.softether.org/ )を利用してVPNサーバを構築します。サーバ自体はAWS上にて動作していますが、AWS関連の作業手順は省略します。

まずはソフトウェアをダウンロードします。

1cd /usr/local/src
2wget http://jp.softether-download.com/files/softether/v4.34-9744-beta-2020.03.20-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.34-9744-beta-2020.03.20-linux-x64-64bit.tar.gz

インストールを実行します。

1cd /usr/local/src/vpnserver/
2make
3make実行時に使用権許諾契約書に同意が求められるので、同意します。
4
5cd /usr/local/
6mv /usr/local/src/vpnserver /usr/local/
7cd /usr/local/vpnserver
8chmod 600 *
9chmod 700 vpncmd
10chmod 700 vpnserver

これで/usr/local以下にインストールができました。

インストールができたらcheckコマンドにて動作チェックします。

全ての項目でPassとなっていれば問題ありません。

1/usr/local/vpnserver/vpncmd
2Management of VPN Server or VPN Bridge
3Management of VPN Client
4Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)
5
6Select 1, 2 or 3: 3 【3を入力】
7
8VPN Tools>check
9
10Checking 'Kernel System'…
11              Pass
12Checking 'Memory Operation System'…
13              Pass
14Checking 'ANSI / Unicode string processing system'…
15              Pass
16Checking 'File system'…
17              Pass
18Checking 'Thread processing system'…
19              Pass
20Checking 'Network system'…
21              Pass

次に起動スクリプトを用意しましょう。

公式のマニュアルではinit形式の手順となっていますが、今回はAmazon Linux 2にてサーバを作成していますので、systemdで起動するように設定します。まずはserviceファイルを作成します。

1vi /etc/systemd/system/vpnserver.service
2
3[Unit]
4Description=Softether VPN Server
5After=network.target
6
7[Service]
8Type=forking
9User=root
10ExecStart=/usr/local/vpnserver/vpnserver start
11ExecStop=/usr/local/vpnserver/vpnserver stop
12Restart=on-abort
13WorkingDirectory=/usr/local/vpnserver
14ExecStartPre=/sbin/ip link set dev eth0 promisc on
15
16[Install]
17WantedBy=multi-user.target

作成したファイルをsystemdに読み込ませて、自動起動を有効化します。

1chmod 644 /etc/systemd/system/vpnserver.service
2systemctl daemon-reload
3systemctl enable vpnserver

それではサービスを起動してみましょう。

無事に起動できたようですね。

1systemctl start vpnserver
2systemctl status vpnserver
3● vpnserver.service - Softether VPN Server
4    Loaded: loaded (/etc/systemd/system/vpnserver.service; disabled; vendor preset: disabled)
5    Active: active (running) since Fri 2020-03-27 05:14:43 UTC; 4s ago
6   Process: 1246 ExecStart=/usr/local/vpnserver/vpnserver start (code=exited, status=0/SUCCESS)
7   Process: 1244 ExecStartPre=/sbin/ip link set dev eth0 promisc on (code=exited, status=0/SUCCESS)
8  Main PID: 1251 (vpnserver)
9    CGroup: /system.slice/vpnserver.service
10            ├─1251 /usr/local/vpnserver/vpnserver execsvc
11            └─1252 /usr/local/vpnserver/vpnserver execsvc

VPNサーバの設定

VPNサーバのインストールができました。

次にVPNを使うための仮想HUBの作成とユーザの登録を行います。

まずはインストール直後のVPNサーバには管理者パスワードが設定されていないので、管理コマンドを使用して管理者パスワードを設定します。

1/usr/local/vpnserver/vpncmd
2Management of VPN Server or VPN Bridge
3Management of VPN Client
4Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)
5
6Select 1, 2 or 3: 1 【1を入力】
7
8Hostname of IP Address of Destination: 【何も入力せずにEnter】
9
10Specify Virtual Hub Name:【何も入力せずにEnter】
11
12管理者パスワードを設定します。
13VPN Server>ServerPasswordSet
14ServerPasswordSet command - Set VPN Server Administrator Password
15Please enter the password. To cancel press the Ctrl+D key.
16Password:
17Confirm input:
18The command completed successfully.

インストール時点でDEFAULTという仮想HUBがありますが、今回は新たにtest-hubという名前の仮想HUBを作成します。

1VPN Server>HubCreate test-hub

作成した仮想HUBでIPsec/L2TPを有効化します。

事前共有キーの入力を求められるので、キーを登録します。

ここで入力したキーは後ほどVPN接続する際に利用します。

1VPN Server>IPsecEnable /L2TP:yes /L2TPRAW:no /ETHERIP:no /DEFAULTHUB:test-hub
2 IPsecEnable command - Enable or Disable IPsec VPN Server Function
3 Pre Shared Key for IPsec (Recommended: 9 letters at maximum): "事前共有キー"

仮想HUBでSecureNATの機能を有効化します。

1VPN Server>HUB test-hub
2VPN Server/test-hub>SecureNatEnable

仮想HUBにVPN接続用のユーザ(ここではseeds-ueno)を作成します。

1VPN Server/test-hub>UserCreate seeds-ueno /Group:none /REALNAME:ueno /NOTE:none
2VPN Server/test-hub>UserPasswordSet seeds-ueno

これでVPN接続するための準備が整いました。

VPN接続してみる

今回はMacを利用してVPN接続を行います。

ネットワークの設定からVPN用の設定を作成します。

サーバアドレスにはVPNサーバのIPをアカウント名は作成したアカウントを入力します。

※ここで使用されているIPはテストで一時的に利用したもので、既に弊社では利用していません。

認証設定のボタンを押して、ユーザのパスワードと共有シークレットを設定します。共有シークレットは仮想HUBを作成したときに設定した 事前共有キー のことです。

次に詳細のボタンを押して、「すべてのトラフィックをVPN接続経由で送信」の項目にチェックを入れます。このチェックを入れないと外部に対する送信は既存のネットワーク経由でアクセスしてしまうことになるので注意が必要です。

VPN接続用のネットワーク設定ができました。

それでは接続ボタンを押してVPN接続してみます。

VPN接続後にアクセス元IPアドレスを確認できるサービス(今回は https://kakunin.net/kun/ )を利用してVPN接続できているか確認します。

接続元のIPアドレスがVPNサーバのIPアドレス(今回は18.182.4.9)になっていればVPN経由でアクセスされていることになります。

さいごに

無事にVPNサーバを経由して社内のシステムにアクセスすることができるようになりました。構築も1時間かからずに作成できました。

これで固定化されていない複数のIPアドレスをVPNサーバを経由させることにより特定のIPアドレスへ固定化させることが可能です。アクセス元IPを固定化させてしまえば、あとはファイアウォールなりでVPNサーバのIPを許可すれば社内システムへのアクセス制限も容易になりますね。

昨今のコロナウイルスによる影響で、急遽リモートワークが必要になった、けどアクセス制限が大変だという社内システムの担当者さんは、こういった方法もご検討してはいかがでしょうか。