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

Goldstine研究所

mosuke5's tech blog

【VPS1台でインフラ勉強】SoftEtherを使ってVPN構築

インフラ VPN SoftEther ネットワーク

VPS1台でインフラ勉強シリーズでVPN構築を行ったのでそのメモ。

1. 実施したこと

VPSのホストサーバをVPSサーバとし、その上で仮想で立ち上げたサーバ(ローカルネットワーク)に外部から接続できるようにすること。

<概念図>

f:id:mosuke5:20141207200544p:plain

2. 環境

VPNソフトウェア:SoftEther VPN プロジェクト - SoftEther VPN プロジェクト
・メモリ:1GB
・CPU:仮想2コア
・HDD:100GB
・OS:CentOS7
・サーバ仮想化:Vagrant(Utuntu13)

3. SoftEtherのインストール

インストール手順は公式ドキュメント通りなので簡単にコマンドのみ記述しておく。
7.3 Linux へのインストールと初期設定 - SoftEther VPN プロジェクト

【ダウンロードしたもの】
ここから環境に応じて対象のソフトウェアを選ぶ
SoftEther ダウンロード センター

コンポーネントSoftEther VPN Server
・プラットフォーム:Linux
・CPU:Intel x86 / AMD64(64bit)

## ダウンロード
$ wget ttp://jp.softether-download.com/files/softether/v4.08-9449-rtm-2014.06.08-tree/Linux/SoftEther%20VPN%20Server/64bit%20-%20Intel%20x64%20or%20AMD64/softether-vpnserver-v4.08-9449-rtm-2014.06.08-linux-x64-64bit.tar.gz

## 解凍
$ tar zxvf softether-vpnserver-v4.08-9449-rtm-2014.06.08-linux-x64-64bit.tar.gz

## 実行可能ファイル作成
$ cd vpnserver/
$ sudo make

## /usr/localへ配置
$ sudo mv vpnserver /usr/local

