#如何设置静态IP地址以及为什么要这样做#
注意!我不会讨论使用NetworkManager等其他网络设置方式。任何在/etc/network/interfaces
中提到的设备都不受NM影响。
为了能够通过IP网络(IPv4和IPv6)进行通信,计算机必须知道自己的IP地址。因此,需要使用address
指令告诉计算机它的IP地址。
当计算机想要与另一台计算机通信时,它使用另一台计算机的IP地址来检查是否在同一个网络(局域网)中。如果是的话,计算机可以直接与另一台计算机通信。
那么,计算机如何知道它是否正在与同一局域网中的计算机通信呢?通过使用网络的netmask
,其中网络部分的地址被设置为1,主机部分被设置为0。因此,通过对IP地址和netmask中的每个位进行按位AND操作,我们将得到IP地址的网络地址,其中主机部分为零。因此,如果我们对计算机的IP地址和另一台计算机的IP地址执行此操作,我们将得到每个网络地址。如果它们相等,则意味着计算机在同一个网络中,可以直接相互通信。
如果网络地址不相等,则它们位于不同的局域网,并且不能直接彼此通信。然后,计算机需要使用连接到其他局域网的特殊计算机。该计算机是一个路由器(也可能具有防火墙和NAT)。因此,当计算机想要与局域网外的其他计算机进行通信时,它需要知道该计算机的地址,该地址由
gateway
指令设置。如果另一个接口已经设置了
gateway
值,则您不需要为此接口设置另一个网关指令。
gateway
指令设置计算机的默认路由,因此每台计算机只需要一个IPv4和一个IPv6。可以使用
network
指令手动设置此网络地址。
有时,计算机希望与局域网中的所有计算机进行通信,而使用广播地址。这个地址被同一局域网中的所有计算机侦听。基本上,这与网络地址相同,只是主机部分不全为零,而是全部为1。广播地址由接口中的
broadcast
指令设置。
接口的网络地址只需要计算一次,通常可以从该地址和子网掩码指令正确计算出来。广播地址也是如此。所以你不需要设置它们。实际上,如果你将其中一个或两个设置为错误的值,可能会导致你失去与互联网和局域网中其他计算机的连接。所以除非你在它们上面有一些奇怪的值,否则让计算机为你计算它们。
因此,在私有网络中,
/etc/network/interfaces
中设备
eth1
的最小静态设置或段落可能如下所示:
iface eth1 static inet
address 192.168.44.10
netmask 255.255.255.0
gateway 192.168.44.1
#域名解析的工作原理及其与DNS的关系#
域名用于在易于人类阅读和记忆的域名与计算机不易记忆的IP地址之间进行转换,如上所述。这被称为“名称解析”。
通常由文件/etc/nsswitch.conf和以hosts:开头的行来控制。如果您要求计算机连接到计算机my.example.com,它将查找此文件并尝试从名称my.example.com解析IP地址。该文件实际上并没有回答问题“my.example.com有哪个IP”,它只是告诉计算机可以在哪里找到答案。
通常,它首先尝试/etc/hosts文件获取静态本地名称,然后使用avahi mDNS获取动态本地名称,最后使用DNS域名解析器从互联网获取名称。
如果其中一些回答问题的速度较慢,可能会导致计算机暂时卡住。因此,如果遇到这种情况,请首先检查名称解析。
所以,如果要添加静态地址,只需将其添加到您的
/etc/hosts
文件中。顺便说一下,如果您有一个静态地址,您可能应该将机器的IP地址更改为您的IP地址,而不是默认的
127.0.1.1
(它位于本地网络中,localhost是
127.0.0.1
)。这仅适用于客户端,而不适用于服务器。
Linux机器使用
avahi
软件包获取动态地址,Apple机器(和带有iTunes的MS Windows)也是如此。这由“魔法”处理,您无需修复。
DNS用于访问互联网,您需要告诉计算机您想要使用的DNS服务器在哪里,使用什么IP地址以及您的默认DNS域名是什么。
这是在
/etc/resolv.conf
文件中完成的,并且可以进行静态设置。在我们这个不那么静态的世界中,这种方法效果不太好,因此通常会安装一个名为
resolvconf
的软件包。这使您可以在
/e/n/interfaces
文件中设置这些设置。
所以,假设我们想要添加谷歌的DNS服务器之一,
8.8.8.8
,以及您的ISP的DNS服务器,
192.0.2.1
,并将您的域名
my.example.org
设置为默认值,您只需编辑
/etc/network/interfaces
文件,并在静态设备的段落中添加这两行。
dns-nameservers 8.8.8.8 192.0.2.10
dns-search my.example.org
你可能还会注意到DNS解析器只会使用最多三个DNS服务器。请在resolv.conf的man页中查找此信息。通常情况下,您可以使用命令man nsswitch.conf、man resolv.conf和man resolvconf获取更多信息。
另外,请注意我在示例ISP DNS服务器中使用了域名example.com和example.org以及IP网络192.0.2.0/24。这些都是明确定义用于示例。请参阅
http://example.com/或
https://www.rfc-editor.org/rfc/rfc2606和rfc5735。
那么,如何检查它是否正常工作呢?
有很多种方法,但我通常使用以下方式:
getent hosts my.test.com
测试整个设置以进行名称解析。如果我只想检查DNS是否正常工作,我会使用以下其中一条命令:
host my.test.com
dig my.test.com
但请记住,这些只是通过
/etc/resolv.conf
文件中的设置来测试DNS,而不是
/etc/nsswitch.conf
部分。这可能是你想要的,也可能不是。