AWSとソフトウェアVPN(4) - SoftEther のクライアント接続:AWS側設定編

Katoです。

今回は SoftEther VPN Server の設定を行い、AWS側からのクライアント接続を実際に試します。
VPNサーバと同じAWS内にあるプライベートサーバなのに、どうしてVPNクライアントで接続しないといけないのか?」という疑問をお持ちの方は、 本連載第1回 をご覧下さい。

早速 VPN Server Manager を起動してAWS上のサーバに接続します。  

SoftEther-VPN-Manager-Main
図1:SoftEther VPN Server Managerメイン画面

仮想HUBの作成ボタンを押し、仮想HUBを新規に作成します。この仮想HUBという機能が SoftEther の中核をなしており、クライアント接続でも拠点間接続でも用いるものです。

仮想DHCPサーバとルーティング機能を起動しなければL2でのVPN、起動すればL3でのVPNが実現出来るようなイメージになります。
ただしL2での利用にはローカルブリッジ機能が必要で、そのためにはNICのプロミスキャスモードが必須なのでAWS上では使えません。

このあたりの説明は本連載第1回をご覧下さい。仮想HUB名と管理用パスワードを英数字で入力してOKボタンを押すだけで仮想HUBは作成されます。  

SoftEther-VPN-Manager-vHUB
図2:仮想HUBの作成画面

管理画面に戻ったら作成した仮想HUBを選択して仮想HUBの管理ボタンを押します。
管理メニューが表示されるので、ユーザの管理ボタンを押します。  

SoftEther-VPN-Manager-vHUB-Management
図3:仮想HUB管理メイン画面

新規作成ボタンでユーザ2つを新規作成します。1つはクライアントPCからの接続用で、もう1つはAWSプライベートセグメントのサーバからの接続用です。
ここで作成したユーザ名とパスワードはクライアント側で必要となりますので、憶えやすいものを設定しておくと良いでしょう。  

SoftEther-VPN-Manager-vHUB-CreateUser
図4:ユーザ作成画面

正常に作成されるとユーザ一覧に追加されます。
閉じるボタンを押して仮想HUB管理画面に戻り、今度は仮想NATおよび仮想DHCPサーバ機能ボタンを押します。  

SoftEther-VPN-Manager-vNAT-vDHCP
図5:仮想NATと仮想DHCP機能

まずSecureNATの設定ボタンを押し、これらの機能の設定を行います。  

SoftEther-VPN-Manager-vNAT-Setting
図6:SecureNAT設定画面

VPNトンネル内には独立したIPセグメントを割り当て、このIPセグメントのアドレスを用いてクライアントはサーバにアクセスします。
仮想ホストのネットワークインタフェースの設定ではVPNトンネル内で使うVPNサーバのIPアドレスを設定します。

この仮想ホスト用IPアドレスは仮想DHCPサーバが割り当てるIPアドレス帯とアクセスできる必要があります。
また仮想NATは今回使用しませんので、仮想NAT機能を使用するというチェックボックスはオフにしましょう。

右側にある仮想DHCPサーバは使用するのでチェックを入れ、先ほどの仮想ホストのIPアドレスにアクセスできるアドレス帯を配布するように設定しましょう。

入力が完了したらOKボタンで閉じ、「SecureNAT機能を有効にする」ボタンを押します。この時警告が表示されますが、そのままOKを押します。
これでVPNサーバ側の設定は完了です。

次にAWSプライベートセグメントのサーバを設定します。
プライベートサーバには前回の記事でVPN Clientをインストールしてありますので、まずはサービスが稼働しているか確認します。VPNサーバを踏み台にしてSSH接続後、次のコマンドを用います。

pgrep vpnclient

または

ps aux|grep vpnclient

サービスが稼働していなければ次のコマンドで開始します。

/opt/vpnclient/vpnclient start

ここからVPN Clientの設定が始まります。ここでは画面表示と筆者のコメントを交えて書いていきます。
黄色の文字がキーボードでの入力、水色の文字が筆者のコメントです。

