MK's-Lab

日々のはてなな用語を調べてメモるブログです

(検証)リモートVPN環境作成②

スプリットトンネリング構成でトラフィック分離とAzureADの条件付きアクセスの検証

  1. 概要

  2. 準備

    2-1.概要図

    2-2.登場人物

  3. VPNサーバー作成

    3-1.VPNサーバーのソフトウェアインストール

    3-2.ルーターの設定

    3-3.VPNのエージェントのインストール、設定

    3-4.VPNでの社内アクセス、インターネットアクセスの確認

  4. クラウドプロキシとの併用設定

    4-1.クライアントマシンにVPNのスプリット設定

    4-2.AzureADの条件付きアクセスを使用(M365の認証用のトラフィックVPN経由にする)

    4-3.想定通り通信ができているかの確認

  5. まとめ

4.クラウドプロキシとの併用設定

4-1.クライアントマシンにスプリット設定

※先日の続きです(概略図を少し変更してみました)

クライアントにVPNのスプリットにする設定をします。 コマンドプロンプトで"route print"をすると以下の様に表示されます。

ここで「コントロールパネル」>「Network Sharing Center」>VPNのアダプタをクリック

「Properties」>「インターネットプロトコルバージョン4(TCP/IPv4)」をクリック>「Properties」をクリック

「Advanced」をクリック>下の方に「Automatic Metric」の項目があり、✓が付いているのでそれを外し

internet metricの箇所に20(目安)を入力します。

その後Wifi側のアダプターも上記と同様にinternet metricの箇所まで行き、VPNのMetricよりも低い数字を入れます(10をいれてみた)

その後再度”route print"してみると以下の様にデフォルトゲートが2つになっていて、

Metricが低いWifi側が優先になるので、インターネットのトラフィックVPNにはいかなくなっています。

確認くんで確認してみると家のwifiルーターからインターネットに出ていました。

社内のWebサイトにアクセスするとちゃんとVPNでアクセスしてました。(以下)

ここでインターネットの通信をプロキシ(GCP)を通って行くように設定します。

「コントロールパネル」>「Network and Internet」> 「Internet Options」>「Connections」のタブをクリック

「LAN Settings」をクリックし、Proxy Serverにプロキシのアドレスを入れます。

その後、プロキシのログを見たところ、アクセスログが記載されていました。

4-2.AzureADの条件付きアクセスを使用(M365の認証用のトラフィックVPN経由にする)

M365にかかわらず、SaaSへのアクセスの際に送信元IPアドレスを通知してアクセスを許可しているサービスがあるかと思います。

しかしすべてのトラフィックVPN経由にすると社内のゲートウェイ機器のボトルネックになる可能性があるので、

M365の認証のトラフィックのみをVPN経由にし、それ以外のトラフィックは(GCPのプロキシを通って)直接インターネットを通る設定にしてみたいと思います。

まずはスプリットトンネルで外向けの通信はすべてプロキシに行くようにした状態のままで、M365の認証トラフィックのみをVPN側に入るようにします。

上記のようにPACファイルの場所を指定し、PACファイルの中にM365の認証トラフィックをバイパスする記載をします。

PACはGCP内のPACサーバーに置きました。

