前言
文章《使用 PsPing & PaPing 進行 TCP 端口連通性測試》中提到,ICMP 協議的數據包無法通過 Azure 的防火牆和負載均衡器,所以不能直接使用 Ping 來測試 Azure 中的虛擬機和服務的連通性。實際上,我們仍然能夠通過一些特殊設置,使 ICMP 協議的數據包能夠進出 Azure 中的虛擬機,來完成 Ping 測試。針對 Azure 雲服務管理器 (ASM) 和 Azure 資源管理器 (ARM) 中的部署,設置方法有所不同,下文將分別進行介紹。
ASM 虛擬機的設置方法
ASM 中的虛擬機開放 Ping 功能的方法就是為其添加 ILPIP(Instance-Level Public IP,實例級公共 IP)。開啟 ILPIP 后,訪問虛擬機的流量不經過雲服務和負載均衡器。虛擬機所有的端口都是直接暴露在公網上的,因此也就解開了對 ICMP 包傳遞的限制。
ASM 中的虛擬機設置 ILPIP 的途徑有兩種。
您可以使用 Powershell 命令,為虛擬機添加 ILPIP。具體步驟請參考:實例級公共 IP(經典)概述
您也可以在 Azure 門戶中,通過頁面中的選項來開啟虛擬機的 ILPIP 功能。大致步驟是在 Azure 門戶中選擇 虛擬機(經典),緊接着選擇要設置 ILPIP 的虛擬機,然后再選擇 IP 地址 選項,最后在實例 IP 地址 功能中點擊 開,並保存。具體位置見下圖。
保存並更新需要2~3分鍾。完成后重新點擊 IP 地址 選項,即可在右邊看到新設置的實例 IP 地址。
這樣設置雖然簡便,但是虛擬機的所有端口通過 ILPIP 直接面向公網,所以有一定的安全隱患。您需要在虛擬機中配置相應的防火牆規則,來增強對虛擬機的安全防護。您也可以參考后文對 NSG 的相關介紹來配置安全規則。
在默認情況下,每個訂閱能夠設置 5 個 ILPIP。如果需要更多,您可以與支持人員聯系,請求增加 ILPIP 的配額。當然,我們更推薦部署 ARM 模式下的虛擬機。ARM 模式下每個訂閱的每個區域的能獲得的公共 IP 數量更多。詳見:Azure 訂閱和服務限制、配額和約束, 網絡限制 - Azure Resource Manager。
ARM 虛擬機的設置方法
ARM 中的虛擬機開放 Ping 功能有兩個配置步驟。其一是虛擬機配有公共 IP。如果只是從 Azure 中的虛擬機向外 Ping,那么只配置這一步即可。如果需要從外部網絡來 Ping Azure 中的虛擬機,則需要配置虛擬機對應的 NSG 規則,使其允許 ICMP 協議包傳輸。
配置公共 IP
公共 IP 可以在 Azure 門戶中創建虛擬機時,同時創建。如果創建虛擬機時沒有配置公共 IP,您也可以在虛擬機創建好以后,再為其添加。 在創建虛擬機的第 3 步,配置可選功能中,可以新建公共 IP,或者選擇已有並且可用的公共 IP。
如果虛擬機創建時沒有配置公共 IP,那么在虛擬機的概述頁面中,公共 IP 地址會顯示 " - ",如下圖:
此時,我們可以為其添加公共 IP。
在虛擬機視圖中,選擇 網絡接口,並在右側選擇要配置公共 IP 的接口。
在網絡接口視圖中,選擇 IP配置,並在右側選擇要求改的 IP 配置。此時在 IP 配置的修改頁面就能看到 公共 IP 地址設置 了。
在 公共 IP 地址設置 中,點擊 已啟用,隨后的步驟就與創建虛擬機同時創建公共 IP 一樣了。您可以新建公共 IP,或者選擇已有並且可用的公共 IP。如果是新建,還可以選擇公共 IP 的 分配 方式,動態 或 靜態。
最后點擊 確定,並 保存,配置公共 IP 的任務就在 Azure 的任務隊列中運行了。
任務完成后,就能在 IP 配置中看見獲取到的公共 IP 地址了。
在虛擬機的概述中,也能看到 公共 IP 地址/DNS 名稱標簽 的值了。
配置 NSG 規則
NSG 規則同樣可以在創建虛擬機時配置,也可以為已經部署的虛擬機配置。這里用為已部署的虛擬機配置 NSG 規則為例。
在虛擬機網絡接口視圖中,選擇 網絡安全組,並點擊要配置的網絡安全組。
在網絡安全組視圖中,點擊 入站安全規則,並點擊右側的 添加。
此處添加了一個名為 AllowAll,優先級為 4096(最低優先級),源和協議都是 Any,端口范圍是" * ",操作為 允許 的 NSG 規則, 完成后點擊 確定。
Azure 后台任務完成后,我們就能看到這條新添加的規則了。
此時,我們就可以用 Ping 來測試這台虛擬機了。
Note
這樣配置 NSG 雖然開放了 ICMP 協議的通信,但是實際上這台虛擬機所有 TCP、UDP 的端口也都暴露在了公網上,有安全隱患。
更安全的 NSG 配置
更安全的做法是,分別配置兩條針對 TCP 和 UDP 的 DenyAll 的規則,優先級采用 4094 和 4095 ,然后為虛擬網絡和 Azure 負載均衡器分別添加兩條 AllowAll 的規則,優先級采用 4092 和 4093。最后為需要開放的端口配置更高優先級的規則。
這樣既開放了需要的端口和 ICMP 規則,也又避免了其他端口被攻擊的危險。如下圖所示,我開放了 TCP-22 端口和 ICMP,同時允許虛擬網絡和 Azure 負載均衡器與虛擬機的內部通信,其他所有訪問都被 NSG 規則拒絕。如果還要添加新的端口,新建優先級高於 4092 的規則就可以了。
其實虛擬網絡和 Azure 負載均衡器的規則已經在默認規則(點擊 默認規則 可以查看)里自動創建了,只不過優先級很低,分別為 65000 和 65001。所以我們需要再為它們創建優先級高於 DenyAllTCP 和 DenyAllUDP 的規則。
以上介紹的是為虛擬機添加 NSG 規則。其實虛擬網絡子網也可以添加 NSG 規則,這里不贅述。如果您測試時發現在虛擬機的NSG中配置的規則沒有生效,您可以檢查一下虛擬網絡子網對應的 NSG 規則是否對其有影響。當然,虛擬機內部通常也有防火牆。例如 Windows Server 虛擬機,默認入站的 ICMP 包也是被禁止的,所以在 Ping 測試虛擬機時,也要檢查一下虛擬機內部的防火牆有沒有創建對應的規則。
立即訪問http://market.azure.cn