9.2. 一般网络配置

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

9.2.1. 网络接口配置文件

从 209 版本开始,systemd 提供一个名为 systemd-networkd 的网络配置守护进程,它能够用于基础网络配置。另外,自 213 版本起,可以用 systemd-resolved 代替静态 /etc/resolv.conf 文件处理域名解析。这两个服务在默认情况下都是启用的。

[注意]

注意

如果您不会使用 systemd-networkd 进行网络配置 (例如,系统根本没有连接网络,或者您希望使用另外的,NetworkManager 之类的工具进行网络配置),禁用一项服务,以防止系统引导时出现错误消息:

systemctl disable systemd-networkd-wait-online

systemd-networkd (以及 systemd-resolved) 的配置文件可以放置在 /usr/lib/systemd/network/etc/systemd/network 中。/etc/systemd/network 中的配置文件优先级高于 /usr/lib/systemd/network 中的配置文件。有三种类型的配置文件:.link.netdev.network 文件。如果需要它们的详细描述和内容示例,参阅 systemd.link(5)systemd.netdev(5),以及 systemd.network(5) 手册页。

9.2.1.1. 网络设备命名

Udev 一般根据系统物理特征为网卡分配接口名,例如 enp2s1。如果您不确定接口名是什么,可以在引导您的系统后,运行 ip link 命令。

[注意]

注意

接口名依赖于系统正在运行的 udev 守护进程的实现和配置。LFS 的 udev 守护进程 (systemd-udevd,在 第 8.76 节 “Systemd-256.4” 中安装) 直到 LFS 系统引导时才会运行。因此,无法在宿主系统中使用上述命令可靠地确定 LFS 系统将会使用的接口名,即使在 chroot 环境中仍然如此

对于多数系统,每种连接类型只有一个网络接口。例如,有线连接的经典接口名是 eth0,而无线连接的接口名一般是 wifi0 或 wlan0。

如果您偏爱经典或自定义网络接口名,可以使用三种不同方式:

  • 覆盖 udev 提供默认策略的 .link 文件:

    ln -s /dev/null /etc/systemd/network/99-default.link
  • 手动创建命名架构,例如将网络接口命名为 internet0dmz0,或者 lan0。为此,在 /etc/systemd/network 中创建 .link 文件,为您的一个,一些,或者全部网络接口直接选择名称,或选择更好的命名架构。例如:

    cat > /etc/systemd/network/10-ether0.link << "EOF"
    [Match]
    # 将 MAC 地址替换为适用于您的网络设备的值
    MACAddress=12:34:45:78:90:AB
    
    [Link]
    Name=ether0
    EOF

    参阅手册页 systemd.link(5) 获得更多信息。

  • 在 /boot/grub/grub.cfg 的内核命令行中传递选项 net.ifnames=0

9.2.1.2. 静态 IP 配置

以下命令为静态 IP 设置创建一个基本的配置文件 (使用 systemd-networkd 和 systemd-resolved)。

cat > /etc/systemd/network/10-eth-static.network << "EOF"
[Match]
Name=<网络设备名>

[Network]
Address=192.168.0.2/24
Gateway=192.168.0.1
DNS=192.168.0.1
Domains=<您的域名>
EOF

如果您有多个 DNS 服务器,可以在配置文件中创建多个 DNS 项。如果您希望使用静态 /etc/resolv.conf 文件,则不要在配置文件中包含 DNS 和 Domains 项。

9.2.1.3. DHCP 配置

以下命令为 IPv4 DHCP 配置创建基本配置文件:

cat > /etc/systemd/network/10-eth-dhcp.network << "EOF"
[Match]
Name=<网络设备名>

[Network]
DHCP=ipv4

[DHCPv4]
UseDomains=true
EOF

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

如果要将系统连接到 Internet,它需要某种域名服务 (DNS) 名称解析方式,以将 Internet 域名解析为 IP 地址,或将 IP 地址解析为域名。最好的方法是将 ISP 或网络管理员提供的 DNS 服务器 IP 地址写入 /etc/resolv.conf

9.2.2.1. systemd-resolved 配置

[注意]

注意

如果使用与 systemd-resolved 不兼容的方式配置网络接口 (例如 ppp 等),或使用了某种本地解析器 (如 bind,dnsmasq,或者 unbound 等),或其他任何生成 /etc/resolv.conf 的软件 (如并非由 systemd 本身提供的 resolvconf 程序),则不应使用 systemd-resolved 服务。

