yamamoWorks

.NET技術を中心に気まぐれに更新していきます

Windows Azure 仮想ネットワーク Point-to-Siteのルーティング問題解決方法

Windows Azure 仮想ネットワークのPoint-to-Site VPNを使ってる方は多いのではないでしょうか。
Point-to-SiteはHTTPSポートを使用するSSTPなので、外部アクセスポートが制限されているような社内からでもVPN接続でき、リモートデスクトップなどが利用できるので大変便利です。

さて、このPoint-to-Siteを使ってAzure環境にVPN接続した際に、クライアントPCから他のインターネットのサイトが見れなくなったり、社内メールサーバとの接続ができなくなったりする事ありませんか?

このような現象が起こる場合、社内ネットワークと仮想ネットワークのアドレス空間が重なっている事が考えられます。

例えば、仮想ネットワークのアドレス空間を「10.0.0.0/8」、Point-to-Site接続のアドレス空間を「172.16.1.0/24」で作っていたとすると、クライアントPCでVPN接続するとルートテーブル(route print コマンド)に『10.0.0.0/8 は 172.16.1.x に向ける』といったエントリーが追加されます。

なので、社内のDNSサーバやメールサーバー、プロキシサーバーなどのアドレスが「10.x.x.x」だとするとアクセスしようとしてもAzure環境の方に行ってしまい正常に機能しません。

この問題はルートテーブルを上手く修正してやれば解決できます。

例えば社内DNSサーバが「10.10.10.10」でAzure上の仮想マシンが「10.0.0.4」だとすると、ルートテーブルを『10.0.0.0/24 は 172.16.1.x に向ける』に修正すれば「10.0.0.x」だけがVPNを通るようになります。
※社内サーバと仮想マシンIPアドレスが重複してたら無理ですが。
※上記ではサブネットマスクを「24」としてますが、環境に応じて適切に。


さて、ここからが本題。

じゃあどうやってルートテーブルを修正するか。
手作業で route delete して route add して… 面倒臭い
ならバッチ化… いや、VPN接続で割り当てられるIPアドレスは毎回変わるし
ならばPowerShellで割り当てられたIPアドレスを取得してゴニョニョ
(↑前はこうやってた)

実は、VPN接続時にルートテーブルに追加されるエントリーがテキストファイルで存在するんです。
Azureポータルから「クライアント VPN パッケージ」をダウンロードしてVPN接続をセットアップした際に、下記のフォルダが作成されます。

%USERPROFILE%\AppData\Roaming\Microsoft\Network\Connections\Cm{仮想ネットワークID}

※仮想ネットワークIDはAzureポータルの仮想ネットワーク ダッシュボードの右隅に表示されています。

このフォルダにある「routes.txt」がその正体です。
このファイルの中身を書き換えてやればルートテーブルに追加されるエントリーを変更できます。
上記の例では

 ADD 10.0.0.0 MASK 255.0.0.0 default METRIC default IF default
           ↓
 ADD 10.0.0.0 MASK 255.255.255.0 default METRIC default IF default

これで、今まで通りにVPN接続すれば問題は解決です。