7.2. 通用网络配置

本节仅在需要配置网卡时参考。

7.2.1. 网络接口配置文件

自版本 209 开始,systemd 提供了一个名为 systemd-networkd 的命令用于处理基本的网络配置。另外,自版本 213 开始,DNS 名称解析可用 systemd-resolved 代替静态的 /etc/resolv.conf 文件来解决。默认情况,两种服务都将被启用。

systemd-networkd(和 systemd-resolved 的配置文件可能在 /usr/lib/systemd/network/etc/systemd/network中。/etc/systemd/network 中文件比 /usr/lib/systemd/network中的有更高的优先级。配置文件类型有三种:.link.netdev.network 文件。可以通过查阅 man 手册的 systemd-link(5)systemd-netdev(5)systemd-network(5) 获取更多关于这些配置文件的详细介绍。

7.2.1.1. 网络设备命名

udev 通常会根据系统物理特性分配接口名称。例如,enp2s1。如果你不确定你的接口名称,你可以在系统启动后运行 ip link 查看。

对于大多数系统,每种连接只会有一种网络接口。例如,传统有线连接的接口名 eth0。而无线连接的名称通常是 wifi0 或 wlan0。

如果你更青睐传统或是自定义的网络接口名称,有三种实现的方法:

  • 为默认的策略隐蔽 udev 的 .link 文件:

    ln -s /dev/null /etc/systemd/network/99-default.link
    
  • 创建手动命名规则,比方说,将接口命名成「internet0」,「dmz0」或「lan0」这样。为此,请在 /etc/systemd/network/ 中创建 .link 文件,为其中的一个,一些,或者说你全部的接口赋予明确的名字或是更妥善的命名规则。示例:

    cat > /etc/systemd/network/10-ether0.link << "EOF"
    [Match]
    # Change the MAC address as appropriate for your network device
    MACAddress=12:34:45:78:90:AB
    
    [Link]
    Name=ether0
    EOF
    

    参考 man 手册 systemd.link(5) 获取更多信息。

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

7.2.1.2. 静态 IP 的配置

以下为设置静态 IP 而创建的基础配置文件(同时用到了 systemd-networkd 和 systemd-resolved):

cat > /etc/systemd/network/10-eth-static.network << "EOF"
[Match]
Name=<network-device-name>

[Network]
Address=192.168.0.2/24
Gateway=192.168.0.1
DNS=192.168.0.1
Domains=<Your Domain Name>
EOF

如果你拥有的 DNS 服务器超过了一个,可以为其添加多个 DNS 条目。然而,如果你打算用静态的 /etc/resolv.conf 文件,就不要添加 DNS 或域名条目。

7.2.1.3. DHCP 的配置

通过以下命令,你可以创建用于设置 IPv4 DHCP 的基础配置文件:

cat > /etc/systemd/network/10-eth-dhcp.network << "EOF"
[Match]
Name=<network-device-name>

[Network]
DHCP=ipv4

[DHCP]
UseDomains=true
EOF

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

如果你的系统需要连接到互联网,它需要利用 DNS 服务将互联网域名解析为实际的 IP 地址,反之亦然。最好的方法是将从 ISP 或者是网络管理员那里取得的 DNS 服务器地址填入 /etc/resolv.conf

7.2.2.1. systemd-resolved 的配置

[Note]

Note

如果你使用其他方式来配置你的网络接口(例如:ppp,network-manager,等),或是任何类型的本地解析器(例如:bind,dnsmasq,等),或是任何生成 /etc/resolv.conf 文件的软件(例如:resolvconf),也就别用 systemd-resolved 服务了。

systemd-resolved 配置 DNS 时,会创建 /run/systemd/resolve/resolv.conf 文件。并在 /etc 中创建一个指向生成文件的软链接:

ln -sfv /run/systemd/resolve/resolv.conf /etc/resolv.conf

7.2.2.2. 静态 resolv.conf 的配置

如果需要静态的 /etc/resolv.conf 文件,请使用以下命令:

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

domain 声明可以忽略或者以 search 声明替换。参考 man 手册的 resolv.conf 部分获得更多信息。

其中,<IP address of the nameserver> 替换为最合适的 DNS 的 IP 地址。通常会有多个条目(需要备选服务器具有相关兼容性)。如果你只需要一台 DNS 服务器,请不要输入第二行 nameserver 的内容。该 IP 地址也可以是本地网络中的一台路由。

[Note]

Note

Google 公开的 DNS 解析服务器地址 IPv4 的为:8.8.8.88.8.4.4。IPv6 的为 2001:4860:4860::88882001:4860:4860::8844

114 DNS:114.114.114.114114.114.115.115

阿里 DNS:223.5.5.5223.6.6.6

百度 DNS:180.76.76.76

OpenDNS:208.67.220.220

7.2.3. 配置系统主机名称

在系统启动过程中,/etc/hostname 文件用于创建系统的主机名称。

通过以下命令创建 /etc/hostname 文件:

echo "<lfs>" > /etc/hostname

<lfs> 替换为你想要设置的名称。请不要输入完整域名(Fully Qualified Domain Name,FQDN),那应该是放在 /etc/hosts 文件中的信息。

7.2.4. 自定义 /etc/hosts 文件

决定完整域名(Fully-Qualified Domain Name,FQDN),和可在文件 /etc/hosts 中使用的别名。如果使用的是静态地址,你还需要决定 IP 地址。hosts 文件中条目的语法为:

IP_address myhost.example.org aliases

除非电脑在互联网中可见(例如,拥有注册的域名且分配有有效的 IP 地址——大多数用户并没有这些),请确保 IP 地址位于有效的私有网络 IP 地址段。有效区间是:

Private Network Address Range      Normal Prefix
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 之间的任何数字。

有效的私有 IP 可以是 192.168.1.1。而与之相配的完整域名可以是 lfs.example.org。

即使没有网卡,一个有效的完整仍然有其必要。它的存在可以确保程序正常运行。

如果使用的是 DHCP,DHCPv6,IPv6 自动配置,或者说不配置网卡的话,通过以下命令可以创建 /etc/hosts 文件:

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

127.0.0.1 localhost
127.0.1.1 <FQDN> <HOSTNAME>
::1       localhost ip6-localhost ip6-loopback
ff02::1   ip6-allnodes
ff02::2   ip6-allrouters

# End /etc/hosts
EOF

::1 相对与 IPv4 的 127.0.0.1,是 IPv6 的回环地址。127.0.1.1 专门为 FQDN 保留的回环地址。

如果使用的是静态地址,可代替的使用以下命令创建 /etc/hosts 文件。

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

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

# End /etc/hosts
EOF

其中 <192.168.0.2><FQDN>,和 <HOSTNAME> 的值需要根据具体的用途或需求更改(如果网络/系统管理员会分配了 IP 地址,且机器将会接入现有的网络)。那可选的别名可以忽略。