7.13. 配置网络脚本

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

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

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

这一段的说明对于单网卡是可选的。

由于 Udev 和 网络驱动的模块化,网络设备的接口的加载顺序在每次reboot后可能会不同,因为驱动是并行加载的,所以顺序会变成随机。例如,在一台计算机上有两块网 卡Intel 和 Realtek。Intel 制造的网卡可能是 eth0,Realtelk 的网卡是 eth1;但是重启后网卡的顺序可能反过来。为避免这种情况,我们应该 根据网卡的MAC地址或总线位置来为他们命名。

如果想要根据MAC地址来识别网卡,可以使用如下命令:

grep -H . /sys/class/net/*/address

为每个网卡(除loopback),设计一个描述性的名字,比方 “realtek”, 然后参照如下建立Udev规则:

cat > /etc/udev/rules.d/26-network.rules << EOF
ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="00:e0:4c:12:34:56", \
NAME="realtek"
ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="00:a0:c9:78:9a:bc", \
NAME="intel"
EOF
[Note]

注意

虽然这个例子可以正常工作,但要注意 udev 不能识别 \ 的继续上一行的功能。所以如果用文本编辑器来编辑就一定要保证每个规则占一行。

如果要以总线位置作为标准,可以创建如下的Udev规则:

cat > /etc/udev/rules.d/26-network.rules << EOF
ACTION=="add", SUBSYSTEM=="net", BUS=="pci", ID=="0000:00:0c.0", \
NAME="realtek"
ACTION=="add", SUBSYSTEM=="net", BUS=="pci", ID=="0000:00:0d.0", \
NAME="intel"
EOF

这个规则会把网卡名字每次都定为 “realtek” 和 “intel”, 以替代eth0和eth1 (即:原来的eth0和eth1接口不存在了 除非把他们加到 NAME 下)。在下面的文件中我们使用描述性的名字来替代eth0 等。

需注明以上规则并不永远适用。例如, 当VLAN 和 网桥 使用时,以MAC为基准的命名就会出问题。由于 VLAN 和 网桥 在网卡上有相同的MAC地址。 如果只想重新命名网卡接口,而不是brige和VLAN接口,但是规则都会匹配它们。如果使用虚拟接口,我们会有两种解决办法。其一是把 DRIVER=="?*" 关键字加在 SUBSYSTEM=="net" 后。但这种方法对于一些老型号的网卡不起作用,因为这些网卡的 uevent 中没有 DRIVER 变量,因此 按规则就不可能匹配到这些卡。 另外一种就是以总线位置命名。

另外一种已知的不能工作的情况存在于无线网络中,当应用MadWifi 或 HostAP 驱动时, 他们会以相同的MAC地址和总线位置创建至少两个接口。例如,Madwifi 驱动会创建一个 athX 和 wifiX 接口(X是一个数字)。为区别 这些接口,可以把 KERNEL 参数,比如 KERNEL=="ath*" 加到 SUBSYSTEM=="net"后。

可能还有很多情况会导致不能正常工作,现在这方面的 bug 仍然不断的报告给 Linux 的各个发布版,没有一个解决方法可以解决所有的情况。

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

network 脚本启用或关闭哪个接口由 /etc/sysconfig/network-devices 目录下的文件决定,这个目录下的文件应该是类似于 ifconfig.xyz 的形式,这里"xyz"是网络接口名(例如 eth0 或者 eth0:1)。这个目录中的文件将定义接口的属性,比如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(Network Interface Card 网络接口卡,简称网卡),如果设置为"yes"以外的值,网卡会被 network 脚本忽略而没有启动。

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

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

PREFIX 变量设置为子网使用的位数,IP 地址的每个字节是 8 bit ,如果子网掩码是 255.255.255.0 ,那么它使用前三个字节(24 bit)指定网络号;如果网络掩码是 255.255.255.240 ,它用前 28 bit 来指定网络号。长于 24 bit 的前缀一般由 DSL 和 cable 的 ISP(Internet Service Providers 因特网服务提供商)使用,我们的例子里(PREFIX=24),子网掩码是 255.255.255.0 ,请根据您的网络情况调整 PREFIX 变量。

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

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

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

domain {<域名>}
nameserver <主域名服务器IP地址> nameserver <副域名服务器IP地址> # End /etc/resolv.conf
EOF

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