在 Linux 上,使用主机名进行 Ping 无法工作,如何使用 Azure 方法解决此问题?

在 Linux 上,使用主机名进行 Ping 无法工作,如何使用 Azure 方法解决此问题?

当我在任何地方的 AWS/本地 VMWare 或 virtualbox 上安装 Linux VM(比如 Ubuntu)时,我无法直接使用主机名将我的机器与另一台机器 ping 通,我只能使用 IP 地址来 ping。

无论我是否安装了 wins 或任何其他软件包,问题仍然存在。

它仅适用于 hosts 文件中的手动输入。

但是,如果我在 Azure 上安装 Linux VM,它就可以直接 ping 另一台 Linux 机器。

那么,有人可以请问它是如何与 Azure 协同工作的吗,以便我也可以在其他基础设施上实现相同的功能。

查看我的 Azure 机器上的一些配置:

uday@linux2:~$ uday@linux2:~$ cat /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat systemd
group:          compat systemd
shadow:         compat
gshadow:        files

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files


uday@linux2:~$ cat /etc/hosts
127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

而且,在 hosts 文件中添加条目并不是一个适合此目的的选项,因为创建的用于参考的 Azure VM 没有任何 hosts 文件条目。而且,我们计划实施的基础设施将拥有超过 1000 台 Linux 机器,因此不适合添加 1000*1000 个机器条目。

这是resolv.conf的内容:

uday@linux1:~$ cat /etc/resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
#
# Run "systemd-resolve --status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.

nameserver 127.0.0.53
options edns0
search oank4c5w4pluni24escinpevlb.bx.internal.cloudapp.net

答案1

Azure 仅使用 DNS。每个 VM 都有自己的子域,例如,我的新 VM 名为“test”,实际上是test.bgi0vih2qcgezm5pktjeqarz2g.ax.internal.cloudapp.net在 Azure 的内部 DNS 服务中称为。(他们的 VM 创建系统会根据需要自动添加和删除 DNS 条目。)

您可以通过运行来查看此全名hostname -f,或者将输出与hostname在中找到的“搜索”行结合起来/etc/resolv.conf


DNS 是其他 VM 托管类型的最通用解决方案,如果您有数千台 VM,则它是唯一可扩展的协议。一些“云”提供商已经支持它,在其他提供商中,您可能能够编写自动更新脚本(例如,如果您的基础设施域使用 BIND 9 托管,则可以通过 提交更新nsupdate)。

与此同时,NBNS(由“wins”模块使用)可能是您最糟糕的选择。它是旧 NetBIOS 协议的一部分;它使用 IP“本地广播”消息,这在许多云提供商上可能不起作用,并且在 Windows 上甚至依赖于 SMBv1 支持。

mDNS(由 Avahi 提供)和 LLMNR(由 systemd-resolved 提供)是更加现代和轻量级的协议,但它们仍然存在一些与 NBNS 相同的问题:它们使用 IP 广播,只能在单个子网内工作,并且它们可能无法扩展到几百个系统之外。

相关内容