読者です 読者をやめる 読者になる 読者になる

EPISODE 02

非ITエンジニアが取り組むリモートワーク基盤構築の記録

AWS EC2にL2TP VPNを設定する

AWSが制限付きではあるが、無償で利用できるのと、SoftEther VPNの評判がすこぶる良さそうなので、EC2にVPNサーバを設定してみた。以下手順をメモしておく。

前提条件

VPNサーバの前提条件
AWS :インスタンスが立ち上がっていて、固定IPが設定され、SSHでログイン可能なこと
OS:EC2 t2.micro Amazon Linux
VPN:SoftEther VPN v4.22

インスタンスに設定したセキュリティグループの内容は以下の通り

タイプ プロトコル ポート 送信元
HTTP TCP 80 0.0.0.0/0
SSH TCP 22 999.999.999.999/32
カスタム UDP ルール UDP 4500 0.0.0.0/0
カスタム UDP ルール UDP 500 0.0.0.0/0
HTTPS TCP 443 0.0.0.0/0

VPNクライアント条件
MacBook macOS Sierra 10.12.3
iOS 10.2.1

手順の概要は以下の通り
1)SoftEther VPNのダウンロードとインストール
2)仮想HUBとユーザの設定
3)L2TP/IP Secの設定
4)仮想NAT、DHCPサーバの設定
5)クライアントの設定

VPNサーバ設定

EC2インスタンスにrootでログインする(以下すべての作業はrootで実施した)

$ sudo su -

gccソフトウェアのインストール

# yum install -y gcc

SoftEther VPNのダウンロード

# wget http://jp.softether-download.com/files/softether/v4.22-9634-beta-2016.11.27-tree/Linux/SoftEther_VPN_Server/64bit_-_Intel_x64_or_AMD64/softether-vpnserver-v4.22-9634-beta-2016.11.27-linux-x64-64bit.tar.gz

ファイルの解凍

# tar -zxvf softether-vpnserver-v4.22-9634-beta-2016.11.27-linux-x64-64bit.tar.gz

make

# cd vpnserver
# make #ライセンスへの同意が促されたら1で同意する(3回)

フォルダを/usr/localに移動し、権限の変更

# cd 
# mv vpnserver /usr/local #フォルダを移動する
# cd /usr/local/vpnserver/ #移動したフォルダへ移動
# chmod 600 * #権限の変更
# chmod 700 vpncmd
# chmod 700 vpnserver

インストールと動作をチェックする

# ./vpncmd
VPN Tools>check

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

VPN Tools>exit

常時バックグラウンドで動作し続けるデーモンプロセスとして登録する。

# cat > /etc/init.d/vpnserver

以下の文字列をそのままコピペし最後の行の改行の後に Ctrl+D キーを押す

#!/bin/sh
# chkconfig: 2345 99 01
# description: SoftEther VPN Server
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/subsys/vpnserver
test -x $DAEMON || exit 0
case "$1" in
start)
$DAEMON start
touch $LOCK
;;
stop)
$DAEMON stop
rm $LOCK
;;
restart)
$DAEMON stop
sleep 3
$DAEMON start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0

スクリプトのパーミッションを変更

# chmod 755 /etc/init.d/vpnserver

chkconfigコマンドを使用して、上記のスタートアップスクリプトが Linux カーネル起動時に、自動的にバックグラウンドで起動するようにする。

# /sbin/chkconfig --add vpnserver 

サービススタート

# /etc/init.d/vpnserver start 
The SoftEther VPN Server service has been started.

言語の変更

# vi lang.config

# PacketiX VPN / SoftEther VPN Language Setting File
(省略)
# Specify a Language ID here.
ja #ここをenからjaに書き換えて保存する

ポートと仮想 HUBの設定

# ./vpncmd

vpncmd プログラムを使って以下のことができます。
1. VPN Server または VPN Bridge の管理
2. VPN Client の管理
3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)

1 - 3 を選択: 1 #1を入力

接続先の VPN Server または VPN Bridge が動作しているコンピュータの IP アドレスまたはホスト名を指定してください。
'ホスト名:ポート番号' の形式で指定すると、ポート番号も指定できます。
(ポート番号を指定しない場合は 443 が使用されます。)
何も入力せずに Enter を押すと、localhost (このコンピュータ) のポート 443 に接続します。
接続先のホスト名または IP アドレス: #そのままエンター

