配置并读出地址、名字、路径
目标
编写静态地址配置文件,分段检查名称解析路径,并通过读取套接字与路由信息生成摘要。
为什么重要
本实验的第 1~2 步,原样复现了作者为防止家庭实验室集群再次宕机而制定的流程。DHCP 租约续期改变了控制平面的地址,导致它与证书 SAN 不一致,apiserver 无法启动。当时得到的教训是:仅设置 dhcp4: false 并不等于真正固定地址。cloud-init 会在每次启动时重新生成网络设置,因此还必须阻止这一生成过程,并同时在路由器上设置 DHCP 保留,地址才算真正固定。
其余步骤用于熟悉诊断顺序。getent 与 dig 结果开始分歧的位置,就是问题所在的区段;ss 的套接字状态与 ip route 的默认路径,则是确认“到这里为止都正常”的依据。此环境禁用了 ping 和 iptables,因此训练仅依据配置文件与观测工具判断,而不使用连通性探测。
步骤
- 在
/root/lfcs-net/01-static.yaml中编写 netplan 配置。network.version为 2,接口为enp3s0,dhcp4: false,地址为10.0.0.120/24,默认路由使用to: default和via: 10.0.0.1,名称服务器为10.0.0.1和1.1.1.1。 - 在
/root/lfcs-net/99-disable-network-config.cfg中写入关闭 cloud-init 网络配置生成的内容。在真实服务器中,该文件应放在/etc/cloud/cloud.cfg.d/下。 - 在
/etc/hosts中添加地址10.0.0.120、规范名称cp-1.homelab.internal、别名cp-1的条目,并将getent hosts cp-1的输出保存到/root/lfcs-net/getent.txt。 - 在
/root/lfcs-net/resolv-summary.txt中写入nameservers=<nameserver 줄 개수>和ndots=<옵션 값 또는 none>两行,内容以/etc/resolv.conf为准。 - 启动一个监听
127.0.0.1:8087的 TCP 服务,并将当前处于 LISTEN 状态的套接字本地地址逐行写入/root/lfcs-net/listen.txt。 - 在
/root/lfcs-net/route.txt中写入default_via=<기본 경로의 게이트웨이 또는 none>和primary_iface=<기본 경로가 나가는 장치>两行。 - 在
/root/lfcs-net/nsswitch.txt中写入一行hosts=<'/etc/nsswitch.conf' 의 hosts 행 값들>。各值之间用一个空格分隔。 - 在
/root/lfcs-net/firewall-plan.txt中,按照<동작> <프로토콜> <포트> <출발지>格式,以如下顺序原样写入五行规则。
allow tcp 22 10.0.0.0/24
allow tcp 6443 10.0.0.0/24
allow tcp 80 0.0.0.0/0
allow tcp 443 0.0.0.0/0
deny any any 0.0.0.0/0
参考
- 可以在后台运行
python3 -m http.server 8087 --bind 127.0.0.1来创建监听器。 ss -ltnH只显示处于 LISTEN 状态的 TCP 套接字,并且不显示表头。本地地址位于第四列。getent会经过名称服务切换器的完整路径,而dig只查询 DNS。两者结果不同,说明问题不在 DNS。- 常见错误:把默认拒绝规则放在最前面,会在到达后面的允许规则之前先切断自己的连接。
使用 netplan 配置静态地址
在 /root/lfcs-net/01-static.yaml 中编写 netplan 配置。network.version 为 2,接口为 enp3s0,dhcp4: false,地址为 10.0.0.120/24,默认路由使用 to: default 和 via: 10.0.0.1,名称服务器为 10.0.0.1 和 1.1.1.1。
netplan 使用 YAML,顶层键是 network。接口下包含关闭 DHCP 的键、地址列表、路由列表和名称服务器。地址需同时填写前缀长度。
关闭 cloud-init 网络配置
在 /root/lfcs-net/99-disable-network-config.cfg 中写入关闭 cloud-init 网络配置生成的内容。在真实服务器中,该文件应放在 /etc/cloud/cloud.cfg.d/ 下。
只需一行。将阻止 cloud-init 重新生成网络设置的键设为禁用值。
添加 hosts 条目并用 getent 检查
在 /etc/hosts 中添加地址 10.0.0.120、规范名称 cp-1.homelab.internal、别名 cp-1 的条目,并将 getent hosts cp-1 的输出保存到 /root/lfcs-net/getent.txt。
hosts 文件的一行依次为地址、规范名称和别名。检查时不要使用只查询 DNS 的工具,而要使用经过整个名称服务切换路径的工具。
汇总解析器设置
在 /root/lfcs-net/resolv-summary.txt 中写入 nameservers=<nameserver 줄 개수> 和 ndots=<옵션 값 또는 none> 两行,内容以 /etc/resolv.conf 为准。
统计以 nameserver 开头的行数,并从 options 行中找到点数阈值。如果没有该项,填写 none。
启动监听器并生成套接字列表
启动一个监听 127.0.0.1:8087 的 TCP 服务,并将当前处于 LISTEN 状态的套接字本地地址逐行写入 /root/lfcs-net/listen.txt。
可以用 Python 内置模块启动简单服务器,并提供将地址绑定到回环接口的选项。提取套接字列表时使用不显示表头的选项,便于后续处理。
解析默认路由
在 /root/lfcs-net/route.txt 中写入 default_via=<기본 경로의 게이트웨이 또는 none> 和 primary_iface=<기본 경로가 나가는 장치> 两行。
有一个子命令可以只查看默认路由。从输出中提取表示下一跳和出口设备的关键字后面的值。
记录名称解析顺序
在 /root/lfcs-net/nsswitch.txt 中写入一行 hosts=<'/etc/nsswitch.conf' 의 hosts 행 값들>。各值之间用一个空格分隔。
将以 hosts 开头的行中的值按原样抄写,各项之间只留一个空格。列出的顺序就是查询顺序。
编写防火墙规则设计文档
在 /root/lfcs-net/firewall-plan.txt 中,按照 <동작> <프로토콜> <포트> <출발지> 格式,以如下顺序原样写入五行规则。
规则从上到下评估。必须先开放管理访问端口,并把默认拒绝放在最后,避免在远程操作时锁死自己。