function FindProxyForURL(url, host)
{

if (isPlainHostName(host) ||
        isInNet(host, "192.168.0.0", "255.255.0.0") ||
        isInNet(host, "**.222.10.187", "255.255.255.0") ||
        isInNet(host, "***.***.***.**8", "255.255.255.0"))  */VPN Gateway/*
        return "DIRECT";


if (shExpMatch (url, "https://login.microsoft.com/*") ||                                
                shExpMatch (url, "https://login.windows.net/*")|| 
                shExpMatch (url, "https://env.b4iine.net/*")||                              
                shExpMatch (url, "https://login.windows.net/*")||                       
                shExpMatch (url, "https://login.microsoftonline.com/*"))                                
            return "DIRECT";                                                       

      return "PROXY ***.***.247.76:3128";  */Proxy/*


}

ここでM365の認証トラフィックに該当するドメインは以下です。

login.microsoft.com

login.windows.net

login.microsoftonline.com

env.b4iine.netは「確認くん+」です(確認用に追加しています)

PACを設定したところで「確認くん」と「確認くん+」を見てみます。

確認くん

確認くん+

「確認くん」は先ほどと同じようにProxy経由になっています。方や「確認くん+」はバイパス設定したので普通に家のプロバイダーからインターネットに抜けています。

次に「確認くん+」とM365認証トラフィックVPN経由になるようにクライアントの設定をしてあげます。

まずは、M365の認証トラフィックIPアドレス(登録範囲)を調べます。nslookup login.microsoft.com をしてみたり、

以下のサイトで調べると、

20.190.128.0/18、40.126.0.0/18を登録すると良さげなので、試してみます。確認くん+のIPアドレスも調べておきます。

Office 365 の URL と IP アドレスの範囲 - Microsoft 365 Enterprise | Microsoft Docs

コマンドプロンプトを開いて、”route print"を入力しました。

Interface ListのVPN Client Adapterの数値(一番左側)が38となっているのでメモしておきます。

そのままコマンドプロンプト画面で以下の様に入力しました。 (管理者権限でコマンドプロンプトを立ち上げます)

route add 20.190.128.0/18 mask 255.255.255.255 192.168.100.1 metric 1 if 38

route add 40.126.0.0/18 mask 255.255.255.255 192.168.100.1 metric 1 if 38

route add 150.95.55.170 mask 255.255.255.255 192.168.100.1 metric 1 if 38

登録した後に再度確認くん+を見てみたところ、以下の様にちゃんとVPN経由になっていました。

これできっとM365の認証トラフィックVPN経由になっているのかと思います。

次にAzureの条件付きアクセスの設定でVPNゲートウェイIPアドレスがロケーション登録されていること、

そしてそのIPアドレスからのアクセスのみがM365ログイン認証できること、

M365の認証アクセス以外のインターネット通信はクラウドプロキシ(GCP)を経由すること、

上記を確認したいと思います。

ということでAzureADのポータルで設定していきます。

ところがポータルを開いたところ、Azureプレミアムの無料試用期間が切れてしまっていました・・・。

もう一度無料期間の申請をしてみましたが、当然ですが有効にできず。

再度Azureの無料アカウントを作成するのも大変なので、何とかならないかといろいろ試行錯誤していたところ、

M365管理センターからAzureADのP1ライセンスのみの試用ができる(1か月)ことがわかったので、登録してみました。

9月21日まで使えるらしいです。

早速こちらで条件付きアクセスを試したいと思います。

Azureポータルの条件付きアクセス画面に戻ると、先ほどはグレーアウトされていた「+新しいポリシー」が追加できるようになってました!

AzureADの「条件付きアクセス | ネームド ロケーション」の箇所にVPNゲートウェイIPアドレスを登録します。

次に「条件付きアクセス | ポリシー」で「+新しいポリシー」を作成します。

名前はわかりやすく「VPN経由のM365認証トラフィック」とつけてみました。

ポリシーの内容ですが、「すべてのユーザー」を選択、クラウドアプリは「O365」を選択しました。

条件ですが、「すべての場所 かつ すべての信頼できる場所 件を除く」を選択しています。 つまり、すべての場所(IPアドレス)が条件つきアクセスの対象だけれど、”信頼できる場所として登録した”VPNIPアドレスは制御の対象から除く、という設定です。 分かりにくいですね。。。

アクセスの制御は「アクセスのブロック」を選択し、保存します。

4-3.想定通り通信ができているかの確認

設定したら早速M365にログインしてみます。

VPNがONでプロキシ(PAC)が設定されているとき】

問題なくM365にアクセスできました。

AzureADのアクセスログを見てみると、状態が「成功」となっています。

詳細を見てみると、(場所のポリシーが)”一致しません” となっていて、

”信頼できる場所が除外されました”と書いてあるので、登録済みのVPNIPアドレスからのアクセスなのでログインできた、ということですね。

VPNがOFFでプロキシ(PAC)が設定されているとき】

同じようにM365にログインしてみました。が、今度はログインできませんでした。

ログを見ると、状態は「失敗」になっており、(場所のポリシーに)一致した、と記載があるので、条件付きポリシーは効いているようです。

このあとPACファイルの設定を外してVPNがON/OFFでM365のアクセスを試しましたが、条件付きアクセスに一致して、ログインはできませんでした。

5. まとめ

社内への通信はVPNアクセス、 社内を経由させたい(送信元IPを固定させたい)SaaSアクセスもVPN経由でアクセス、 それ以外の野良インターネットは直接アクセスできるが、GCPのプロキシを経由させてログは取るようにする、

という設定でした。

一点気になったのが以下の様に、

PACでバイパスさせた(つもりの)login.microsoftonline.comのドメインがプロキシログに出てきてました。

PACの設定がちゃんとできていないのかが謎です。

M365のアクセス制御はできていたので、上記についてはまた今度調べます。