如何设置静态IP地址以及为什么
注意!我没有谈论使用NetworkManager设置网络的其他方式。/etc/network/interfaces
NM不会触摸其中提到的任何设备
为了能够通过IP网络(IPv4和IPv6)进行通信,计算机必须知道其拥有的IP地址。因此address
,需要使用指令来告知计算机。
然后,当该计算机想要与另一台计算机通信时,它将使用该另一台计算机的IP地址来检查该计算机是否在同一网络LAN中。如果是这样,该计算机可以与另一台计算机直接通信。
那么,计算机如何知道何时与同一LAN上的计算机通信?通过使用网络netmask
,其中地址的网络部分设置为1,主机部分设置为零。因此,通过在IP地址的每个位与网络掩码之间进行按位与运算,我们将获得IP地址的网络地址,其中主机部分为零。因此,如果我们在计算机的IP地址和其他计算机的IP地址上执行此操作,则会获得每个网络地址。如果它们相等,则意味着这些计算机位于同一网络中并且可以直接相互通信。
如果网络地址不相等,它们将位于不同的LAN上,并且无法直接相互通信。然后,计算机需要使用连接到其他LAN的特殊计算机。该计算机是路由器(也可以具有防火墙和NAT)。因此,当一台计算机要与LAN以外的其他计算机进行通讯时,它需要知道该gateway
指令设置的该计算机的地址。如果另一个接口已经设置了gateway
值,则您也不应为此接口设置另一个网关指令。该gateway
指令为计算机设置了默认路由,因此在每台计算机上,IPv4只需要一个路由,IPv6只需一个路由。可以使用network
伪指令手动设置此网络地址。
有时计算机希望与LAN中的所有计算机通信,并且它使用广播地址。同一地址的所有计算机都监听该地址。这基本上与网络地址相同,除了主机部分不是全零,而是全零。该广播地址由broadcast
接口中的伪指令设置。
接口network
地址只需要计算一次,通常可以通过该地址address
和netmask
指令正确计算。与broadcast
地址相同。因此,您无需设置它们。实际上,如果将一个或两个都设置为错误的值,则可能会失去与Internet和LAN中其他计算机的连接。因此,除非您对它们有一些奇怪的值,否则让计算机为您计算它们。
因此,专用网络中/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/nsswitc.conf
和以开头的行控制hosts:
。如果您要求计算机连接到计算机my.example.com
,它将搜索此文件并尝试从名称中解析IP地址my.example.com
。该文件实际上并未回答“ my.example.com具有哪个IP”的问题,它只是告诉计算机在哪里可以找到答案。
通常,它/etc/hosts
首先尝试使用文件来获取静态本地名称,然后使用avahi mDNS
来获取动态本地名称,然后再使用DNS域名解析程序从Internet上获取名称。
如果其中一些回答问题的速度很慢,则计算机似乎会停滞一段时间。因此,如果知道,请先检查名称解析。
因此,添加静态地址只需将其添加到/etc/hosts
文件中即可。顺便说一句,如果您有一个静态地址,则可能应该将计算机的IP地址更改为您的IP地址,而不是默认值127.0.1.1
(位于localhost所在的localnet网络中127.0.0.1
)。这仅适用于客户端,不适用于服务器。
您从带有avahi
软件包的Linux机器和Apple机器(以及带有iTunes的MS Windows?)获得的动态地址。那是由“魔术”处理的,您将不需要修复它。
DNS用于连接Internet,您需要告诉计算机您要使用的DNS服务器在哪里,要使用的IP地址以及默认的DNS域是什么。
这是在文件中完成的/etc/resolv.conf
,可以静态设置。在我们这个不那么静态的世界中,这不能很好地工作,因此通常您有一个名为resolvconf
install 的软件包。这使您可以在/e/n/interfaces
文件中设置这些设置。
因此,如果我们假设要添加Google 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服务器。请在此查找起来man
的-page resolv.conf
。由于通常,你可以使用命令man nsswitch.conf
,man resolv.conf
并man resolvconf
获取更多信息。
还要注意,我将域example.com和example.org和IP网络192.0.2.0/24用于ISP示例DNS服务器。这些是明确定义要在示例中使用的。请参阅http://example.com/或http://tools.ietf.org/html/rfc2606和rfc5735
然后如何检查它是否有效?
您可以通过多种方式来执行此操作,但是我通常会使用
getent hosts my.test.com
测试整个设置的名称解析。如果我只想检查DNS是否工作,请使用以下命令之一:
host my.test.com
dig my.test.com
但是请记住,那些仅通过/etc/resolv.conf
文件中的设置而不是/etc/nsswitch.conf
部分来测试DNS 。它可能是您想要的,或者不是。