サーバーに仮想 HUB 管理モードで接続する場合は、仮想 HUB 名を入力してください。
サーバー管理モードで接続する場合は、何も入力せずに Enter を押してください。
接続先の仮想 HUB 名を入力: #そのままエンター
VPN Server "localhost" (ポート 443) に接続しました。

VPN Server 全体の管理権限があります。

仮想HUBの設定  自動作成された仮想HUBの存在を確認するため、一覧を取得する。

VPN Server>hublist

HubList コマンド - 仮想 HUB の一覧の取得
項目            |値
----------------+-------------------
仮想 HUB 名     |DEFAULT
状態            |オンライン
種類            |スタンドアロン
ユーザー        |0
グループ        |0
セッション      |0
MAC テーブル    |0
IP テーブル     |0
ログイン回数    |0
最終ログイン日時|2017-02-23 08:36:36
最終通信日時    |2017-02-23 08:36:36
転送バイト数    |0
転送パケット数  |0

コマンドは正常に終了しました。

新しい仮想HUBの作成 

VPN Server>HubCreate

HubCreate コマンド - 新しい仮想 HUB の作成
作成する仮想 HUB の名前: EC2   #EC2という名前の仮想HUBを作成
パスワード: ********       #パスワードを2度入力
確認入力  : ********

コマンドは正常に終了しました。

DEFAULT仮想HUBの削除

VPN Server>HubDelete

HubDelete コマンド - 仮想HUBの削除
削除する仮想HUBの名前:DEFAULT

コマンドは正常に終了しました。

仮想HUBの選択

VPN Server>HUB EC2 

Hub コマンド - 管理する仮想 HUB の選択
仮想 HUB "EC2" を選択しました。

コマンドは正常に終了しました。

ユーザ一覧の取得

VPN Server/EC2>Userlist

UserList コマンド - ユーザー一覧の取得
項目|値
----+--

コマンドは正常に終了しました。

ユーザの作成

VPN Server/EC2>UserCreate

UserCreate コマンド - ユーザーの作成
ユーザー名: sakuma
参加するグループ名: #未入力
ユーザーの本名:   #未入力
ユーザーの説明:   #未入力

コマンドは正常に終了しました。

ユーザパスワードの設定

VPN Server/EC2>UserPasswordSet

UserPasswordSet コマンド - ユーザーの認証方法をパスワード認証に設定しパスワードを設定
ユーザー名: sakuma
パスワードを入力してください。キャンセルするには Ctrl+D キーを押してください。
パスワード: ***********
確認入力  : ***********

コマンドは正常に終了しました。

LT2P/IPSecの設定

VPN Server/EC2>IPsecEnable

IPsecEnable コマンド - IPsec VPN サーバー機能の有効化 / 無効化
L2TP over IPsec サーバー機能を有効 (yes / no): yes
Raw L2TP サーバー機能を有効 (yes / no): no
EtherIP / L2TPv3 over IPsec サーバー機能を有効 (yes / no): no
IPsec 事前共有鍵の文字列 (9 文字以下を推奨): ********* #事前共有鍵の文字列を入力する
VPN 接続時に仮想 HUB 名が省略された場合のデフォルト仮想 HUB 名: EC2

コマンドは正常に終了しました。

仮想 NAT および DHCP サーバー機能の設定

VPN Server/EC2>SecureNatEnable

SecureNatEnable コマンド - 仮想 NAT および DHCP サーバー機能 (SecureNAT 機能) の有効化

コマンドは正常に終了しました。

以上でサーバ側の設定は完了。特にエラーでハマるようなところはないはず。公式サイトのドキュメントが日本語で充実しているため、設定前にざっと読んでおくとより作業は楽になる。

クライアントの設定

今回はmacOSとiOSでの利用を想定しているため、構成プロファイルを作成して設定する方針とした。VPN設定の構成プロファイルはiOS、macOSともに共通なので、1つ作成してしまえば、iPhone、iPad、Macそれぞれの端末で手入力で設定する必要はない。

構成プロファイルの作成はAppleConfigurator2を利用する。AppleConfigurator2はMacAppStoreより無償でダウンロードできる。

