前回はVPNサーバー構築まで行いました。
今回はVPNクライアントからプライベートサブネット上のサーバへアクセスしてみます。
VPNサーバーの設定とプライベートサブネット上のサーバー設定を復習しておきましょう。
プライベートサブネット上のサーバ
VPNサーバの方
クライアントVPNのインストールと接続
クライアントからこのプライベートサブネット上のサーバへ接続してみます。
そのためにはクライアントマシン側にVPNクライアントソフトが必要です。
インストールしましょう。
http://www.softether-download.com/ja.aspx?product=softether
上記サイトからインストーラをダウンロードしてインストールしてください。
インストールが完了したらクライアントを立ち上げください。
クライアントが起動したら
上部メニュー > 仮想LAN > 新規仮想LANカードの作成 を行います。
適当に名前をつけます。
Windowsに仮想LANがインストールされ、ネットワーク接続のコントロールパネル上に新たに登録されます。
VPNクライアントソフトの方に戻り、
「新しい接続設定の作成」を選択します。
接続設定名、ホスト名(IPアドレス)、ユーザー/パスワードを入力しましょう。
VPNサーバ側にきちんと接続できていれば仮想HUB名も自動的にセットされます。
接続が作成されたらダブルクリックしてみましょう。接続が確立し、タスクバーのVPNクライアントのアイコンが点滅しだせば成功です。
クライアントのWindowsマシンからpingを打ってみましょう。
届きました。目的達成です!
問題点
VPN接続完了!
と、言いたいところですがこのままでは1つ問題があります。
コマンドラインからroute printコマンドを打つと下記のように表示されます。
=========================================================================== IPv4 ルート テーブル =========================================================================== アクティブ ルート: ネットワーク宛先 ネットマスク ゲートウェイ インターフェイ ス メトリック 0.0.0.0 0.0.0.0 192.168.30.1 192.168.30.11 2 52.192.205.111 255.255.255.255 192.168.11.1 192.168.11.4 20 127.0.0.0 255.0.0.0 リンク上 127.0.0.1 306 ...
一番上の宛先が「0.0.0.0」となっている箇所に注目してください。
VPN接続してしまうと、ゲートウェイがVPNのサーバ側である「192.168.30.1」に置き換わってしまいました。
このままだとルートテーブルに設定されていないアドレスに対して、すべてVPNサーバーを経由することになります。
※タスクマネージャーで仮想LAN、物理LANの通信量を確認できます。
この状態でたとえばあるクライアントが重たいWEBサイトや動画を開いたりするとVPNサーバーのパフォーマンスに影響します。
そしてもう1点、AWSの場合グローバルIP宛てに接続してきた通信に対しては1G単位毎に利用料が別途発生します(VPNサーバーはインターネット間の通信をグローバルIPで通信しているのでこれに該当します)。
経費節約のためにも何とかしましょう!
まず、VPNサーバー管理者側としてはこのような通信を認めないため、VPNサーバーからのアウトバウンド通信を該当のサブネット宛てのみ許可するように設定します。
※この設定を応用すればVPNサーバを悪意のある第3者からの踏み台サーバとして利用されることを防ぐことにも役立ちます。ただし、アウトバウンド側を絞る際のリスクもあります。詳しくはこのページの文末を参照ください。
しかし、このままではクライアントがVPNクライアントで接続を確立している時にはインターネットができない/その他のネットワークのサーバに繋げないという事態が発生します。そこでルーティングを少し工夫する必要があります。
クライアントマシンのネットワーク接続設定をいじります。
Windowsのネットワーク接続から先ほど作成した仮想LANカードのプロパティを開きます。
IPv4のプロパティを選択します。
詳細設定を開きます。
インターフェイスメトリックの値をVPNを接続していない状態でのデフォルトゲートウェイ設定よりも高い値に設定します。
デフォルトゲートウェイのメトリックはVPN接続を切断している状態でコマンドラインからroute printコマンドで確認してください。一番右の値です。
これでブラウザによりgoogleやYahooなどにアクセスした場合にはデフォルトのゲートウェイ向けで通信がされるようになります。
しかし、このままだとVPN接続を確立してもAWSのプライベートサブネットに接続できなくなってしまいました。なぜなら、VPNクライアントを経由せずデフォルトゲートウェイを見に行ってしまっているからです。
そこでSoftEtherサーバ側の設定でルーティングをクライアントへ指示するよう設定します。
SoftEther VPNサーバー管理マネージャを開き、該当のVPNサーバーへ接続。
仮想HUBの管理 > 仮想NATおよび仮想DHCPサーバ機能 > SecureNATの設定 > プッシュする静的ルーティングテーブルの編集へと進みます。
ここに該当のサブネットへのルーティング設定を追記しましょう。
サブネットのアドレス/サブネットマスク/仮想ホストのネットワークインターフェースのIPアドレス
クライアントマシン側に戻り、VPN接続を確立後、route printコマンドを実行すると以下のようになります。
=========================================================================== IPv4 ルート テーブル =========================================================================== アクティブ ルート: ネットワーク宛先 ネットマスク ゲートウェイ インターフェイ ス メトリック 0.0.0.0 0.0.0.0 192.168.11.1 192.168.11.4 20 0.0.0.0 0.0.0.0 192.168.30.1 192.168.30.11 60 10.20.31.0 255.255.255.0 192.168.30.1 192.168.30.11 31 ...
通常のゲートウェイが優先で、VPN接続先のサブネットへのルーティングもちゃんと追加されています。
クライアントマシンからpingコマンドを実行すると接続できることが確認できます。
また、ブラウザから外部アドレスへのアクセスも問題ないことを確認しておきます。
https://www.google.co.jp
問題なくグーグル様のページが開きましたでしょうか?
以上でVPN接続の基本的な設定が終わりました。
少し長い記事になってしまいましたが何かのお役に立てれば幸いです。
アウトバウンド側のセキュリティを絞るリスクについて
ちなみに、VPNサーバに対してアウトバウンドのセキュリティを絞るとこのVPNサーバをNATインスタンスとしても使いたい場合、うまく動かなくなるケースがあります。たとえば、プライベートサブネット上のEC2からyum update/installする際などのHTTPアクセスができなくなります。ポートの絞り込みには十分注意してください。