Skip to the content.

上一页      主目录      下一页

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平台进行构建并正常工作。

包信息

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平台进行构建并正常工作。

包信息

用户笔记: 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服务器的状态。

上一页      主目录      下一页