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

プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

リモートアクセスVPNの設定 (4/4) - VPNクライアント の設定

ツール SoftEther VPN

前回の『SoftEther VPN Server の設定』の続きです。

 

リモートアクセスVPNの設定 (1/4) - SoftEther VPN Server のインストール

リモートアクセスVPNの設定 (2/4) - NICの追加

リモートアクセスVPNの設定 (3/4) - SoftEther VPN Server の設定

リモートアクセスVPNの設定 (4/4) - VPNクライアントの設定←ここ
 

VPN Azureのページにあるように、VPN Azure ではクライアントに特別なソフトのインストールは不要で、Windows標準のVPN機能で接続できます(クライアントのOSがWindows Vista以降の場合)。なので、ここではWindows7のノートPCでセットアップしてみます。

 

なお、以下で接続のテストをする際の環境は、

自宅内のLAN: 192.168.0.0/24

ノートPC:192.168.13.0/24, 無線LAN経由でインターネットに接続

となっています。

 

Windows7でのセットアップ

最初に、『コントロールパネル』→『ネットワークと共有センター』→『新しい接続またはネットワークのセットアップ』を選択します。ここで、『職場に接続します』を選択して、『次へ』ボタンを押します。

 

 

接続方法を聞かれるので、『VPNを使用して接続』を選択します。


 

インターネットアドレスに、サーバーの設定で決めた ダイナミックDNSホスト名+『.vpnazure.net』を入力します。

 

サーバー設定で作成した接続ユーザー名及びパスワードを入力します。

 

接続のテスト

設定はこれだけです。この画面で『接続』ボタンを押すと、早速接続が開始されます。

 

接続が完了すると

 

のような画面が表示され完了です。

 

VPN接続の確認

設定に不備がなkれば、VPN接続はあっけないくらい簡単に終わってしまいます。

なので、本当に接続できているか確認しておきます。

 

まずは、ipconfigを確認します。

 

VPN接続に対して、192.168.0.xのIPアドレスが割り振られていることが分かります。一方、無線LANインターフェースには、192.168.13.xのIPアドレスが割り当てられています。

 

エクスプローラを開いて、自宅内のファイルサーバー(NAS)を開いてみます。ホスト名でのアクセスは失敗したのですが、IPアドレスを直接入力すると問題なく接続できました。

 

ルーティングの確認

ブラウザで、www.google.co.jp などを適当に開いてみると、特に問題もなく開けます。

ちなみにこの場合のルーティングテーブルを確認すると、

 

のようになっています。

外部へのルートが2つあり、無線LAN経由のもの(一番上のルート)とVPN接続経由のもの(2番目のルート)があります。VPN接続経由のほうがメトリックが小さいのでこちらが優先されています。

また、nslookupを起動してみると、VPN接続側(自宅内)のDNSサーバーのIPアドレスが返ってきました。

 

つまり、自宅にあるインターネット回線を使った通信になっているようです。

実は、このあとしばらく試していると、うまく外部に接続できなくなるときがありました(結局、詳細は不明でした)。

 

なんにせよ無線LAN経由で外部から自宅に接続するときに、自宅経由でネット上のサイトをみる必要は(日本国内なら)ほぼないと思うので、ルーティングテーブルを変更して無線LAN経由にする設定も確認しておきます。
 

ルーティングの見直し(スプリットトンネリングの構成)

ここでは、自宅内へのアクセスはVPN接続を使い、インターネット上のサイトへのアクセスには無線LANをする設定を確認しました。参考にしたのは下記のサイトです。

 

VPN接続時にブラウザやメール・アクセスがエラーになる

リモート ネットワークでデフォルト ゲートウェイを使用

インターネットおよびイントラネットへの同時アクセスのためのスプリット トンネリング

 

方法としては、VPN接続時に、デフォルトゲートウェイを変更しないように設定します。

 

まず、『コントロールパネル』→『ネットワークと共有センター』→『アダプターの設定の変更』を選択します。VPN接続を選択し、プロパティを表示させます。


 

『ネットワーク』タブの『インターネットプロトコルバージョン4)を選択し、プロパティを表示させます。

 

『詳細設定』ボタンを押します。

 

『IP設定』タブの『リモートネットワークでデフォルトゲートウェイを使う』を変更します。デフォルトではここにチェックが入っている(有効)ので、チェックをはずします(無効にする)。上記画面はデフォルトの状態のときのものです。

これで、OKボタンを押します。

 