# /opt/vpnclient/vpncmd 
vpncmd コマンド - SoftEther VPN コマンドライン管理ユーティリティ 
SoftEther VPN コマンドライン管理ユーティリティ (vpncmd コマンド) 
Version 4.08 Build 9449 (Japanese) 
Compiled 2014/06/08 15:19:48 by yagi at pc25 
Copyright (c) SoftEther VPN Project. All Rights Reserved.vpncmd プログラムを使って以下のことができます。 
1. VPN Server または VPN Bridge の管理 2. VPN Client の管理 
3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)1 - 3 を選択: 
2 ? ? ? ? ? 
;←VPN Clientの管理を選択 
接続先の VPN Client が動作しているコンピュータの IP アドレスまたはホスト名を指定してください。
何も入力せずに Enter を押すと、localhost (このコンピュータ) に接続します。 
接続先のホスト名または IP アドレス: ? ? ? ? ? ;←何も入力せずEnterを押す 
VPN Client "localhost" に接続しました。 
VPN Client>niccreate? ? ? ? ? ?;←VPN接続に必須である仮想NICを作成 
NicCreate コマンド - 新規仮想 LAN カードの作成 
仮想 LAN カードの名前: vnic0? ? ? ? ? 
?;←OS上ではvpn_が接頭辞についた形で認識される 
コマンドは正常に終了しました。 
VPN Client>niclist? ? ? ? ? ? 
;←正常に作成されたか確認 
NicList コマンド - 仮想 LAN カード一覧の取得 
項目 |値 
-----------------+----------------------------------- 
仮想 LAN カード名|vnic0 
状態 |有効 (使用可能) 
MAC アドレス |00AC4D5C9D11 
バージョン |Version 4.08 Build 9449 (English) 
コマンドは正常に終了しました。 
VPN Client>accountcreate ? ? ? ? ? 
;←VPN接続設定を作成 
AccountCreate コマンド - 新しい接続設定の作成 
接続設定の名前: vpn ? ? ? ? ? ;←接続設定名。好みの名前を入力 
接続先 VPN Server のホスト名とポート番号: 10.0.1.4:443?
;VPNサーバのプライベートENIアドレスとポートを指定↑ 
接続先仮想 HUB 名: VPN ? ? ? ? ?? ;←管理GUIから作成した仮想HUB名を指定 
接続するユーザー名: hogepiyo? ? ? ? ? ?
;←管理GUIから作成したユーザを指定 
使用する仮想 LAN カード名: vnic0 ? ? ? ? ? ;←先ほど作成した仮想LANカード名を指定 
コマンドは正常に終了しました。 
VPN Client>accountlist ? ? ? ? ? ;←正常に作成されたか確認 
AccountList コマンド - 接続設定一覧の取得 
項目 |値 
-------------------+------------------------------- 
接続設定名 |vpn 状態 |オフライン 
接続先 VPN サーバー|10.0.1.4:443 (直接 TCP/IP 接続) 
仮想 HUB 名 |VPN 仮想 LAN カード名 |vnic0 
コマンドは正常に終了しました。 
VPN Client>accountpasswordset? ? ? ? ? ?;←VPN接続設定にパスワードも保存 
AccountPasswordSet コマンド - 接続設定のユーザー認証の種類をパスワード認証に設定 
接続設定の名前: vpn パスワードを入力してください。キャンセルするには Ctrl+D キーを押してください。 
パスワード: ************ ? ? ? ? ? ;←先ほどのユーザ名に対応するパスワードを入力 
確認入力 : ************ 
standard または radius の指定: standard 
コマンドは正常に終了しました。 
VPN Client>accountconnect ? ? ? ? ? ;←VPN接続を試みる 
AccountConnect コマンド - 接続設定を使用して VPN Server へ接続を開始 
接続設定の名前: vpn ? ? ? ? ? ;←接続設定で入力した名前を指定 
コマンドは正常に終了しました。 
VPN Client>accountstatusget ? ? ? ? ? ;←正常に接続できているか確認 
AccountStatusGet コマンド - 接続設定の現在の状態の取得 
接続設定の名前: vpn 
項目 |値 
------------------------------+---------------------------------------- 
接続設定名 |vpn 
セッション接続状態 |接続完了 (セッション確立済み) ;←接続完了となっているので正常 
VLAN ID |- 
サーバー名 |10.0.1.4 
ポート番号 |TCP ポート 443 
サーバー製品名 |SoftEther VPN Server (64 bit) 
サーバーバージョン |4.08 
サーバービルド番号 |Build 9449 
接続開始時刻 |2014年11月28日(金) 17時 2分41秒 
初回セッションの確立時刻 |2014年11月28日(金) 17時 2分41秒 
現在のセッションの確立時刻 |2014年11月28日(金) 17時 2分41秒 
セッション確立回数 |1 回 
半二重 TCP コネクションモード |いいえ (全二重モード) 
VoIP / QoS 対応機能 |有効 (使用中) 
TCP コネクション数 |2 TCP コネクション数最大値 |2 
暗号化の使用 |はい (暗号化アルゴリズム: RC4-MD5) 圧縮の使用 |いいえ (圧縮無し) 
物理通信に使用中のプロトコル |Standard TCP/IP (IPv4) UDP 高速化機能をサポート |はい 
UDP 高速化機能を使用中 |はい 
セッション名 |SID-HOGEPIYO-16 コネクション名 |CID-23 
セッションキー (160bit) |FB818600A1E208780A91D7CB8A71877920FB4869 
ブリッジ / ルータモード |いいえ 
モニタリングモード |いいえ 
送信データサイズ |5,014 バイト 
受信データサイズ |4,235 バイト 
送信ユニキャストパケット数 |11 パケット 
送信ユニキャスト合計サイズ |906 バイト 
送信ブロードキャストパケット数|8 パケット 送信ブロードキャスト合計サイズ|648 バイト 
受信ユニキャストパケット数 |8 パケット 
受信ユニキャスト合計サイズ |568 バイト 
受信ブロードキャストパケット数|12 パケット 
受信ブロードキャスト合計サイズ|732 バイト 
コマンドは正常に終了しました。

