14. Connecting to a Network
LFS书涵盖了通过连接到一个带有静态IP地址的局域网来建立网络。获取IP地址并连接到局域网和其他网络(如Internet)还有其他方法。本章将介绍最常用的DHCP和PPP方式。
DHCP即动态主机配置协议。它是许多站点用来自动向计算机提供诸如IP地址、子网掩码和路由信息等信息的协议。如果您的网络使用DHCP,则需要一个DHCP客户端才能连接到它。
14.1 Advanced Network Setup
Network Bridge
内核配置
在内核配置中启用以下选项,必要时重新编译内核:
Networking support: Y
Networking options:
802.1d Ethernet Bridging: M or Y
设置网桥
在本节中,我们将讨论如何使用systemd-networkd建立网络桥接。在下面的示例中,eth0表示正在桥接的外部接口,而br0表示桥接接口。
要创建网桥接口,以root用户运行以下命令创建以下配置文件:
cat > /etc/systemd/network/50-br0.netdev << EOF
[NetDev]
Name=br0
Kind=bridge
EOF
要将网络接口分配给网桥,以root用户运行以下命令创建以下配置文件:
cat > /etc/systemd/network/51-eth0.network << EOF
[Match]
Name=eth0
[Network]
Bridge=br0
EOF
对需要桥接的任何其他接口重复此过程。请注意,不要为桥接接口分配任何地址,这一点很重要。如果您正在使用NetworkManager-1.42.0,请确保将它们配置为忽略桥接接口以及桥接接口本身。
如果您所在的网络使用DHCP分配ip地址,以root用户运行以下命令创建以下配置文件:
cat > /etc/systemd/network/60-br0.network << EOF
[Match]
Name=br0
[Network]
DHCP=yes
EOF
或者,如果使用静态ip设置,以root用户运行以下命令创建以下配置文件:
cat > /etc/systemd/network/60-br0.network << EOF
[Match]
Name=br0
[Network]
DHCP=yes
EOF
要打开网桥接口,只需以root用户运行以下命令,重新启动systemd-networkd守护进程:
systemctl restart systemd-networkd
14.2 dhcpcd-9.4.1
简介dhcpcd
dhcpcd是RFC2131中指定的DHCP客户端的实现。DHCP客户端用于将计算机连接到使用DHCP分配网络地址的网络。dhcpcd致力于成为一个功能齐全但非常轻量级的DHCP客户端。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://roy.marples.name/downloads/dhcpcd/dhcpcd-9.4.1.tar.xz
-
下载 MD5 校验和: 2b2f46648bc96979f96127f0e0e07d9b
-
下载大小: 251 KB
-
预计所需磁盘空间: 3.6 MB (with tests)
-
预计构建时间: less than 0.1 SBU (with tests)
dhcpcd 依赖
可选
LLVM-15.0.7 (与Clang), ntp-4.2.8p15, chronyd, 和 ypbind
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/dhcpcd
特权分离
最新版本的dhcpcd可选地支持特权分离。由于对于dhcpcd这样的程序来说,这样做的实际安全好处尚不清楚,而且设置更复杂,因此本书目前默认禁用它。
但是,如果您希望使用特权分离,则需要额外的安装步骤来设置适当的环境。以root用户发出以下命令:
install -v -m700 -d /var/lib/dhcpcd &&
groupadd -g 52 dhcpcd &&
useradd -c 'dhcpcd PrivSep' \
-d /var/lib/dhcpcd \
-g dhcpcd \
-s /bin/false \
-u 52 dhcpcd &&
chown -v dhcpcd:dhcpcd /var/lib/dhcpcd
安装dhcpcd
修复由glibc-2.36更改引起的运行时错误:
sed '/Deny everything else/i SECCOMP_ALLOW(__NR_getrandom),' \
-i src/privsep-linux.c
运行如下命令构建没有权限分离的dhcpcd:
./configure --prefix=/usr \
--sysconfdir=/etc \
--libexecdir=/usr/lib/dhcpcd \
--dbdir=/var/lib/dhcpcd \
--runstatedir=/run \
--disable-privsep &&
make
运行以下命令构建具有权限分离的dhcpcd:
./configure --prefix=/usr \
--sysconfdir=/etc \
--libexecdir=/usr/lib/dhcpcd \
--dbdir=/var/lib/dhcpcd \
--runstatedir=/run \
--privsepuser=dhcpcd &&
make
要测试结果,执行: make test.
现在,作为root用户:
make install
命令解释
--libexecdir=/usr/lib/dhcpcd: 为dhcpcd内部库设置一个更合适的位置。
--dbdir=/var/lib/dhcpcd: 默认的/var/db不兼容fhs。
--runstatedir=/run: 默认的/var/run是指向/run的符号链接。
--with-hook=...: 你可以选择安装更多的钩子,例如安装一些配置文件,比如ntp.conf。钩子集位于构建树的dhcpcd-hooks目录中。
--disable-privsep: 不要使用特权分离,这是默认的。
--privsepuser=dhcpcd: 在特权分离设置中使用此非特权用户。
--with-hook=...: 你可以选择安装更多的钩子,例如安装一些配置文件,比如ntp.conf。钩子集位于构建树的dhcpcd-hooks目录中。
配置 dhcpcd
配置文件
/etc/dhcpcd.conf
一般配置信息
如果你想在启动时使用dhcpcd配置网络接口,你需要安装blfs-systemd-units-20220720包中包含的systemd单元,以root用户运行以下命令:
make install-dhcpcd
注意
dhcpcd的默认行为是设置主机名和mtu。它还覆盖/etc/resolv.conf和/etc/ntp.conf。这些对系统配置文件的修改是通过钩子完成的,这些钩子存储在/lib/dhcpcd/dhcpcd-hooks中。通过从/目录中删除或添加钩子来设置dhcpcd。可以通过使用--nohook (-C)命令行选项或/etc/dhcpcd.conf文件中的nohook选项来禁用钩子的执行。
注意
确保禁用systemd-networkd服务,或者将其配置为不管理希望使用dhcpcd管理的接口。
此时,你可以测试dhcpcd是否按预期运行,以root用户运行以下命令:
systemctl start dhcpcd@eth0
要在引导时在特定接口上启动dhcpcd,以root用户运行以下命令启用之前安装的systemd单元:
systemctl enable dhcpcd@eth0
将eth0替换为实际的接口名称。
Contents
安装程序: dhcpcd
安装库: /usr/lib/dhcpcd/dev/udev.so
安装目录: /{usr,var}/lib/dhcpcd 和 /usr/share/dhcpcd
简要描述
dhcpcd 是RFC2131中指定的DHCP客户端的实现。
udev.so 为接口到达和离开添加udev支持;这是因为udev喜欢重命名接口,如果DHCPCD先获取它,它就不能这样做。
14.3 DHCP-4.4.3-P1
简介ISC DHCP
ISC DHCP包中包含DHCP的客户端程序和服务器程序。dhclient(客户端)用于连接使用DHCP分配网络地址的网络。dhcpd(服务器)用于在私有网络中分配网络地址。
已知此包可以使用LFS 11.3平台进行构建并正常工作。
包信息
-
下载 (HTTP): https://ftp.isc.org/isc/dhcp/4.4.3-P1/dhcp-4.4.3-P1.tar.gz
-
下载 (FTP): ftp://ftp.isc.org/isc/dhcp/4.4.3-P1/dhcp-4.4.3-P1.tar.gz
-
下载 MD5 校验和: 36c6ca77212373b0cff478ae9e5d32af
-
下载大小: 9.6 MB
-
预计所需磁盘空间: 199 MB
-
预计构建时间: 0.7 SBU
用户笔记: https://wiki.linuxfromscratch.org/blfs/wiki/dhcp
内核配置
您必须具有包套接字支持。支持IPv6是可选的。
[*] Networking support ---> [CONFIG_NET]
Networking options --->
<*> Packet socket [CONFIG_PACKET]
<*> The IPv6 Protocol ---> [CONFIG_IPV6]
安装ISC DHCP
注意
这个包不支持并行构建。
注意
请仔细阅读下面的说明。单引号和双引号很重要,因为定义的变量在代码中是逐字使用的。
执行以下命令安装ISC DHCP:
( export CFLAGS="${CFLAGS:--g -O2} -Wall -fno-strict-aliasing \
-D_PATH_DHCLIENT_SCRIPT='\"/usr/sbin/dhclient-script\"' \
-D_PATH_DHCPD_CONF='\"/etc/dhcp/dhcpd.conf\"' \
-D_PATH_DHCLIENT_CONF='\"/etc/dhcp/dhclient.conf\"'" &&
./configure --prefix=/usr \
--sysconfdir=/etc/dhcp \
--localstatedir=/var \
--with-srv-lease-file=/var/lib/dhcpd/dhcpd.leases \
--with-srv6-lease-file=/var/lib/dhcpd/dhcpd6.leases \
--with-cli-lease-file=/var/lib/dhclient/dhclient.leases \
--with-cli6-lease-file=/var/lib/dhclient/dhclient6.leases
) &&
make -j1
这个包没有附带测试套件。
如果您只想安装ISC DHCP客户端,以root用户发出以下命令:
make -C client install &&
install -v -m755 client/scripts/linux /usr/sbin/dhclient-script
为了配置客户端,请跳到“客户端配置”部分。
如果您只想安装ISC DHCP服务器,以root用户发出以下命令:
make -C server install
为了配置服务器,请跳到“服务端配置”部分。
或者,你可以安装整个包,包括客户端,服务端,中继,静态库和开发头文件,以root用户运行以下命令:
make install &&
install -v -m755 client/scripts/linux /usr/sbin/dhclient-script
配置 ISC DHCP
配置文件
/etc/dhcp/dhclient.conf 和 /etc/dhcp/dhcpd.conf
Client 配置
以root用户运行以下命令创建一个基本的/etc/dhcp/dhclient.conf文件:
install -vdm755 /etc/dhcp &&
cat > /etc/dhcp/dhclient.conf << "EOF"
# Begin /etc/dhcp/dhclient.conf
#
# Basic dhclient.conf(5)
#prepend domain-name-servers 127.0.0.1;
request subnet-mask, broadcast-address, time-offset, routers,
domain-name, domain-name-servers, domain-search, host-name,
netbios-name-servers, netbios-scope, interface-mtu,
ntp-servers;
require subnet-mask, domain-name-servers;
#timeout 60;
#retry 60;
#reboot 10;
#select-timeout 5;
#initial-interval 2;
# End /etc/dhcp/dhclient.conf
EOF
请参见man 5 dhclient.conf了解其他选项。
现在以root用户运行以下命令创建/var/lib/dhclient目录,该目录将包含DHCP Client租约:
install -v -dm 755 /var/lib/dhclient
如果您想在启动时使用dhclient配置网络接口,您需要安装blfs-systemd-units-20220720包中的[[email protected]](/cdn-cgi/l/email-protection)单元,以root用户运行以下命令:
make install-dhclient
注意
请确保禁用systemd-networkd服务,或者将其配置为不管理您希望使用dhclient管理的接口。
在这一点上,你可以测试dhclient是否像预期的那样运行,以root用户运行以下命令:
systemctl start dhclient@eth0
要在引导时在特定接口上启动dhclient,以root用户运行以下命令启用之前安装的systemd单元:
systemctl enable dhclient@eth0
将eth0替换为实际的接口名称。
Server 配置
请注意,只有在您希望通过网络发送LAN地址时才需要DHCP服务器。DHCP客户端不需要服务器来正常工作。
以root用户运行以下命令创建/etc/dhcp/dhcpd.conf:
cat > /etc/dhcp/dhcpd.conf << "EOF"
# Begin /etc/dhcp/dhcpd.conf
#
# Example dhcpd.conf(5)
# Use this to enable / disable dynamic dns updates globally.
ddns-update-style none;
# option definitions common to all supported networks...
option domain-name "example.org";
option domain-name-servers ns1.example.org, ns2.example.org;
default-lease-time 600;
max-lease-time 7200;
# This is a very basic subnet declaration.
subnet 10.254.239.0 netmask 255.255.255.224 {
range 10.254.239.10 10.254.239.20;
option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
}
# End /etc/dhcp/dhcpd.conf
EOF
调整文件以适应您的需要。请参见man 5 dhcpd.conf获取其他选项。
现在以root用户运行以下命令,创建/var/lib/dhcpd/dhcpd.leases目录,该目录将包含DHCP服务器leases:
install -v -dm 755 /var/lib/dhcpd &&
touch /var/lib/dhcpd/dhcpd.leases
如果你想在引导时启动DHCP服务器,安装blfs-systemd-units-20220720包中包含的dhcpd.service单元:
make install-dhcpd
你需要编辑/etc/default/dhcpd来设置dhcpd为DHCP请求提供服务的接口。
内容
安装程序: dhclient, dhclient-script, dhcpd, dhcrelay 和 omshell
安装库: libdhcpctl.a 和 libomapi.a
安装目录: /etc/dhcp, /usr/include/dhcpctl, /usr/include/isc-dhcp, /usr/include/omapip, /var/lib/dhclient 和 /var/lib/dhcpd
简要描述
dhclient 是DHCP客户端的实现。
dhclient-script dhclient用来(重新)配置接口。它可以通过调用自定义dhclient-{entry,exit}-hooks来进行额外的更改。
dhcpd 实现动态主机配置协议(DHCP)和Internet引导协议(BOOTP)对网络地址的请求。
dhcrelay 提供了一种在没有DHCP服务器的子网中接受DHCP和BOOTP请求并将其转发到另一个子网中的DHCP服务器的方法。
omshell 提供了一种交互式的方式来连接、查询和可能通过OMAPI(对象管理API)更改ISC DHCP服务器的状态。