ファイル>新規作成>一般で適当な値を入力する

f:id:bcorp:20170224141603p:plain

左タブのVPNから接続に必要なパラメータを入力する

f:id:bcorp:20170224141711p:plain

接続名:任意
接続のタイプ:L2TP
サーバ:EC2に設定した固定IPアドレス
アカウント:作成したアカウント名@作成した仮想HUB名
パスワード:ユーザ作成時に作成したパスワード
全てのトラフィックをVPN経由で送信にチェック
コンピュータ認証:共有シークレット
グループ名:空白
共有シークレット:IPsec 事前共有鍵の文字列で設定した文字列

作成した構成プロファイルは任意の場所に保存し、保存したプロファイルはメールやDropbox経由で端末送信しインストールする。

Macは作成した構成プロファイルをダブルクリックすることでインストール

f:id:bcorp:20170224141730p:plain

iPhone、iPadはメールで送るかDropboxに直接Safariからアクセスすることでインストールする。

f:id:bcorp:20170224141747p:plain

Macでの接続は、システム環境設定>構成プロファイルで作成したVPNを選択>接続をクリックして接続。

f:id:bcorp:20170224141803p:plain

iOSで接続するには、設定>VPNをONにすることで接続される。

f:id:bcorp:20170224142145p:plain

今回初めてEC2からSoftEther VPNの起動、設定までやってみたけど、AWSの契約からVPNの接続確認まで半日もかからずにとりあえず使える状態になっている。今のところ安定して使えているし、通信速度が極端に落ちるようなこともない。

AWSの無償期間が終了するまでは費用が発生することもなさそうなので、しばらくこのVPNを使ってみる予定。また、せっかくの無料期間なのでVPN以外にも試していきたいところ。

MacBook USB Type-Cのメリットと課題

MacBookには充電用と外部接続用の端子としてUSB Type-Cが1ポート搭載されている。USB Type-Cについては初めて本格的に利用する事になったのだが、いくつかメリットと課題が見えてきたので、現時点の状況をメモしておく。

USB Type-Cについて整理

f:id:bcorp:20170219112617j:plain

形状

USB 3.1規格に追加されたコネクターの種類のこと。iOSのLightning端子同様に表裏の区別なく利用することができる。そのためACアダプタや周辺機器、本体に挿す時に表裏を意識する必要はなくなるのがメリットのひとつ。

電力能力の向上

ACアダプタ、本体、ケーブルがUSB Type-Cに対応している前提で、最大5V/3A=15Wでの電力供給が可能になる。また拡張規格として、「USB Power Delivery」に対応している機器では、最大5V/20A=100Wで供給できる。今回購入したMacBookには29W USB-C電源アダプタが付属しているのでACアダプタ、ケーブル、MacBook本体共に「USB Power Delivery」対応という認識。

データ通信速度の向上

USB Type-Cはコネクタの規格なのでデータ通信速度とは無関係であるが、アップルの公式サイトによるとMacBookはUSB 3.1 Gen 1(最大5Gbps)の通信速度に対応している。従来のUBS2.0が最大で480Mbpsなので、概ね10倍の転送速度となる。

実際どうなのか。

以上を踏まえた上で、実際に数日間MacBookを積極的に運用してみた感想を。

形状

表裏を意識しない形状やホスト側、クライアント側といった区別もないのはストレスフリー。それによりMacBook本体のポートやケーブルを痛めたりキズをつけたりする可能性も低くなるので、抜き差し可能回数も大きく向上するはず。

Type-C to Type-Cケーブル

f:id:bcorp:20170219112811j:plain

上述した通り、最大の電力パフォーマンスを発揮するにはケーブルも条件のひとつなので、粗悪なものは避けたいところ。MacBookに付属するケーブルは、電力供給の観点では信頼できるけど、耐久性に優れた印象ではないので、別途AnkerのPowerLine+ USB-C & USB-C ケーブルを購入した。購入の際にAmazonで色々検索してみたが、micro USBケーブルやLightningケーブルと比べ選択肢は限られているのが現状。

ACアダプタ

f:id:bcorp:20170219112957j:plain ※Anker PowerPort+ 5 USB-C USB Power DeliveryとアップルのiPad用アダプタ、MacBook用のアダプタ。

