我在我的家庭局域网内安装了一个 Linux(Ubuntu)服务器,最初它自动配置为使用 DHCP 接口。我使用该服务器的主机名从另一台计算机连接到此服务器。一切正常,我的路由器配置为在我的家庭网络内使用 DHCP,并自动为每台计算机分配一个 IP。但是当我使用 SSH 连接到此主机时,它警告我应该接受来自服务器每个新分配 IP 的指纹,这有点烦人。所以我将它配置为使用静态 IP 寻址,编辑文件/etc/network/interfaces
如下:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.101
netmask 255.255.255.0
gateway 192.168.1.1
一切正常,只是我无法使用该服务器的主机名连接到它。当ping
我看到它被路由到由 DHCP 动态分配的最后一个 IP 地址时,当然Destination Host is Unreachable
。我知道我可以在我的/etc/hosts
文件中对其进行硬编码,但我想知道——为什么它在 DHCP 中运行良好,而在静态中却不行。
显然,我有些不明白。提前致谢!
答案1
使用静态 IP 时,您需要在接口配置中将路由器指定为第一个 DNS 服务器。因此,如果您使用的是 ubuntu 12.04,则可以添加以下配置:
dns-nameservers 192.168.1.1
然后重新启动网络:
/etc/init.d/networking restart
查看如何在接口中配置静态 DNS?有关 DNS 配置的更多信息。
答案2
当您为服务器使用 DHCP 时,它每次获得新 IP 地址时都会向您的 DNS 服务器注册其主机名。现在您的 IP 是静态的,它不会与 DHCP 服务器交互,因此 DHCP 服务器无法将主机名传递给 DNS。
您需要直接执行此操作。如果您的路由器(假设是您的 DNS 服务器)在其 Web GUI 中支持它,那么您可能能够使用服务器主机名更新路由器的 hosts 文件。
如果没有,但路由器上的 DNS 服务器接受来自本地网络的更新(而不是仅仅接受 DHCP 服务器的更新),那么您可以执行以下操作:
sudo apt-get install dnsutils
nsupdate
> update add hostname.domainame 86400 a 192.168.1.101
> send
“域名”可以是您的本地 DNS 后缀。这种方法的缺点是路由器在重新启动时会丢失设置,因此您需要服务器通过脚本和 cron 定期发送此更新。
如果 DNS 服务器不接受本地更新(它可能不会接受),那么最好的选择和更好的长期解决方案是从您的服务器而不是从路由器运行 DNS。
绑定是 Linux 最常用的 DNS 服务器,尽管也有更轻量的替代方案。
也许一个更简单的替代方案是将服务器恢复为使用 DHCP,但将路由器配置为每次分配相同的 IP 地址。许多路由器都支持此功能,这意味着主机名应该每次都重新注册。