インフィニットループ 技術ブログ

2020年02月28日 (金)

著者 : nob

急に発生した全社リモートワーク・テレワーク対応、その悩み、AWS+SoftEtherで解決できます!


こんにちは技術研究グループの波多野です。
社内で LAN を構築運用されている場合、その LAN の機能は

  • 社内に置いたファイルサーバーなどへのアクセス
  • クラウドのサーバーや社外へのアクセスでの認証に使う会社の固定 IP

の2つの機能を持たせている企業の方が多いと思います。
急に全社リモートワーク対応が必要になった場合に、重要となるクラウドサーバーへの認証で使われる会社の固定 IP を、クラウド上に立てた SoftEther VPN サーバーで簡単に追加しリモートワークで共有出来る方法を紹介したいと思います。
社内 LAN に置いたサーバーへのアクセスを行うには、クラウドからさらに VPN ブリッジなどの構築が必要になりますが、あくまで緊急時の簡易的な方法ということで、今回はその部分については諦めて別途取り組む想定にしています。

社内 LAN の2つの利用形態

プロバイダ契約で固定 IP も付けたネットワークを使うことで、社内のLANの機能としては、社内のサーバーへのアクセスと、クラウド上のサーバーへのアクセス認証装置としての固定 IP と、2つの機能を果たしていることが多いと思います。
特に近年のクラウド時代になって、弊社はじめ多くの会社様では社内LAN上サーバーの役割は減少傾向で、一方クラウド上のサーバーの役割が増し続けていることと思います。

クラウド VPN による固定 IP 機能でクラウドサーバーへのリモートワークを実現する

社内 LAN に接続して社内サーバーへのアクセスする機能は一旦脇に置き、クラウド上に新規にプライベートネットワークを持ち、そこに VPN サーバーを持たせます。
今回はそれを実現するためにオープンソースの Apache ライセンスで利用可能な SoftEther VPN と AWS の VPC/EC2 サービスを利用して簡単に構築する方法について紹介したいと思います

参考資料

この記事の多くの部分でクラスメソッドさんの AWSにSoftEther VPNServerで簡単にVPN接続しよう 記事を参考にしています。いつも有益な記事ありがとうございます。

仮想プライベートクラウド (VPC) の作成

会社で使う AWS のアカウントを持っていることが前提です。もしお持ちで無い場合は登録などを済ませてください。
AWS のコンソールで VPC のサービスを選択、画面を操作して Virtual Private Cloud (VPC) のリソースを作成します。
最初に VPC 自体を作成します

  • 名前タグ:出来るだけ指定しましょう。例:SoftEther
  • PV4 CIDR: 10.0.0.0/16

次にサブネットを作成します

  • 名前タグ:例 SoftEther-a
  • VPC : メニューから前述作成した SoftEther を選びます
  • アベイラビリティーゾーン : メニューから ap-northeast-1a, 1c, 1d の3つのうちの 1d を選びます(今回は)
  • IPv4 CIDR ブロック : 10.0.32.0/20

次にインターネットゲートウェイを作成します

  • 名前タグ:例 SoftEther

最後にルートテーブルを作成します

  • 名前タグ:例 SoftEther
  • VPC : メニューから作成済みの SoftEther を選びます

ルートテーブルの編集
必要なルートは2つだけです

  • 自分のネットワーク 10.0.0.0/16 の local 向け
  • その他全ての 0.0.0.0/0 つまり外部のインターネット向けになるインターネットゲートウェイ (igw-xxxxxxxxx softether)

ルートタブでルートの編集を選び以下の様な2つのルートを持つように構成し保存しましょう

EC2 のサーバーを作成

EC2 のサーバーを作成します。ポイントやパラメーターは以下ですが、作成した VPC に配置する以外はごく一般的な方法です

  • 作成した VPC のサブネット softeher-a の中に配置する
  • EIP を1個取得し利用します。この EIP のアドレスが VPN サーバーの IP アドレスになります!!
  • ディスクは EBS の gp2 8GB
  • mazon Linux 2 の最新版を選択 amzn2-ami-hvm-2.0.20200207.1-x86_64
  • 初期 ec2-user へのアクセスを可能にする鍵は厳重に保管すること!