再度SoftEther VPN Server に接続してみます。接続後のルーティングテーブルを見ると

 

となり、デフォルトゲートウェイが無線LANのままになっていることがわかります。当然、ブラウザでwww.google.co.jpなどを開いても快適にみることができます。

 

スプリットトンネリング設定時のDNSについて

スプリットトンネリングを構成した時、DNSサーバーはどうなっているのかを調べてみます。

 

nslookup を対話モードで起動して、デフォルトサーバを確認すると、自宅内のDNSサーバーのIPアドレス(VPN先のDNSサーバー)が表示されていました。また、DNSサーバーの状態を見ると、VPN接続のDNSが一番優先して使われているようです。

 

つまり、DNSによる名前解決がVPN内のサーバーを見に行き、ネットワークアクセスは無線LANを使っている状態になっています。

 

ちょっと気持ち悪いのでDNSも無線LANを見に行くようにしたいと思います。

ただ、『Windows VPN Client and local DNS resolution』や『VPN Connection causes DNS to use wrong DNS server』にあるように、Windows7のDNSクライアントではこの設定を簡単に変更することができないようです。これらの記事では自動的にDNSを切り替えるためにレジストリを編集する方法を示しています。

 

まあ、自動での切り替えにこだわらなければ、VPN接続後に手作業でDNSサーバーを見に行くようにすれば設定変更が可能です。

Prevent VPN from changing DNS on Windows 7 / 8 developer preview』や『VPN client's DNS takes over』にあるように、VPN接続で最初に使用するDNSサーバーを、無線LANのDNSに変更してしまえばよいということになります。

 

まず、VPN接続の名前(ここでは『VPN 接続』)と、無線LANのDNSサーバーのIPアドレス(ここでは192.168.13.1)を調べておきます。

次に、管理者権限でコマンドプロンプトを実行し、

C:Windowssystem32>
C:Windowssystem32>netsh interface ipv4 add dnsservers "VPN 接続" 192.168.13.1
index=1 validate=no


C:Windowssystem32>

とします。

その結果、『VPN 接続』で見に行くDNSサーバー設定が変更され、1番目にみるサーバーとして無線LANのDNSサーバー(192.168.13.1)になっていることがわかります。

 

また、nslookupでも、DNSサーバーのIPアドレスが替わっているのがわかります。

若干手作業が必要ですが、これで問題なくDNSサーバーを変更できます。
 

その他の設定

リモートアクセス時のデフォルトルートは上記のように2つ選択枝ができました。状況に応じて使い分ければよいかと思います。

その他の設定として、『セキュリティ』タブの『VPNの種類』で、接続時のVPNの種類として『SSTP』を選択しておきます。デフォルトだと『自動』が選択されており、複数のプロトコルを試すので接続に時間がかかるためです。

 

 

SoftEther VPN は結構機能が豊富なので、いろいろと試していきたいと思います。

 

その他の接続方法についての検討(その1)

VPN Azure 経由だと速度が遅いかな?と思うときもあるので、一度 SoftEther VPN Client を試してみたいと思います。

これを使った場合、VPN Azure を経由しなくても、NATトラバーサル機能により自宅内に設置したSoftEther VPN Serverに接続できるそうです。ただ、SoftEtherのドキュメント上はNATトラバーサルとだけ触れられており詳しい動作は不明です。

 

一応、VPN Azureのページの『よくある質問と回答』の部分でNATトラバーサルのことを『UDPホールパンチング』とも言っているので、これについて調べてみました。Wikipediaに一般的なUDPホールパンチングについての解説があり、これによると外部のサーバーを使ってUDPポートの番号を教えあうような動作をするようです。

 

SoftEther VPNもこの動作を行っていると推測すると、ルータに明示的に固定的なポート番号をあけるわけではなく、こっそりとポート番号を教えあう方法なので、この方法でもいいかなと感じています。

試したらまたまとめたいと思います。

 

その他の接続方法についての検討(その2)

VPN Azure のサービス自身は現在、無料で運営されていますが、将来どうなるかは分かりません。そのときに備えて、SoftEther VPNのドキュメント『11.2.2 プライベート IP アドレスしかない拠点へ VPN 接続する方法』でも触れているように、インターネット上にSoftEther VPN Server を設置して、自宅からこのサーバーへブリッジ接続することでルータに穴を開けずにリモートアクセスを可能にする方法も検討したいと思います。

以前OpenVPNを使ってこれと同じことをやっていたので、実現はそう難しくないと思っています。こちらも試したらまとめたいと思います。