## パーミッション変更
### 基本的には600。実行ファイルのみ700
$ cd /usr/local/vpnserver
$ sudo chown root:root ./*
$ sudo chmod 600 ./*
$ sudo chmod 700 ./vpncmd
$ sudo chmod 700 ./vpnserver

## 動作チェック
$ sudo ./vpncmd
1. VPN Server または VPN Bridge の管理
2. VPN Client の管理
3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)

1 - 3 を選択: 3

VPN Tools>
##helpとうつと利用可能なコマンドが出る
VPN Tools> help
下記の 6 個のコマンドが使用できます:
 About         - バージョン情報の表示
 Check         - SoftEther VPN の動作が可能かどうかチェックする
 MakeCert      - 新しい X.509 証明書と秘密鍵の作成 (1024 bit)
 MakeCert2048  - 新しい X.509 証明書と秘密鍵の作成 (2048 bit)
 TrafficClient - 通信スループット測定ツールクライアントの実行
 TrafficServer - 通信スループット測定ツールサーバーの実行
VPN Tools> 
VPN Tools> Check
(略)
すべてのチェックに合格しました。
VPN Tools> 
VPN Tools> exit

##起動スクリプトの作成
$ sudo vim /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

##サービス登録
$ sudo chkconfig --add vpnserver
$ sudo chkconfig --list vpnserver
vpnserver      	0:off	1:off	2:on	3:on	4:on	5:on	6:off

##起動
$ sudo /etc/init.d/vpnserver start 

4. 設定

(1)管理者パスワードの設定
## vpnserverへ接続
$ sudo ./vpncmd localhost:443 /SERVER

## 管理者パスワード設定
VPN Server> ServerPasswordSet
(2)仮想HUBの作成

デフォルトで「default」という仮想がHUBがあるのでそれで構築。
自分の仮想HUBを作りたければHubCreateでつくれる。

VPN Server> HubCreate

※HELPコマンドがだいぶ使えるので使おう。日本語で書かれているのでわかりやすいです。

VPN Server>HELP
下記の 205 個のコマンドが使用できます:
 About                      - バージョン情報の表示
 AcAdd                      - 接続元 IP 制限リストにルールを追加 (IPv4)
 AcAdd6                     - 接続元 IP 制限リストにルールを追加 (IPv6)
 AcDel                      - 接続元 IP 制限リスト内のルールの削除
 AcList                     - 接続元 IP 制限リストのルール一覧の取得
(...以下略)
(3) IPsec VPN サーバー機能の有効化

VPNのトンネリングをするにあたって事前共有鍵が必要なので作成する必要がある。

VPN Server>IPsecEnable
    IPsecEnable コマンド - IPsec VPN サーバー機能の有効化 / 無効化
    L2TP over IPsec サーバー機能を有効 (yes / no): yes
    Raw L2TP サーバー機能を有効 (yes / no): yes
    EtherIP / L2TPv3 over IPsec サーバー機能を有効 (yes / no): yes
    IPsec 事前共有鍵の文字列 (9 文字以下を推奨): *******
    VPN 接続時に仮想 HUB 名が省略された場合のデフォルト仮想 HUB 名: Default
(4) グループとユーザの作成

ユーザを作成するにはグループの作成が必要なので先にグループを作る。
また、ユーザを作ったでではパスワードが設定されないので忘れずにパスワード設定。

VPN Server>Hub Default
VPN Server/DEFAULT>GroupCreate
    GroupCreate コマンド - グループの作成
    グループ名: mygroup
    グループの本名: mygroup
    グループの説明: mygroup

VPN Server/DEFAULT>UserCreate
    UserCreate コマンド - ユーザーの作成
    ユーザー名: myuser
    参加するグループ名: mygroup
    ユーザーの本名: myuser
    ユーザーの説明: myuser
    コマンドは正常に終了しました。

## ユーザを作っただけではパスワードが設定されないので
VPN Server/DEFAULT> UserPasswordSet
(5) ローカルブリッジの設定

次にローカルブリッジの設定をする。
ローカルブリッジはVPNの仮想ネットワークと、LAN の実ネットワーク(ここではVPSホストサーバと仮想Webサーバ間のローカルネットワーク)をつなげる設定です。
ローカルブリッジを行うLANカードを指定する必要があるが、ここでは仮想の「vboxnet0」を使用します。

VPN Server/DEFAULT>BridgeCreate
    BridgeCreate コマンド - ローカルブリッジ接続の作成
    ブリッジする仮想 HUB 名: Default
    ブリッジ先のデバイス名: vboxnet0
(6) DHCPの設定

VPNクライアント側に割り当てるIPアドレスのレンジを決めてあげます。
今回は最小限構成で実現するため、ローカルのIPアドレスは同一セグメントとしました。
192.168.33.0/24を利用セグメントとした。
また、サーバ側に割り当てているIPとバッティングしないように192.168.33.20以降をDHCPのIPレンジとした。

##まずは有効化。これをやらないと「PPPサーバーとの接続が確立ができません」ってなってハマります。
VPN Server/example> SecureNatEnable

VPN Server/DEFAULT>DhcpSet
    DhcpSet コマンド - SecureNAT 機能の仮想 DHCP サーバー機能の設定の変更
    配布するアドレス帯の開始点: 192.168.33.20
    配布するアドレス帯の終了点: 192.168.33.50
    サブネットマスク: 255.255.255.0
    リース期限 (秒): 7200
    デフォルトゲートウェイ (未設定可):
    DNS サーバー 1 (未設定可):
    DNS サーバー 2 (未設定可):
    ドメイン名:
    ログの保存 (yes / no): yes

5. VPN接続試験

iPhoneVPNの設定から以下のように設定をする。
アカウントの部分は「ユーザ名@仮想Hub名」にすること。
f:id:mosuke5:20141207212531j:plain


接続すると、ローカルのIPが割り当てられていることを確認。
途中で切れているが192.168.33.21が割り当てられました。
f:id:mosuke5:20141207212546j:plain

VPNにつないだ状態でブラウザから192.168.33.10にアクセスすると”It works!!!”。
f:id:mosuke5:20141207212556j:plain

6 最後に

VPNの構築そのものはなんとかできるが、やはり奥は深い。
挙動がまだ不安定な部分もあるので、きちんと仕組みを理解していくことと、
今回はVPNクライアント側とアクセス先サーバを同一セグメントとしたので、L3の設定などをして違うセグメントにもアクセスできるようにしていきたい。