セキュリティグループを作成

以下の3つのルールを追加します

タイプ プロトコル ポート範囲 ソース 説明
SSH TCP 22 (今作業している自社のIPアドレス)/32 社内LAN限定ssh
カスタム UDP ルール UDP 4500 0.0.0.0/0 VPN用
カスタム UDP ルール UDP 500 0.0.0.0/0 VPN用

ssh でアクセスして初期設定

ec2-user で、作成したサーバーに ssh アクセスし、タイムゾーンを設定し必要なパッケージを入れます

sudo timedatectl set-timezone Asia/Tokyo
sudo yum -y update
sudo yum -y install git gcc ncurses-devel readline-devel openssl-devel zlib-devel

ec2 インスタンスを一度再起動しておきます

SoftEther VPN インストール

ec2-user で再度 ssh し次は SoftEther をインストールします
SoftEther VPN は GitHub にプロジェクトが2つあり今回は stable 版のプロジェクトを使いました。
リリースはバイナリパッケージと、ソースパッケージの2種が置かれています。通常はバイナリパッケージを使うのがよいと思いますが、Amazon Linux 2 での stable 版の使用例をググっても見かけなかったため、前述のクラメソさんの記事同様、今回はソース v4.32-9731-beta/softether-src-v4.32-9731-beta.tar.gz からビルドしてみました

curl -L -O https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.32-9731-beta/softether-src-v4.32-9731-beta.tar.gz
tar xvzf softether-src-v4.32-9731-beta.tar.gz
cd v4.32-9731/src
./configure
make
sudo make install
Installation completed successfully.
Execute 'vpnserver start' to run the SoftEther VPN Server background service.
Execute 'vpnbridge start' to run the SoftEther VPN Bridge background service.
Execute 'vpnclient start' to run the SoftEther VPN Client background service.
Execute 'vpncmd' to run SoftEther VPN Command-Line Utility to configure VPN Server, VPN Bridge or VPN Client.
--------------------------------------------------------------------

が出れば無事完了しています
環境をセットアップしていきます
systemd の起動スクリプトを作成します
/etc/systemd/system/vpnserver.service

[Unit]
Description=Softether VPN Server Service
After=network.target
[Service]
Type=forking
User=root
ExecStart=/usr/bin/vpnserver start
ExecStop=/usr/bin/vpnserver stop
Restart=on-abort
WorkingDirectory=/tmp/vpnserver/
ExecStartPre=/sbin/ip link set dev eth0 promisc on
[Install]
WantedBy=multi-user.target

ワーキングディレクトリを作成し systemd から起動します

sudo mkdir /tmp/vpnserver
sudo chmod 755 /tmp/vpnserver
sudo systemctl daemon-reload
sudo systemctl start vpnserver
sudo systemctl enable vpnserver

SoftEther 設定

vpncmd を使って SoftEther の仮想HUB、ユーザーを追加していきます
最初 1,2,3 の選択が出ますが 1 の Management of VPN Server or VPN Bridge を選びます

$ sudo vpncmd
vpncmd command - SoftEther VPN Command Line Management Utility
SoftEther VPN Command Line Management Utility (vpncmd command)
Version 4.32 Build 9731   (English)
Compiled 2020/01/01 17:54:10 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: 1

ホスト名か IP アドレスの指定を質問されますので EIP のアドレスを指定します。
(EIPのアドレスに myvpn.example.com など DNS を割りあてた場合はそちらを指定してください)

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: EIP のアドレスまたは DNS 名

Hub 名は空で ENTER をおします
HubList コマンドを実行すると DEFAULT Hub が設定されているのがわかりますがこちらは HubDelete コマンドで削除します

VPN Server>hubdelete
HubDelete command - Delete Virtual Hub
Name of Virtual Hub to delete: DEFAULT
The command completed successfully.

HubCreate コマンドで仮想HUB を作成します。名前は myvpn などで自由です
作成時にその仮想 HUB の管理パスワードを聞かれますので、決めて入力します。
このパスワードは後に使いますのでメモしましょう。

VPN Server>HubCreate myvpn
HubCreate command - Create New Virtual Hub
Please enter the password. To cancel press the Ctrl+D key.
Password: *********************
Confirm input: *********************
The command completed successfully.

