企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 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 << EOFACTION=="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 ``` ### 注意 虽然这个例子可以正常工作,但要注意 udev 不能识别 \ 的继续上一行的功能。所以如果用文本编辑器来编辑就一定要保证每个规则占一行。 如果要以总线位置作为标准,可以创建如下的Udev规则: ``` cat > /etc/udev/rules.d/26-network.rules << EOFACTION=="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 地址还可能是路由器。