7.13. 配置网络脚本

本节仅适用于需要配置网卡的情况。

如果不使用网卡,就不需要创建关联网卡的配置文件,这样的话,在所有运行级目录 (/etc/rc.d/rc*.d) 下删除 network 符号链接。

7.13.1.创建网络接口的稳定名称

由于 Udev 和网络驱动的模块化,网络设备的接口的加载顺序在每次reboot后可能会不同, 因为驱动是并行加载的,所以顺序会随机变化。 例如,在一台计算机上有两块网卡 Intel 和 Realtek, Intel制造的网卡可能是 eth0,Realtelk 的网卡是 eth1。 有时, 重启后网卡的顺序可能反过来。 为避免这种情况,Udev 附带一个脚本和一些规则来根据网卡的MAC地址给它们定义稳定的名称。

预生成的规则,要确保每次启动,同样的名字都分配给同一个设备,包括第一次启动:

for NIC in /sys/class/net/* ; do
    INTERFACE=${NIC##*/} udevadm test --action=add $NIC
done

现在,检查 /etc/udev/rules.d/70-persistent-net.rules文件,找出名字和网卡的对应关系:

cat /etc/udev/rules.d/70-persistent-net.rules

这个文件总是以一个注释块开始,然后对于每个NIC有两行。 每个NIC的第一行是显示它的硬件ID(例如,如果是PCI卡,就是它的 PCI 供应商和设备ID) 的注释信息, 如果可以找到驱动程序的话,会在括号中附带驱动程序。 不管是硬件 ID 还是驱动程序,都可以用来决定这个网卡的名称。第二行是匹配这个NIC的 Udev 规则, 以及实际分配给它的名字。

所有 Udev 规则都由一些被逗号和可选的空格分开的关键字组成。 规则关键字和它们的说明请参考下面:

  • SUBSYSTEM=="net" - 该参数告诉 Udev 忽略非网卡设备

  • ACTION=="add" - 该参数告诉 Udev 忽略不附加事件的规则 (也发生 "删除" 和 "更改" 事件,但不必重命名网络接口 )。

  • DRIVERS=="?*" - 该选项使 Udev 忽略 VLAN 或桥子接口 (因为这些子接口没有驱动)。 因为分配给子接口的名字会和父设备有冲突,所以要跳过。

  • ATTR{address} - 这个关键字的值是网卡的 MAC地址。

  • ATTR{type}=="1" - 某些无线驱动会建立多个虚拟接口,在这种情况下, 该参数确保这个规则只匹配主接口 。 和VLAN和桥子接口被跳过的原因一样:有命名冲突, 所以,第二个接口会被跳过。

  • KERNEL=="eth*" - 这个关键字添加Udev规则生成器,用来处理有多个相同MAC地址网络接口的机器 (PS3就是一种这样的机器)。如果独立的接口有不同的基本名(basenames),这个 关键字会让Udev告诉它们分开。 这个参数对于大多数LFS用户都不是必需的,但无所谓。

  • NAME - 这个关键字的值是Udev将要分配给这个端口的名字

NAME的值是重要的组成部分。 在执行前要确保你知道分配给每个网卡的名字, 并且, 要确保在后面建立配置文件时,使用了这个NAME 值。

7.13.2.创建网络接口配置文件

network 脚本启用或关闭哪个接口由 /etc/sysconfig/network-devices目录下的文件决定。 这个目录为每个配置的网络接口建立一个子目录,类似于 ifconfig.xyz,这个 “xyz” 是一个网络接口的名字。 这个目录中的文件将定义接口的属性,比如IP地址、子网掩码等等。

下面的命令是为 eth0 建立一个事例的 ipv4 文件:

cd /etc/sysconfig/network-devices
mkdir -v ifconfig.eth0
cat > ifconfig.eth0/ipv4 << "EOF"
ONBOOT=yes
SERVICE=ipv4-static
IP=192.168.1.1
GATEWAY=192.168.1.2
PREFIX=24
BROADCAST=192.168.1.255
EOF

每个文件中的这些变量的值都要改成您的设置,如果 ONBOOT 变量设置成 “yes”, network 脚本会在系统启动过程中启动网络接口卡 (NIC)。 如果设置成 “yes” 以外的值, NIC 会被 network 脚本忽略而不启动。

SERVICE 变量定义获取 IP 地址的方式, LFS-Bootscripts 软件包有一套模块化的 IP 分配格式,并在 /etc/sysconfig/network-devices/services 目录下为其它的 IP 分配方式创建了附加的文件, 这通常用作动态主机配置协议 (DHCP)方式, 在BLFS 里有详细介绍。

GATEWAY 变量应该设置为默认网关的 IP 地址(如果存在的话), 如果没有默认网关,就把这个变量注释掉。

PREFIX 变量设置为子网使用的位数。IP地址的每个字节是8位。如果子网掩码是 255.255.255.0, 那么它使用前3个字节 (24 bits) 来指定网络号。如果子网掩码是 255.255.255.240, 它就是使用28位指定网络号。长于24位的PREFIX 通常由 DSL 和 cable的因特网服务提供商(ISP)使用。在这个例子里 (PREFIX=24),子网掩码是 255.255.255.0。请根据你的网络情况调整PREFIX变量。

7.13.3. 建立 /etc/resolv.conf 文件

如果系统要连接到Internet上,就需要域名服务(DNS) 来把Internet域名解析成IP地址,反之亦然。在/etc/resolv.conf文件里设置 ISP 或网络管理员提供的域名服务器的 IP 地址就可以达到这个目的了,运行下面的命令创建这个文件:

cat > /etc/resolv.conf << "EOF"
# Begin /etc/resolv.conf

domain <Your Domain Name>
nameserver <IP address of your primary nameserver>
nameserver <IP address of your secondary nameserver>

# End /etc/resolv.conf
EOF

<IP address of the nameserver> 替换成你的DNS的IP地址。 域名服务器常常不止一项(作为备份用途),如果您只需要一个域名服务器,把文件里的第二行 nameserver 删除就可以了。在局域网里这个 IP 地址还可能是路由器。