如果需要禁用 systemd-resolved,执行命令:

systemctl disable systemd-resolved

在使用 systemd-resolved 进行 DNS 配置时,它创建文件 /run/systemd/resolve/stub-resolv.conf。另外,如果 /etc/resolv.conf 不存在,systemd-resolved 会将其创建为指向 /run/systemd/resolve/stub-resolv.conf 的符号链接。因此,不需要手动创建 /etc/resolv.conf

9.2.2.2. 静态 resolv.conf 配置

如果希望使用静态的 /etc/resolv.conf 执行以下命令创建它:

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

domain <您的域名>
nameserver <您的主要域名服务器 IP 地址>
nameserver <您的次要域名服务器 IP 地址>

# End /etc/resolv.conf
EOF

可以省略 domain 语句,或使用一条 search 语句代替它。阅读 resolv.conf 的手册页了解更多细节。

<域名服务器的 IP 地址> 替换为您的网络环境下最合适的 DNS 服务器 IP 地址。这里往往会写入不止一个 DNS 服务器 (需要次要服务器作为后备)。如果您只需要或只希望使用一个 DNS 服务器,可以删除文件中的第二个 nameserver 行。可以写入本地网络路由器的 IP 地址。也可以使用 Google 公用 DNS 服务器作为域名服务器,它们的 IP 地址在下面给出。

[注意]

注意

Google 公用 DNS 服务器的 IPv4 地址是 8.8.8.88.8.4.4,IPv6 地址是 2001:4860:4860::88882001:4860:4860::8844

9.2.3. 配置系统主机名

在引导过程中,/etc/hostname 被用于设定系统主机名。

执行以下命令,创建 /etc/hostname 文件,并输入一个主机名:

echo "<lfs>" > /etc/hostname

<lfs> 需要被替换为赋予该计算机的名称。不要在这里输入全限定域名 (FQDN),它应该被写入 /etc/hosts 文件。

9.2.4. 自定义 /etc/hosts 文件

选择一个全限定域名 (FQDN),和可能的别名,以供 /etc/hosts 文件使用。如果使用静态 IP 地址,您还需要确定要使用的 IP 地址。hosts 文件条目的语法是:

IP_地址 主机名.域名 别名

除非该计算机可以从 Internet 访问 (即拥有一个注册域名,并分配了一个有效的 IP 地址段 —— 多数用户没有分配公网 IP),则使用的 IP 地址必须属于私网 IP 范围。有效的范围是:

私网地址范围                         公共前缀长度
10.0.0.1 - 10.255.255.254            8
172.x.0.1 - 172.x.255.254           16
192.168.y.1 - 192.168.y.254         24

x 可以是 16-31 之间的任何数字。y 可以是 0-255 之间的任何数字。

例如,192.168.1.1 是有效的私网 IP 地址。

如果计算机要被配置为能够从 Internet 访问,则可以使用注册域名本身作为有效的 FQDN,或者在其之前用.符号连接一个前缀 (前缀通常是主机名) 得到 FQDN。另外,您需要联系域名提供商,以将 FQDN 解析到您的公网 IP 地址。

即使计算机无法从 Internet 访问,一些程序,如 MTA,仍然需要一个 FQDN 才能正常工作。此时可以使用一个特殊的 FQDN localhost.localdomain

执行以下命令,创建 /etc/hosts 文件:

cat > /etc/hosts << "EOF"
# Begin /etc/hosts

<192.168.0.2> <FQDN> [alias1] [alias2] ...
::1       ip6-localhost ip6-loopback
ff02::1   ip6-allnodes
ff02::2   ip6-allrouters

# End /etc/hosts
EOF

其中 <192.168.0.2><FQDN> 需要为特定使用环境和需求进行修改 (如果系统或网络管理员分配了 IP 地址,且本机将被连接到现有的网络中)。可以略去可选的别名 (alias),如果使用支持 DHCP 或者 IPv6 自动配置的连接,或者使用 localhost.localdomain 作为 FQDN,则包含 <192.168.0.2> 的一行也可以省略。

/etc/hostname 文件不包含 localhostlocalhost.localdomain,或者(不包含域名的) 主机名,因为 myhostname NSS 模块会处理它们,参阅手册页 nss-myhostname(8) for details.

::1 是 127.0.0.1 在 IPv6 中的对应,即 IPv6 回环接口。