当一个设备加入到网络中时,通常需要获得一个IP地址、设置一条正确的默认路由以及一个可以连上的DNS服务器

当网络采用了DHCP时,那么大部分的配置工作都会在DHCP服务器上完成,设备中的DHCP客户端只需要从服务器上获取到参数,然后配置到设备中即可。

如果没有采用DHCP或者设备中没有DHCP客户端,就需要手动来配置网络(配置IP、配置静态路由、配置DNS)。

主机名和IP

如下问题

在局域网中有一台设备(如文件备份服务器、无线打印机等)会被其他所有设备进行访问,但是由于IP地址的点分格式难以记忆,其他设备的用户不想通过IP地址进行访问,那么要如何进行访问?

可以通过主机名进行访问

这个问题由两个解决方案:

  1. 将这台设备的主机名和IP配置到所有想要访问该设备的hosts文件中。
  2. 搭建一台局域网内的DNS服务器,并将这台设备的主机名和IP的映射关系配置到该DNS服务器中,然后将DNS地址配置到其他设备中。

方案1的缺点在于当目标主机的IP发生变化,就需要其他所有设备重新配置

方案2的缺点在于需要额外搭建DNS服务器

主机名与IP之间的映射关系

如何在当前主机上配置给定主机名与IP之家的映射关系呢?

目前有各种各样的方法:

  1. 主机中的hosts文件
  2. LDAP
  3. DNS系统

但这个问题需要考虑的是有可能会给给定主机重新分配IP,这会导致给定主机名和IP之间的映射关系发生变化。

因此目前的解决方法就是:将给定主机名和IP之间的映射关系配置在DNS数据库或者DHCP配置文件中,然后将DNS配置在主机中

/etc/hosts

将主机名映射到IP地址的最简单的方式。

文件中的每一行以一个IP地址开头,后面跟着多个不同的主机名。

示例如下:

$ cat /etc/hosts
127.0.0.1	localhost
127.0.1.1	Ubuntu22
23.45.51.154	deb.nodesource.com

# 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

/etc/hosts只包含本地映射关系,而且每个主机上都需要维护该文件,因此可以用来保存系统引导时所需的映射关系。

还可以用/etc/hosts文件指定不希望外界知道的映射关系,例如破解软件时的激活地址。

hostsname命令会给一台设备分配一个主机名。

配置IP

ifconfig命令能够启用或禁用一个网络接口、设置它的IP地址和子网掩码,以及设置其他各种选项和参数

使用ifconfig命令的常见形式如:ifconfig interface[family] address options ...,示例如下:

ifconfig eth0 192.168.1.13 netmask 255.255.255.0 up

ifconfig常常在系统引导时运行,从配置文件中获取命令行参数,但是也可以通过手动执行修改网络配置。

注意:远程登陆时,不要使用ifconfig修改配置,否则可能会丢失连接

参数说明
interface标识这一命令用于哪个硬件接口上。 通常是两三个设备名后根一个数字,如eth0、lan0等。
family要配置哪一种网络协议(“地址族”)。在一个接口上可以配置多种协议并同时使用,但每种协议需要单独配置。主要选择有两种IPv4的inet和IPv6的inet6,缺省则用inet。
address指定接口的IP地址。也接受主机名作为参数,在系统引导时需要把主机名解析为IP地址。(这意味着主机名与IP地址的映射关系在hosts文件中已经配置)
up启动接口。
down关闭接口。
netmask设置接口的子网掩码,如果网络不是根据原生地址类别来划分的子网(A类、B类或C类),而是在这个基础上又划分子网,就需要这个选项。
broadcast接口的IP广播地址。默认的广播地址主机部分全为1。在上面的示例中,会默认设置为192.168.1.255。

广播地址和广播风暴

主机向网内所有其他主机发送帧,称为广播

当IP地址为192.168.1.13,网络掩码为255.255.255.0,广播地址为192.168.1.255,则可以确定192.168.1为网络地址,13为主机地址。

由网络掩码可以确定子网中可以具有254台主机。

由网络掩码和广播地址可以确定这是一个指向子网的广播,当向该广播地址发送数据帧时,子网内的所有主机都会接收到。

当主机收到数据帧后,首先进行MAC地址过滤,一般只接收目标MAC地址为本主机的MAC地址和全1的广播地址,否则丢弃;接下来是IP地址过滤,目标IP地址为本主机的IP地址或者广播IP地址才会向上层传输,否则丢弃。

使用广播的问题在于它增加了对广播数据不感兴趣的主机的处理负荷

广播地址的作用是当向该地址发送数据帧时,子网内的所有主机都会收到该数据包。

如果不能正确配置子网中每台设备的广播地址,那么就会造成广播风暴,因为数据帧可能会在设备之间来回传送直到TTL过期

配置静态路由

静态路由指的是自始至终都不会变化的路由表项,即使是后台运行一个路由守护进程的情况下。

路由原理

路由是在IP层执行的

步骤:

  1. 当前主机接收到要发送到其他主机的数据包(当前主机需配置为路由器,否则目的IP地址不匹配会被丢弃)。
  2. 获取该数据包的目的IP地址并于内核路由表中路由进行对比。
  3. 如果匹配路由表中的某条路由,就将该数据包转发到与这条路有相关联的“下一跳网关”的IP地址。
  4. 如果数据包被发送至与当前主机直连的某台主机,那么路由表中的“下一跳网关”的地址就是当前主机自己的接口之一,此时数据包会被直接发送到其目的地。
  5. 如果不匹配路由表中的任何路由,在这种情况下,如果由默认路由就调用默认路由,否则就返回“ICMP网络不可达”或“主机不可达”。

很多局域网只有一个出口,因此只需要一条默认路由指向该出口即可。

在Internet主干网络上,路由器没有默认路由。如果没有某个目的地址的路由项,那就不能达到该地址。

route命令配置

route命令用来显示和操作IP路由表,操作指的是增加or删除

语法如下:

route [-CFvnNee] [-A family | -4 | -6]
route [-v] [-A family | -4 | -6] add [ -net | -host] target [netmask Nm] [gw Gw] [metric N] [mss M] [window W] [irtt I] [reject] [mod] [dyn] [reinstate] [[dev] If]
route [-v] [-A family | -4 | -6] del [ -net | -host] target [gw Gw] [netmask Nm] [metric M] [[dev] If]
route [-V] [--version] [-h] [--help]

添加默认路由示例如下:

$route add default gw 192.168.3.1

详细信息请见Linux路由基础

配置DNS

要在主机上配置DNS客户端,则需要修改 /etc/resolv.conf 文件。

/etc/resolv.conf文件列出了DNS的IP地址,以便访问其做域名转换。

/etc/resolv.conf应该首先列出最近且稳定的DNS地址,因为默认是按顺序来请求的,只有当第一个请求超时,才会访问下一个。

如果通过DHCP来获取DNS服务器地址,那么DHCP客户端软件在获得信息后会自动填写这些地址到resolve.conf文件中。(此时不需要手动配置)

下面是resolve.conf的配置示例,具体配置说明见resolv.conf配置说明

$cat /etc/resolv.conf
nameserver 192.168.3.1
nameserver 114.114.114.114
search departmentA.org departmentB.org
sortlist
47.75.0.0/255.255.0.0
options timeout:5
options ndots:3
rotate

参考文档

DNS

UNIX/Linux 系统管理技术手册 (豆瓣) (douban.com)