在Azure上,Ubuntu虚拟机的Ping命令无法正常工作

4

我在Azure上创建了两个Ubuntu虚拟机,我可以使用“ssh azureuser@xyz.cloudapp.net”从一个虚拟机登录另一个虚拟机,但是从一个虚拟机ping另一个虚拟机没有响应,curl也是一样。

ping xyz.cloudapp.net 
curl xyz.cloudapp.net 

修改 /etc/hosts 文件并将虚拟机的内部 IP 地址添加进去也不起作用。
4个回答

5
Azure阻止ICMP(Ping)的传输,因此根据设计原则这将失败。您可以在取决于您如何设置网络以及您要ping的内容的情况下使其生效。有关更多详细信息,请参见https://social.msdn.microsoft.com/Forums/en-US/0669112c-a6dd-4290-bcde-9ce7b9d60d80/how-do-i-enable-pinging-a-vm
•从Azure VM Ping外部地址 - 无法工作,因为Azure不允许出站ICMP
•从外部地址Ping Azure VM - 无法工作,因为Azure不允许入站ICMP
•使用内部IP(DIP)在Azure VM之间Ping - 可行,但默认情况下guest OS防火墙会阻止ICMP,必须对其进行配置以允许它。
•通过Azure Connect(点对点IPSec VPN隧道)或Virtual Network Gateway(站点到站点IPSec VPN隧道)在Azure VM和本地网络之间ping - 可行,但默认情况下guest OS防火墙会阻止ICMP,必须对其进行配置以允许它。
要在Windows VM上允许ICMP,从提升的命令提示符处运行:
netsh advfirewall firewall add rule name="ICMPv6" dir=in action=allow enable=yes protocol=icmpv6 netsh advfirewall firewall add rule name="ICMPV4" dir=in action=allow enable=yes protocol=icmpv4
更新2021:自2021年起,您可以通过打开ICMP端口来ping到您的Azure虚拟机。只需转到Azure门户>虚拟机>选择您的虚拟机>网络>添加入站端口规则>选择协议下的ICMP(根据您的需求进行自定义)>添加。

1
你可以尝试使用hping3命令在指定端口上ping主机。
sudo apt-get install hping3
root@compare:~# sudo hping3 -S -p 80 google.com
HPING google.com (eth0 216.58.196.174): S set, 40 headers + 0 data bytes
len=44 ip=216.58.196.174 ttl=53 id=20026 sport=80 flags=SA seq=0 win=42900 rtt=32.8 ms
len=44 ip=216.58.196.174 ttl=53 id=34969 sport=80 flags=SA seq=1 win=42900 rtt=36.6 ms
len=44 ip=216.58.196.174 ttl=53 id=14912 sport=80 flags=SA seq=2 win=42900 rtt=32.6 ms
len=44 ip=216.58.196.174 ttl=53 id=60826 sport=80 flags=SA seq=3 win=42900 rtt=32.5 ms
len=44 ip=216.58.196.174 ttl=53 id=5138 sport=80 flags=SA seq=4 win=42900 rtt=32.3 ms
^C
--- google.com hping statistic ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 32.3/33.4/36.6 ms
root@compare:~#

此外,我们可以从外部进行检查: root@mail:/home/hrishi# sudo hping3 -S -p 80 1we1.cloudapp.net HPING 1we1.cloudapp.net (eth0 23.97.74.251): S set, 40 headers + 0 data bytes len=46 ip=23.97.74.251 ttl=50 DF id=0 sport=80 flags=SA seq=0 win=29200 rtt=111.9 ms len=46 ip=23.97.74.251 ttl=50 DF id=0 sport=80 flags=SA seq=1 win=29200 rtt=112.7 ms ^C --- 1we1.cloudapp.net hping 统计 --- 已发送 2 个数据包,已接收 2 个数据包,丢失率为 0% 往返最小时延/平均时延/最大时延 = 111.9/112.3/112.7 ms root@mail:/home/hrishi# - Hrishi

0

更新 2021: 从2021年开始,您可以通过打开ICMP端口来ping您的Azure虚拟机。
只需前往Azure门户 > 虚拟机 > 选择您的虚拟机 > 网络 > 添加入站端口规则 > 在协议下选择ICMP(根据您的需要进行自定义)> 添加


0

2022年更新
要以标准用户身份启动ping,请使用计数-c选项ping -c 4 google.com,或者通过添加SUID位更改/bin/ping的文件权限。

在UBUNTU 20.04或22.04上的Azure虚拟机上,ping程序具有以下权限:
ls -la /bin/ping
-rwxr-xr-x 1 root root 72776 Jan 30 2020 ping*
因此,为了运行ping,您必须拥有root特权。

这意味着如果您提升特权到root,则可以使用ping
$ sudo su
# ping google.com
PING google.com (142.251.36.14) 56(84) bytes of data.
64 bytes from ams15s44-in-f14.1e100.net (142.251.36.14): icmp_seq=1 ttl=56 time=2.42 ms
CTRL-C退出。

Azure VM上的ping还可以通过另外两种方式完成:

  1. 作为普通用户,使用-c计数选项
    $ ping -c 4 google.com

  2. 通过更改ping文件的SUID位,每个用户都将以root权限运行ping程序
    # chmod 4755 /bin/ping
    然后,您可以使用普通用户权限进行ping操作
    $ ping google.com


应该使用setcap而不是suid位,以允许仅限于需要的特定子集的根权限(例如setcap cap_net_raw+ep /bin/ping)。 - Mika Vatanen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接