ACアダプタについてはケーブル以上に深刻で、モバイルを想定したType-CかつPower Deliveryに対応しているのはアップル純正のACアダプタくらいしか見つけられていない。

f:id:bcorp:20170219112905j:plain

試しにAnkerのPowerPort+ 5 USB-C USB Power Deliveryを購入し、充電時間を計測したところ、MacBook側では45Wと認識されていて、66%から99%まで45分程度で充電が行えたが、サイズ、重量共に持ち運びに適したサイズではない。

f:id:bcorp:20170219113557p:plain

そのためAnkerのPowerPort+ 5 USB-C USB Power Deliveryは自宅のデスクに設置し、出張など長期の外出時にはアップル純正のアダプタを使う方針とした。

モバイルでの充電

MacBookのバッテリーは、ほぼ1日使えるため、毎日のようにアダプタを持ち歩く必要はなさそうなのでiPad Pro同様に夜中にフル充電しておき、昼間はバッテリーで稼働させる運用。とはいえ万が一のバッテリー切れに備えて普段持っているiPad ProのACアダプタから給電を行えることも確認しておいた。

f:id:bcorp:20170219114001j:plain

10Wかつmicro USBからアダプタを介しての給電となるので、当然充電時間は遅くなること、MacBookを使いながらだと充電は出来ず給電のみになることは意識しておく必要はある。将来的にはMacBookのACアダプタでMacBook、iPhone、iPad、その他microUSB対応機器の充電を行えるようにしたいが、ケーブルの種類や変換アダプタを揃えるのにもう一工夫が必要になりそうだ。

外部機器との接続

f:id:bcorp:20170219114144j:plain

MacBook以外の手持ちの機器は全てType-Cには非対応。当初Type-Cからmicro USBケーブルを購入する想定だったが、適当なものが見つけられなかったため、アップルのUSB-C USBアダプタを購入している。あまり外部機器と接続する予定はないが、いざという時に手詰まりになるのも嫌なので、念のため。

まとめ

f:id:bcorp:20170219114202j:plain

条件を満たせば高速な充電時間、表裏、方向を気にしないポート、高速なデータ転送などメリットは大きい。ただ現状ではケーブルやACアダプタの種類が少ないこと、Type-C非対応機器と接続する際にアダプタを繋げるのが煩雑になるなこと、対応機器の価格が総じて高めであることが課題と感じている。

MacBookのポートが一つしかない部分については、バッテリ持続時間が想定したより長時間だったことから、充電しつつ外部接続するといったシーンはあまりなさそうなので、気にする必要はなさそうだけど、会社や自宅のデスクでデュアルディスプレイにしたり、プリンタやスキャナなどと接続したりといったユースケースが想定される場合はまた別の課題が出てきそうではある。

新規格かつシビアな規格なので、Type-C対応の機器が少ない現状では、ケーブルやACアダプタのラインナップが増えるのに時間がかかるのは仕方ないところ。

Python3.5をMacBookにインストールする

MacにはPythonが標準でインストールされているけど、バージョンは2.7になっている。MacBookではPython3を利用したい。手順をいつも忘れて結構時間を掛けてしまうので、今回購入したMacBookにPython3.5.3をインストールした方法をメモしておく。

前提条件
・macOS 10.12.3
・Mac App StoreからXcode 8.1がインストールされていること

以下Terminal.appで。

Homebrewのインストール

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

デフォルトでインストールされているPythonのバージョン確認

$ python
Python 2.7.10

pyenvをインストール

$ brew install pyenv

インストール可能なPythonのバージョンを確認

$ pyenv install --list

Python3.5.3インストール

$ pyenv install 3.5.3

Pythonバージョン確認

$ pyenv versions
* system (set by /Users/user/.pyenv/version)
  3.5.3

pyenv有効化

eval "$(pyenv init -)"

.bash_profileの作成(ファイルがなければ)

$ touch .bash_profile

vimを起動してPATHの追加

$ vim.bash_profile
export PATH="$HOME/.pyenv/shims:$PATH"

環境変数の書き換え反映

$ source .bash_profile

Pythonの場所を確認

$ which Python
/Users/user/.pyenv/shims/Python

Pythonのバージョン確認

$ python 
Python 3.5.3

以上でPython 3.5.3が利用可能になった。