aska_azure_force_internet_traffic_through_onprem

在建好 Azure 與地端的 Site to Site VPN 後,心中有了一個大膽的想法

因為在預設狀況下, Azure 上的資源都是直接從雲端上 Internet,是否有可能強制走 VPN 從地端出去呢? 幾番測試研究後,終於實做出來。

[警語] 請務必閱讀完,瞭解設定後的狀況

設定方式如下

在 Azure Site to Site VPN 確認如同前文已設定好的環境下,到區域網路閘道 (Local Network Gateways) 的「組態」,新增如下兩筆的「位址空間」。
aska_azure_set_lgw_address_space_for_redirect_traffic

接著,由於最終是希望 Azure VM 能透過地端上網,所以請務必在地端對相關設備,如防火牆或交換器等設定 Policy 及路由。

以我的測試環境來說,只須在 Fortigate 防火牆上設定一組 Azure VNet 對 Wan 的 Policy,並且務必啟用「NAT」,就打完收工。
aska_azure_set_fortigate_policy_for_redirect_traffic

進行連線測試
可以發現外部 IP 已經變成中華電信所屬,連 Traceroute 的 ICMP 封包都正常從地端繞出去 (Azure 環境會封鎖 ICMP 封包)。
aska_azure_vm_test_for_redirect_traffic

重點來了!!!

雖然 Azure VM 已經成功走 VPN 從地端上網,但...
從此,在該虛擬網路環境的資源也無法再透過 Azure 端外部進行存取

簡單舉例,無法用該 VM 在 Azure 端的 Internet IP,用遠端桌面或連線到 Web 網站,也就是最上方的架構圖呈現。

後記

在 Azure 區域網路閘道的「位址空間」,我認為就是種路由資訊的概念,但預設會偵測並禁止「0.0.0.0/0」這樣的設定,也就是一般認定的 any 或 all。
aska_azure_set_error_in_lgw_address_space

也因為上面的錯誤提示,讓我進一步思考,如果 Azure 禁止設定「0.0.0.0/0」,那我有可能設定「0.0.0.0/1」嗎?

沒想到還真的可以,所以只要再補另一半的「128.0.0.0/1」位址空間,就跟設定單筆的「0.0.0.0/o」就意思一樣了。

Azure 虛擬網路對於路由有蠻詳細的說明,推薦參考延伸閱讀的資訊。

延伸閱讀
Azure 文件 - Virtual network traffic routing:0.0.0.0/0 address prefix (中文)
Azure 部落格 - Use port pings instead of ICMP to test Azure VM connectivity