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

仮想HUBの作成ボタンを押し、仮想HUBを新規に作成します。この仮想HUBという機能が SoftEther の中核をなしており、クライアント接続でも拠点間接続でも用いるものです。
仮想DHCPサーバとルーティング機能を起動しなければL2でのVPN、起動すればL3でのVPNが実現出来るようなイメージになります。 ただしL2での利用にはローカルブリッジ機能が必要で、そのためにはNICのプロミスキャスモードが必須なのでAWS上では使えません。
このあたりの説明は本連載第1回をご覧下さい。仮想HUB名と管理用パスワードを英数字で入力してOKボタンを押すだけで仮想HUBは作成されます。

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

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

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

まず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/vpncmdvpncmd コマンド - SoftEther VPN コマンドライン管理ユーティリティSoftEther VPN コマンドライン管理ユーティリティ (vpncmd コマンド)Version 4.08 Build 9449 (Japanese)Compiled 2014/06/08 15:19:48 by yagi at pc25Copyright (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 コネクション数 |2TCP コネクション数最大値 |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 で抜け、ifconfig でNICの状態を確認してみましょう。
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<UP,BROADCAST,RUNNING,MULTICAST> 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アドレスが割り当てられています。このアドレスはAWSのDHCPサーバから割り当てられたものです。
vpn_vnic0 は先ほど vpncmd コマンドの中で作成した仮想NICですが、inet の項目が存在していないのでIPアドレスが割り当てられていないことがわかります。
当然これでは通信できません。手動でIPアドレスを割り当てる方法もありますが、VPN ServerでDHCP機能を有効にしているので活用しましょう。
以下のコマンドを実行することで、VPN ServerのDHCP機能からIPアドレスを拾ってくることが可能です。
dhclient vpn_vnic0
実行後は ifconfig コマンドでアドレスを確認してみましょう。
fconfig … vpn_vnic0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> 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の設定を行いましょう。