HUB myvpn コマンドで作成済みの myvpn の管理画面に移ります

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

IPsecEnable コマンドで L2TP/IPSec を有効化します。

VPN Server/myvpn>IPsecEnable /L2TP:yes /L2TPRAW:no /ETHERIP:no /DEFAULTHUB:myvpn
IPsecEnable command - Enable or Disable IPsec VPN Server Function
Pre Shared Key for IPsec (Recommended: 9 letters at maximum):

事前共有キーを聞かれますので9文字の英数で決定します。
クライアントでの VPN 設定でも必要になるキーなのでメモしましょう
SoftEther がルーターの様に動作する機能を SecureNatEnable コマンドで有効化します

VPN Server/myvpn>SecureNatEnable
SecureNatEnable command - Enable the Virtual NAT and DHCP Server Function (SecureNat Function)
The command completed successfully.

Dhcpset コマンドでルーティングを設定します。長いですが一度で入れてください

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:"10.0.0.0/255.255.0.0/192.168.30.1"
VPN Server/myvpn>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:"10.0.0.0/255.255.0.0/192.168.30.1"
DhcpSet command - Change Virtual DHCP Server Function Setting of SecureNAT Function
The command completed successfully.

一度管理画面から exit で出ましょう

VPN ユーザー追加

以下の流れで仮想ハブの管理画面まで行きます

  • sudo vpncmd
  • Select 1, 2 or 3: を聞かれるので 1
  • Hostname of IP Address of Destination: は 前述で入力した EIP または DNS 名で
  • Specify Virtual Hub Name: は myvpn を入力します
  • Password: はメモしていた HUB のパスワードを入れます
  • VPN Server/myvpn> というプロンプトになります

ここまできたら、ユーザー名とパスワードを決めて入力します。
仮に User1 Pass1 とすると、ユーザー追加は

UserCreate User1 /Group:none /REALNAME:none /NOTE:none

パスワード設定は

UserPasswordSet User1 /PASSWORD:Pass1

になります。必要な人数分設定していきましょう。パスワードなども使いまわさず個別に設定してください。
ユーザーを追加したら一度 exit して画面を終了させましょう
現在記録はサーバー上のメモリに蓄えられている状態です。この状態をディスク上に記録して永続化させるには仮想 HUB を選択していないサーバー管理モードで行う必要があります。方法は

  • sudo vpncmd
  • Select 1, 2 or 3: を聞かれるので 1
  • Hostname of IP Address of Destination: は 前述で入力した EIP または DNS 名で

ここまでは同じです。次に

  • Specify Virtual Hub Name: には Enter だけを押します
  • VPN Server> というプロンプトになりますので
  • Flush

を実行します。最後に exit してください。これで設定が永続化されました

クライアント設定

Windows 10 や Mac は L2TP/IPSec の VPN クライアントの機能が入っていますので、VPN の設定を追加するだけで使用することが可能です
例:Windows のネットワーク設定の VPN のメニューから VPN 追加を行います

VPN の設定に使うユーザー名は、作成したユーザー名@作成したHUB名 になります。
(仮想HUBが一つだけの場合は ユーザー名 だけでも接続可能ではあるようです)
VPN に接続し、Google で whatismyipaddress を検索すると今自分が外へのアクセスに使っている IP アドレスが表示されます。この IP が EIP のものになっていれば設定成功です!

サーバーやクラウドでの許可 IP への追加

今回立てたサーバーの EIP アドレスを、ご利用のクラウドサーバーでの許可 IP の一つとして追加していきます。
これにより、今回作成した VPN による IP アドレスを、自社 IP アドレスの一つとして活用することが出来るようになります!

まとめ

以上駆け足でしたが、今回の記事がリモートワーク実現のために、微力ながらお役立に立てれば幸いです。
こちらの記事と同様の構成での、サーバの構築代行サービスも行っております。お気軽にお問い合わせください。 
お問合せフォーム

関連記事

ブログ記事検索

このブログについて

このブログは、札幌市・仙台市の「株式会社インフィニットループ」が運営する技術ブログです。 お仕事で使えるITネタを社員たちが発信します!