前言

文章《使用 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

如何开放 Azure 虚拟机 Ping 功能的更多相关文章

  1. 【虚拟机-网络IP】如何开放 Azure 虚拟机 Ping 功能

    前言 文章<使用 PsPing & PaPing 进行 TCP 端口连通性测试>中提到,ICMP 协议的数据包无法通过 Azure 的防火墙和负载均衡器,所以不能直接使用 Ping ...

  2. 利用Azure backup备份和恢复Azure虚拟机(1)

    中国区Azure最近发布了关于使用Azure Backup来备份VM服务,于3月1日正式上线,该功能对于需要对关键工作负载进行备份的用户来讲,极大的降低了操作复杂度.以前我们所使用Powershell ...

  3. 在 Windows Azure 虚拟机中使用 Microsoft SQL Server 安全功能

    编辑人员注释:本文章由 SQL Server 团队高级项目经理 Sung Hsueh 撰写. SQL Server 的最新用法之一是利用 Microsoft 的 Windows Azure 基础结构服 ...

  4. Python 加持,给你更有趣的 Azure 虚拟机开关重启方法!

    在程序员的世界里,有关编程语言孰优孰劣的争论从来就没有消停过,不管你更粉哪种语言,毫无疑问,每种语言都有自己擅长的领域,而一些语言因为上手简单.扩展性强.功能强大等因素,往往会比较多地出现在我们面前, ...

  5. Windows Azure 虚拟机备份

    如果我们要在Windows Azure的虚拟机上进行一些“重要且高危”的操作,我们通常会想到使用快照或者备份功能.但是在Windows Azure上是没有虚拟机快照功能的,尽管我们可以对虚拟机的磁盘文 ...

  6. 使用Windows Azure PowerShell远程管理Windows Azure虚拟机

    对于Windows Azure,如果你还在使用windowsazure.com门户来管理虚拟机,那就显得不怎么高上大了.Windows Azure PowerShell 是一个功能强大的脚本环境,可用 ...

  7. Windows Azure 不能ping通的解决方案

    Windows Azure 不能ping通如何解决? 为了避免Ping Flood攻击,Windows Azure不开放对外ICMP通讯协定,所以使用ping命令我们是无法ping通的.在微软资料中心 ...

  8. Azure Site Recovery 通过一键式流程将虚拟机故障转移至 Azure虚拟机

    Ruturaj Dhekane 云 + Enterprise 项目经理  现在,AzureSite Recovery可以通过其"灾难恢复至 Azure"功能保护您的工作负荷,并 ...

  9. Azure 虚拟机常见问题-上

    在 Azure 虚拟机上可以运行什么? 所有订户均可在 Azure 虚拟机上运行服务器软件.此外,MSDN 订户还可以访问由 Azure 提供的特定 Windows 客户端映像. 就服务器软件来说,你 ...

随机推荐

  1. 关于Manjaro与Ubuntu双系统并存引发的一个boot问题

    事情发生在写下这篇博客的半小时前.笔者的电脑本身是Manjaro+win10双系统并存,因为一些原因要安装ubuntu. 装完ubuntu用了一阵子,想切回manjaro,于是遇到了这个问题. 看到k ...

  2. 【算法笔记】B1001 害死人不偿命的(3n+1)猜想

    1001 害死人不偿命的(3n+1)猜想 (15 分)卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复砍 ...

  3. 洛谷 P3239 [HNOI2015]亚瑟王(期望dp)

    题面 luogu 题解 一道复杂的期望\(dp\) 思路来源:__stdcall 容易想到,只要把每张牌打出的概率算出来就可以求出\(ans\) 设\(fp[i]\)表示把第\(i\)张牌打出来的概率 ...

  4. [USACO12FEB]牛的IDCow IDs 一题多解(求二进制中有k个1 ,第n大的数)

    题目: FJ给他的奶牛用二进制进行编号,每个编号恰好包含K 个"1" (1 <= K <= 10),且必须是1开头.FJ按升序编号,第一个编号是由K个"1&q ...

  5. [原创]Aop之使用Autofac+Castle 自动注入服务且动态代理服务实现拦截(非MVC控制器拦截)

    public static class AutofacComponentManualRegister { /// <summary> /// 注册 /// </summary> ...

  6. java - list 报java.lang.UnsupportedOperationException

    情景 现在有个数组,比如:String[]  array = new String[]{"1","2","3"}; 我们想要往这个数组中添加 ...

  7. java se系列(二) 关键字、注释、常量、进制转换、变量、数据类型转换、运算符

    1 关键字 1.1 关键字的概述 Java的关键字对java的编译器有特殊的意义,他们用来表示一种数据类型,或者表示程序的结构等,关键字不能用作变量名.方法名.类名.包名. 1.2 常见的关键字 备注 ...

  8. IDEA 中tomcat启动问题时,一直出去发布状态,无法加载项目

    解决方法:排查clean.build之前添加的xml中的sql语句,发现sql多写了一个逗号,导致无法加载项目.修改完sql,就可以跑了.

  9. 案例47-crm练习登录校验拦截器

    1 LoginInterceptor package www.test.web.interceptor; import java.util.Map; import com.opensymphony.x ...

  10. D3(v5) in TypeScript 坐标轴之 scaleBand用法

    在学习d3时候,发现在TS中实现D3的坐标轴中遇到一些错误,而这些错误却不会存在于js(因为ts的类型检查)写法中,因此做下笔记: import * as d3 from 'd3';import * ...