ということで、これでVPN接続は正常に行えました。しかしこれだけではまだデータを通すことはできません。

vpncmd ユーティリティを Ctrl-C で抜け、ifconfigNICの状態を確認してみましょう。

ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 9001
inet 10.0.1.5</span> netmask 255.255.255.0 broadcast 10.0.1.255
inet6 fe80::45f:82ff:fec2:6589 prefixlen 64 scopeid 0x20 ether 06:5f:82:c2:65:89 txqueuelen 1000 (Ethernet)
RX packets 40076 bytes 45956832 (43.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 20634 bytes 2277373 (2.1 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 … 
vpn_vnic0: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt; mtu 1500
inet6 fe80::2ac:4dff:fe5c:9d11 prefixlen 64 scopeid 0x20 ether 00:ac:4d:5c:9d:11 txqueuelen 500 (Ethernet)
RX packets 88 bytes 6296 (6.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 61 bytes 5030 (4.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

上記の例は lo を省略しました。

ご覧の通り eth0 には inet の項目があり、IPアドレスが割り当てられています。
このアドレスはAWSDHCPサーバから割り当てられたものです。

vpn_vnic0 は先ほど vpncmd コマンドの中で作成した仮想NICですが、inet の項目が存在していないのでIPアドレスが割り当てられていないことがわかります。
当然これでは通信できません。手動でIPアドレスを割り当てる方法もありますが、VPN ServerでDHCP機能を有効にしているので活用しましょう。

以下のコマンドを実行することで、VPN ServerのDHCP機能からIPアドレスを拾ってくることが可能です。

dhclient vpn_vnic0

実行後は ifconfig コマンドでアドレスを確認してみましょう。

fconfig … 
vpn_vnic0: flags=4163&lt;UP,BROADCAST,RUNNING,MULTICAST&gt; mtu 1500
inet 10.0.10.13
netmask 255.255.255.0 broadcast 10.0.10.255
inet6 fe80::2ac:4dff:fe5c:9d11 prefixlen 64 scopeid 0x20 ether 00:ac:4d:5c:9d:11 txqueuelen 500 (Ethernet)
RX packets 263 bytes 19019 (18.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 187 bytes 16162 (15.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

inet の項目が出現し、IPアドレスを取得できたことがわかります。
これでプライベートサーバはVPNサーバと接続し、IPアドレスVPNトンネル用のものを得ることができました。

プライベートサーバはVPNサーバとVPNトンネル経由での通信を行う準備が整ったことになります。

次回はAWS外にあるクライアントPCの設定を行いましょう。