tsh*_*ang 149 networking
以下是我想使用其主机名访问的机器的详细信息:
$ hostname
hostname
$ cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 hostname.company.local hostname
Run Code Online (Sandbox Code Playgroud)
这是默认的 Debian 6 (Squeeze) 安装,所以我还没有摆弄任何东西。
这是我从一台试图访问上述机器的机器(运行 Debian Unstable)获得的信息:
$ ping hostname
ping: unknown host hostname
$ ping hostname.company.local
ping: unknown host hostname.company.local
$ cat /etc/resolv.conf
nameserver 192.168.2.21
nameserver 192.168.2.51
search company.local
Run Code Online (Sandbox Code Playgroud)
Gil*_*il' 167
在 Internet 上,包括本地网络,机器通过IP 地址相互调用。为了使用机器 B 的名称从机器 A 访问机器 B,机器 A 必须通过某种方式将 B 的名称映射到其 IP 地址。可以通过三种方式在 A 上声明机器名称:
unix.stackexchange.com.有很多方法可以在实践中发挥作用;不可能涵盖所有这些。在这个答案中,我将描述一些常见的情况。
主机文件方法的优点是不需要任何特殊方法。如果您有多台机器,这可能会很麻烦,因为当一台机器的名称更改时,您必须更新每台机器。如果 B 的 IP 地址是动态分配的(这样每次连接到网络时都会获得不同的 IP 地址),则不合适。
主机文件是将名称映射到 IP 地址的简单行列表。它看起来像这样:
127.0.0.1 localhost localhost.localdomain
198.51.100.42 darkstar darkstar.bands
Run Code Online (Sandbox Code Playgroud)
在 unix 系统上,hosts 文件是/etc/hosts. 在 Windows 上,它是c:\windows\system32\drivers\etc\hosts. 几乎每个可以连接到 Internet 的操作系统都有一个类似的文件;维基百科有一个列表。
在 A 的 hosts 文件中添加 B 的条目:
确定 B 的 IP 地址。在 B 上运行命令ifconfig(如果没有找到命令,请尝试/sbin/ifconfig)。输出将包含这样的行:
eth1 Link encap:Ethernet HWaddr 01:23:45:67:89:ab
inet addr:10.3.1.42 Bcast:10.3.1.255 Mask:255.255.255.0
Run Code Online (Sandbox Code Playgroud)
本例中B的IP地址为10.3.1.42。如果有多inet addr:条线路,请选择与您的网卡对应的线路,不要选择lo条目、隧道或虚拟条目。
/etc/hosts超级用户身份进行编辑;请参阅如何以系统管理员 (root) 身份运行命令。如果您有必要的设备,这种方法是迄今为止最简单的。您只需配置一台设备,您的所有计算机都会知道彼此的名称。此方法假定您的计算机通过DHCP获取其 IP 地址,这是计算机在连接到网络时自动检索 IP 地址的一种方法。如果您不知道 DHCP 是什么,他们可能知道。
如果您的网络有一个家庭路由器,它是为连接到该路由器的机器配置名称的最佳位置。首先,你需要弄清楚B的MAC地址。每个网络设备都有一个唯一的MAC地址。在 B 上,运行命令ifconfig -a(如果找不到命令,请尝试/sbin/ifconfig -a)。输出将包含这样的行:
eth1 Link encap:Ethernet HWaddr 01:23:45:67:89:ab
Run Code Online (Sandbox Code Playgroud)
在本例中,MAC 地址是01:23:45:67:89:ab。您必须选择与通过电缆连接到路由器的网络端口相对应的 HWaddr 线(如果您通过 wifi 连接,则选择 wifi 卡)。如果您有多个条目但不知道哪个是哪个,请插入电缆并查看哪个网络设备接收 IP 地址(inet addr下面的行)。
现在,在路由器的 Web 界面上,查找“DHCP”等设置。设置的名称和位置完全取决于路由器型号,但大多数都有一组类似的基本设置。这是番茄固件上的样子:

输入 MAC 地址、IP 地址和所需的名称。您可以选择本地网络地址范围内的任何 IP 地址。大多数家用路由器都针对 192.168 形式的地址范围进行了预配置。×。y或 10. x。y。ž。例如,在上面显示的 Tomato 路由器上,在“网络”选项卡中,有一个值为 10.3.0.1 的“路由器 IP 地址”设置和值为 255.255.255.0 的“子网掩码”设置,这意味着计算机上的本地网络必须具有格式为 10.3.0 的地址。ž。还有一系列自动分配的 DHCP 地址 (10.3.0.129–10.3.0.254);对于您手动分配的 DHCP 地址,请选择不在此范围内的地址。
现在将 B 连接到网络,它应该获得您指定的 IP 地址,并且可以从网络中的任何机器通过指定的名称访问它。
如果您没有功能强大的家用路由器,您可以在任何 Linux 机器上设置相同的功能。我将解释如何使用Dnsmasq设置DNS。还有许多其他类似的程序;我选择 Dnsmasq 是因为它易于配置且重量轻(例如,上面展示的 Tomato 路由器就使用了它)。Dnsmasq 可用于大多数 Linux 和 BSD 发行版,用于 PC、服务器和网络设备。
选择一台始终处于开机状态、具有静态 IP 地址并且运行某种 Linux 或 BSD 的计算机;我们称它为 S(用于服务器)。在 S 上,安装dnsmasq软件包(如果它还没有)。下面我假设配置文件是/etc/dnsmasq.conf; 位置可能因某些分布而异。现在你需要做几件事。
/etc/hosts(请参阅上面的“主机文件”部分),并确保/etc/dnsmasq.conf没有no-hosts取消注释指令。(以 a 开头的行#被注释掉。)您可以将名称放在不同的文件中;如果这样做,请addn-hosts=/path/to/hosts/file在/etc/dnsmasq.conf.告诉 Dnsmasq 如何获取 Internet 上机器名称的 IP 地址。
resolvconf软件包。在最常见的情况下,一切都会开箱即用。如果您的网络管理员或您的 ISP 为您提供了 DNS 服务器的地址,请在 中输入它们/etc/dnsmasq.conf,例如:
server=8.8.8.8
server=8.8.4.4
Run Code Online (Sandbox Code Playgroud)如果您不知道当前的 DNS 设置是什么,请查看文件/etc/resolv.conf. 如果您看到类似nameserver 8.8.8.8的行,请server=8.8.8.8在/etc/dnsmasq.conf. 更改后/etc/dnsmasq.conf,重新启动 Dnsmasq。执行此操作的命令取决于发行版;典型的可能性包括restart dnsmasq或/etc/init.d/dnsmasq restart。
/etc/resolv.conf(以 root 身份),删除每一nameserver行,然后放入nameserver 127.0.0.1。
/etc/resolv.conf如果您resolvconf在网络启动并运行的情况下安装软件包,则可能不是最佳选择。确保文件base,head并tail在该/etc/resolvconf/resolv.conf.d/目录中不包含任何nameserver条目,然后运行resolvconf -u(作为root)。/etc/resolv.conf并替换所有nameserver行,nameserver 10.3.0.2其中 10.3.0.2 是 S 的 IP 地址(有关如何找出 S 的 IP 地址,请参见上文)。您也可以使用 Dnsmasq 作为DHCP服务器,以便机器自动获取与其名称对应的地址。这超出了本答案的范围;查阅 Dnsmasq 文档(这并不难)。请注意,给定的本地网络上只能有一个 DHCP 服务器(本地网络的确切定义超出了本答案的范围)。
到目前为止,我假设了一个本地网络。如果您想为位于世界不同角落的机器命名怎么办?您仍然可以使用上述任何一种技术,只是涉及 DHCP 的部分仅适用于本地网络。或者,如果您的机器有公共 IP 地址,您可以为它们注册您自己的公共名称。(您也可以将私有 IP 地址分配给公共名称;它不太常见且不太有用,但没有技术难度。)
您可以获取自己的域名并将 IP 地址分配给该域内的主机名。您需要在域名提供商处注册域名;这通常花费 10 到 15 美元/年(对于最便宜的域)。使用您的域名提供商的 Web 界面为主机名分配地址。
如果您的机器有动态 IP 地址,您可以使用动态 DNS协议在地址更改时更新与机器名称关联的 IP 地址。并非所有域名提供商都支持动态 DNS,因此请先购买再购买。对于个人使用,No-IP提供免费的动态 DNS 服务,如果您使用自己的域(例如example.ddns.net)。
tne*_*tne 36
使用多播 DNS (mDNS)。这是一种适用于 LAN 子网的零配置协议。不需要服务器。使用.localTLD(这是您已经使用的)。
因为你在问,所以其他一切似乎都太过分了。如果不是,那么你可能不会问。
PS .localTLD 会自动附加/删除,因此您无需以任何方式更改主机名。例如,如果您的主机名是svr,则svr.local应该在您的 LAN 上解析。
小智 13
正如所建议的,只要您只想从同一本地网络访问计算机,多播 DNS (mDNS) 似乎是最简单的解决方案。
在 Linux 上,您可以使用avahi将主机名导出到带有 mDNS 的网络。要在 Ubuntu 服务器 20.04 上安装它,请使用apt install avahi-daemon.
之后您的服务器应该可以通过以下方式访问:hostname.local
vi /etc/dhcp3/dhclient.conf
send host-name "ubuntu-laptop";
Run Code Online (Sandbox Code Playgroud)
和
/etc/init.d/networking restart
Run Code Online (Sandbox Code Playgroud)