夏はなぜか色々と忙しかったため、大変ご無沙汰のばっしーです。
最近はますますAliexpressの利用に拍車がかかっていて、妻が頻繁に娘の洋服のリンクをLINEで送ってきます。送ってこられてもその都度見るのは大変なので「勝手にカートに入れておいて」ということにしたら、今度は「カートの中にあるどれを買ったらいいのか?」という事態に陥っています。
デジタルガジェット好きには良く知られているAliexpressですが、子供服も西松屋の半額程度で2倍程度の価格帯のクォリティがあるので止まりません。送料もほとんど無料だし、消費税も不要(1万円以下は免税っぽい)だし、中国製をわざわざ日本で買う理由を探す方が難しいです。
他にも、某ドイツB社の車に乗っている旧友がいるのですが、中国でも販売が好調なのか、補修部品が超安価に入手できます。
車両コンピューターの診断機はAmazonより少し安い程度でしたが、パーツはディーラーよりも大幅に安い互換パーツ専門店と比較しても、更に1/4程度の価格になっていて、如何に日本の消費者が情弱でバカにされているかがよく分かります。
私の愛車も日本ではマイナーな某C社の車なのですが、エンジンはB社と共通なので補修部品を注文しました。汎用的なワイパーなども国内では買う気を無くす価格で手に入るので本当に重宝しています。
さて!
今回はOSSの仮想ルーター「SoftEtherVPN」を使ってちょっと実験をしてみました。
前提は以下の通りです。
外出先から社内リソースにアクセスしたいが、別の会社のリソースにも同時にアクセスしたい。という要望があったからです。
結論
スプリットトンネリングが必要
スプリットトンネリングというのは、接続先をディフォルトルート(0.0.0.0/0)にせず、特定のネットワークのみルーティングさせる方法です。SoftEtherを普通にセットアップしてしまうとこの機能はOFFになってしまうので、すべての通信がSoftEther経由になってしまいますので、それをキャンセルすることが必要です。
なお、SoftEtherサーバ側で設定しても、Windows標準のL2TP/IPsecではディフォルトでディフォルトゲートが変更されてしまうので、その機能を外すTCP/IPの設定をする必要があります。
PacketixVPNは不要なの?
SoftEther本家のアップデート履歴(2014年のアップデート)には以下の様に記載があります。
そのため、無料版のSoftEtherでは利用できない機能であると思い込んでいましたが、普通に利用できました。
今回は元々この機能を使用することになっていたので、PacketixVPN(A社)、PacketixVPN(B社)、SoftEther(C社)の二種類のサーバーを使用しましたが、PacketixVPNとSoftEtherで挙動は変わりませんでした。
同時に接続できるのは2接続まで
結論から書くと、A社、B社、C社の環境を作成して実験したところ、同時に接続できるのは2接続まででした。
A-B、B-C、A-Cという2接続は問題なくできましたが、3つめを接続しようとすると、「エラー633:モデム(または他の接続デバイス)は既に使用中か、正しく構成されていません。」と表示され、接続に失敗してしまいました。
これはWindows標準のL2TP/IPsecの制限と思われます。
VPN Serverの構築が5分でできるようになった
何度も作り直したりしたので、Amazon Linux2のインスタンス作成から検証PCの接続まで、5分程度ですべての設定を終えることができるようになってしまいました。
いや、誰得なんだこれ。
下記にコピペするだけで簡単に構築できてしまう、本家よりも簡単なマニュアルを載せておきます。
SoftEtherVPN、PacketixVPNサーバーの構築
まずは構築しなければ始まらないのですが、構築方法の詳細は公式ページを参照いただくとして、メチャクチャ簡易版を以下に記します。これで分からない場合にはggrks。
構築手順
手順としては以下の通りです。
- AWSで適当なVPN、サブネットを作成する
- AmazonLinux2を構築する
- gccをインストールする
- SoftEtherVPNもしくはPacktixVPNをダウンロードする
- インストールする
- 自動起動など設定し、VPNサーバーを起動する
- 手元のPCから管理画面に入る
- リモートVPNサーバーとして設定する
- リモートPCから接続設定して接続する
これらのあんまり詳細ではない詳細を下に書いていきます。
VPNサーバー構築手順詳細
AWSで適当なVPN、サブネットを作成する
VPCダッシュボードで「VPCの作成」を押す
「1個のパブリックサブネットを持つVPC」を選択して「選択」を押す
「IPv4 CIDERブロック」「VPC名」「パブリックサブネットのIPv4 CIDR」を適宜入力して「VPCの作成」を押す
これでVPCの作成は完了です。
AmazonLinux2を構築する
まずEC2の画面で「インスタンスの作成」を押す
マシンイメージ(AMI)は一番上に表示されるAmazon Linux 2を選択する
インスタンスタイプはとりあえず同時接続数に依存しますが、検証ならt2.microで十分なのでそのまま選択
ここは選ぶものが3点あります。
・ネットワーク → 先ほど作成したVPCを選択
・サブネット → 先ほど作成したサブネットを選択
・プライマリIP → サブネット内で適当なIPアドレスを指定(/24の場合は第4オクテットが4~254のみ使用可)
以上を指定したら次の手順へ
ストレージはそのままでOK
タグは不要ですが、適当に認識しやすいNameタグでもつけておきましょう。
「hogehoge」とか意味不明なのでお勧めです。
セキュリティグループは以下は必須です。
・SSH、HTTPS → 管理に使用します。マイIPでOK
・カスタムプロトコル50(ESP)、UDP500、UDP4500 → IPsecに利用します
とても重要な最後の確認です。
確認しないで「作成」を押す。
キーペアをもっている場合には既存のキーペアを、持っていない場合には新規作成してダウンロードしておきましょう。
次に作成したLinuxにログインしたいのでEIPを付けます。EIPの割当をぽちっと。
ぽちーっと
新しく割り当てられたEIPを選択し、「アクション」-「アドレスの関連付け」
インスタンスの選択から、対象のインスタンスを選択して、関連付けをポチ
インスタンスの画面に戻って、EIPを確認する
次に、TeraTermを立ち上げてSSH接続をします。
ホスト欄にEIPを入力し、サービスはSSHを選択、OKをポチ
このよく分からない画面はチェックを入れて「続行」をポチ
ユーザー名は「ec2-user」、秘密鍵をダウンロードしたpemファイルを選択し「OK」をポチるとSSH接続が出来ます。
gccをインストールする
ここからは一気にコマンドだけ記します。コピペしましょう。
sudo su -
yum install -y gcc
SoftEtherVPNもしくはPacktixVPNをダウンロードする
wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.28-9669-beta/softether-vpnserver-v4.28-9669-beta-2018.09.11-linux-x64-64bit.tar.gz
※2018/10/04の最新バージョンなので適宜以下サイトから最新バージョンへのリンクを取得してください
https://www.softether-download.com/ja.aspx?product=softether
インストールする
tar xzvf softether-vpnserver-v4.28-9669-beta-2018.09.11-linux-x64-64bit.tar.gz
cd vpnserver
make
→ 「1」を3回入力する
cd ..
mv vpnserver /usr/local
cd /usr/local/vpnserver/
chmod 600 *
chmod 700 vpncmd
chmod 700 vpnserver
./vpncmd
→ 「3」を入力
→ 「check」を入力
→ 「The command completed successfully.」と表示されたらインストール成功
自動起動など設定し、VPNサーバーを起動する
vi /etc/init.d/vpnserver
以下の内容で作成する
#!/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
/sbin/chkconfig --add vpnserver
/etc/init.d/vpnserver start
→ 「The SoftEther VPN Server service has been started.」と表示されればOK
リモートVPNサーバーとして設定する
手元のPCから管理画面に入る
初回接続設定
1.「リモートVPNサーバ」にチェックを入れて「次へ」
2.仮想HUB名は「VPN」デモなんでもよい(ユーザーの目には触れない)
3.ダイナミックVPNは利用したい場合にはホスト名をユニークなものに設定する
→ここで設定すると、リリース手続きを行わないと永遠に同じ名前は使用できなくなる
4.「L2TPサーバー機能を有効にする(L2TP/IPsec)」にチェックを入れ
「IPsec事前共有鍵(PSK)」に適切な文字列を入力し「OK」
(PSKはPCの設定時に必要となり、エンドユーザーには隠すことでセキュリティ向上も可能)
5.「VPN Azureを無効にする」を選択して「OK」
6.次の画面でユーザーを作成もできるが、そのまま「閉じる」でもよい
リモートVPN接続設定
1.仮想HUBリストから対象の仮想HUB「VPN」を選択して「仮想HUBの管理」をポチ
2.「ユーザーの管理」からユーザーを追加できる
3.「仮想NATおよび仮想DHCPサーバー機能」をポチ
4.「SecureNATの設定」をポチ
右下欄の「ディフォルトゲートウェイ」と「DNSサーバー」を消し、「プッシュする性的静的ルーティングテーブルの編集」をポチ
静的ルーティングテーブルに接続先セグメントを(NWアドレス)/(サブネットマスク)/(ゲートウェイIP)という形式で記載する
リモートPCから接続設定して接続する
一般的なL2TP/IPsecの設定をした後に、以下の設定をする必要があります。
VPN接続のプロパティから「ネットワーク」タブの中の「インターネットプロトコルバージョン4」を選択してプロパティをポチ
「詳細設定」をポチ
ここで「リモートネットワークでディフォルトゲートウェイを使う」チェックを外します
すると、下の様に複数接続が可能になり、更にインターネットの閲覧もディフォルトゲートウェイの変更がない状態で可能になります。
接続名が「Ohaio」なのは、検証にオハイオリージョンを使用したからです。本当の綴りは「Ohio」ですがやっちまいました。
ちなみに、2拠点接続している状態で3拠点目を接続しようとすると、下の様なエラーが発生して接続することができません。理由を調べましたがよく分からず、WindowsのL2TP/IPsecの制限があるのではないかと推測します。
(この制限について言及されているものをご存知の方や、そんなわけないじゃんという方、教えてください!)
以上、SoftEtherVPNのスプリットトンネリングを用いた、L2TP/IPsecの複数接続の方法でした。