关于 networking
面向基础设施运维人员的 Linux 网络配置、故障排查与性能优化技能,涵盖 DNS、代理、VPN、防火墙和路由,并强调变更验证与回滚。
主要功能
- 01DNS 与反向代理配置
- 02VPN、防火墙与 VLAN 设置
- 03路由与高可用配置
- 04网络诊断与性能调优
- 05变更验证与回滚
适用场景
- 01排查 DNS 或连接故障
- 02设置 VPN 与网络隔离
- 03配置代理与负载均衡器
- 04安全地调优网络性能
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ iuliandita/ skills --skill networking安装后在 Claude Code 中输入/networking确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/agent-hygiene.mdcheat-sheets.mddns.mdha.mdoutput-contract.mdreverse-proxies.mdsegmentation.mdtroubleshooting.mdvpn.md详细介绍
网络:配置、故障排查与优化
配置、排查并优化 Linux 网络基础设施。涵盖 DNS、反向代理、VPN、防火墙(nftables)、VLAN、子网划分、高可用、动态路由和网络性能调优。
目标版本(2026 年 10 月):
| 工具 | 版本 | 备注 |
|---|---|---|
| Caddy | 2.11.6 | 自动 HTTPS、Caddyfile + JSON API;GHSA-6365-7ppr-5r92 已在 2.11.5 中修复 |
| Nginx | 1.30.5 stable / 1.31.6 mainline | 已修补 CVE-2026-90439;包含 CVE-2026-42533/60005/56434 的修复 |
| Traefik | 3.7.13(v2 分支为 2.11.57) | 原生支持 Gateway API,v2 即将 EOL |
| HAProxy | 3.4.6 LTS / 3.3.16 stable / 3.2.25 LTS | 3.4 LTS 将于 2031 年第二季度 EOL |
| WireGuard tools | 1.0.20260223 | 内核模块 + 用户空间工具 |
| strongSwan | 6.1.0(修复 CVE-2026-78133 及其他 10 项问题,2026-09-07) | 使用 swanctl 配置(旧版 ipsec.conf 已弃用) |
| nftables | 1.1.7 | iptables 的后继者,现代发行版上的默认选择 |
| keepalived | 2.4.3 | VRRP + 健康检查 |
| Unbound | 1.26.1 | 2026-09-16 公告发布后的安全最低版本 |
| CoreDNS | 1.14.7 | K8s 默认 DNS,基于插件 |
| FRRouting | 10.7.1 | 于 2026-08-31 与 10.6.2/10.5.5/10.4.5 一同发布 |
| Tailscale / Headscale | Headscale 0.29.4 | 可自托管的控制服务 |
| cloudflared | 2026.9.3 | Cloudflare Tunnel(仅出站) |
| OpenVPN | 2.7.7 / 2.6.23 LTS | 2.7.x:多套接字、DCO;2.6 是 LTS 分支 |
安全复核(2026-10-02):nginx 的发布者安全公告 将 CVE-2026-90439(HTTP/3 缓冲区溢出)评为中危:受影响版本为 1.29.2-1.31.5,已在 1.30.5+ 或 1.31.6+ 中修复。CVE-2026-42533(map/正则表达式缓冲区溢出)评为重大: 受影响版本为 0.9.6-1.31.2,已在 1.30.4+ 或 1.31.3+ 中修复;CVE-2026-60005 和 CVE-2026-56434 也已在相同的 1.30.4+/1.31.3+ 版本中修复。CVE-2026-42530(HTTP/3 释放后使用)影响 1.31.0-1.31.1,已在 1.31.2+ 中修复。另一个更早的 CVE-2026-42945 (rewrite 缓冲区溢出)已在 1.30.1/1.31.0 中修复。检查已启用的模块和 供应商回移补丁。 Unbound 安全公告也 将 CVE-2026-32665 评为高危:启用了 DoQ 的 1.22.0-1.25.1 版本会受影响,已在 1.25.2 中修复。评估暴露风险前,请检查编译时是否支持 DoQ,以及已配置的监听器。
适用场景
- 配置 DNS 服务器(Unbound、CoreDNS、dnsmasq、BIND9、Pi-hole、AdGuard Home)
- 设置或排查反向代理和负载均衡器
- VPN 配置(WireGuard、OpenVPN、IPsec)和覆盖网络
- Linux 防火墙规则(nftables、旧版 iptables)
- VLAN 配置、子网划分、网络分段
- 使用 keepalived/VRRP 实现高可用、浮动 IP
- 网络诊断(tcpdump、mtr、ss、dig、iperf3、Wireshark/tshark)
- TCP/网络性能调优(MTU、缓冲区、拥塞控制、缓冲区膨胀)
- 使用 FRRouting 进行动态路由(BGP、OSPF)
- 网络服务的 TLS/证书管理
- 分视图 DNS、DNS-over-HTTPS/TLS、DNSSEC
不适用场景
- OPNsense/pfSense 防火墙设备管理(使用 opnsense-pfsense)
- 网页浏览、抓取或无头页面交互——使用主机的浏览工具
- Kubernetes 网络:NetworkPolicy、Gateway API、服务网格、CNI(使用 kubernetes)
- 广泛的 Kubernetes 集群健康检查、节点状态和维护后诊断(使用 kubernetes-health)
- Docker/容器网络:bridge、overlay、Compose 网络(使用 docker)
- 云 VPC、安全组、托管负载均衡器(使用 terraform)
- 通过 playbook 大规模管理网络配置(使用 ansible)
- 攻击性渗透测试、漏洞利用、横向移动(使用 privilege-escalation)
- 应用层安全审查、SSRF、标头注入(使用 security-audit)
- 在流水线规模上通过 CI/CD 自动管理网络配置(使用 ci-cd)
AI 自检
在返回任何生成的网络配置之前,请验证:
- 不硬编码机密信息:密码、PSK、API 密钥使用占位符或环境变量
- 接口名称正确:不要假设接口名是
eth0——现代 Linux 使用可预测的名称 (enp0s3、ens18等)。请询问或检查ip link输出 - 考虑 MTU:VPN 隧道需要降低 MTU(WireGuard:1420,OpenVPN:约 1400,VXLAN: 1450)。MTU 不匹配会导致数据包被静默丢弃
- DNS 解析器顺序:systemd-resolved、/etc/resolv.conf 与 NetworkManager——修改前请检查 当前启用的是哪种 DNS 管理器
- 防火墙规则持久化:将已验证的规则文件安装为 /etc/nftables.conf,并
启用 nftables.service,以便在重启后保留配置。原始的
nft add命令不会持久化 - 检查端口冲突:反向代理端口(80、443)可能与现有服务冲突。请通过
ss -tlnp验证 - TLS 版本:所有服务最低使用 TLS 1.2。支持时优先使用 TLS 1.3
- 私有 IP 地址范围正确:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16(不是 /24)
- 子网不重叠:VPN 地址范围不得与 LAN 或其他 VPN 地址范围重叠
- 考虑 IPv6:配置双栈或明确禁用 IPv6。配置不完整的 IPv6 会绕过仅支持 IPv4 的 VPN 泄漏 流量
- 修改前备份:更改前保存当前配置(
nft list ruleset > backup.nft、cp nginx.conf nginx.conf.bak)。网络配置错误可能导致远程访问中断 - 服务重新加载还是重启:优先使用平滑重新加载(
nginx -s reload、systemctl reload),而非重启,以免中断活动连接 - 启用 IP 转发:任何涉及路由、VPN 或 VLAN 间流量的配置都需要设置
net.ipv4.ip_forward = 1(双栈环境还需设置net.ipv6.conf.all.forwarding = 1)。 否则,内核会静默丢弃转发的数据包 - 检查 systemd-resolved 冲突:如果部署本地 DNS 服务器(Unbound、CoreDNS、
dnsmasq),请检查 systemd-resolved 是否绑定了端口 53。禁用其存根监听器
(
DNSStubListener=no),或将你的服务器绑定到其他端口 - 验证拓扑:更改前确认接口名称、路由、DNS 解析器、命名空间、VPN 状态和防火墙后端
- 保留回滚方案:远程网络更改应包含定时回滚、控制台访问或备用路径
- 已应用跨领域 Agent 操作规范——参见
references/agent-hygiene.md
性能
- 调优前,分别测量路径、DNS、TLS 和应用延迟。
- 使用范围较窄的过滤器和时间窗口进行数据包捕获,避免捕获文件过大或泄露隐私。
- 适当使用持久化 nftables 集合、DNS 缓存和代理连接复用。
工作流
进行任何更改时,复制此检查清单并跟踪进度:
- [ ] Step 1: Task type identified and matching reference read
- [ ] Step 2: Current state captured (addresses, routes, firewall, DNS manager, VPNs)
- [ ] Step 3: One change applied with a saved config and an armed rollback
- [ ] Step 4: Validated (on failure: restore, fix, return to Step 3)
步骤 1:确定任务类型
| 任务类型 | 从以下内容开始 | 参考 |
|---|---|---|
| 故障排查 | 症状、近期更改、受影响范围 | references/troubleshooting.md |
| 配置 DNS | 当前解析器、权威解析还是递归解析、分视图解析需求 | references/dns.md |
| 设置反向代理 | 使用哪种代理、上游服务、TLS 要求 | references/reverse-proxies.md |
| 配置 VPN | 拓扑(点对点、中心辐射式、网状)、协议选择 | references/vpn.md |
| 网络分段 | VLAN、子网、nftables 区域、命名空间 | references/segmentation.md |
| 高可用性 | keepalived/VRRP、浮动 IP、健康检查 | references/ha.md |
第 2 步:收集上下文
在编写配置或运行命令之前:
- 使用什么发行版和 init 系统?(systemd 还是 OpenRC——这会影响服务管理)
- 当前网络状态如何?(
ip addr、ip route、ss -tlnp、resolvectl status) - 是否已有防火墙?(
nft list ruleset、iptables-save) - 由谁管理 DNS?(
resolvectl status或cat /etc/resolv.conf——检查是否使用 systemd-resolved 存根) - 是否已有 VPN/覆盖网络?(
wg show、tailscale status、用ip link检查 tun/wg/vxlan 设备) - 是否位于 NAT 之后?(这会影响 VPN、反向代理和 HA 设计)
第 3 步:实施
阅读相应的参考文件,了解详细模式。关键原则:
- 先测试,再持久化。 添加 nftables 规则,验证连接,然后再保存。应用反向
代理配置更改前,先使用
--dry-run或语法检查(caddy validate、nginx -t、haproxy -c)。 - 一次只做一项更改。 通过 SSH 操作时,保存要更改的准确规则/路由/管理器配置,并在应用前安排经过测试的恢复命令。重启网络的通用操作不算回滚。通过
systemctl list-timers nft-rollback.timer确认计时器存在;只有在第二个会话确认管理访问正常,且流量允许/阻止情况符合预期后,才取消计时器。对于 nftables,请严格运行:nft -c -f new.nft # syntax check; stop on error { echo 'flush ruleset'; nft list ruleset; } > /root/nft-rollback.nft systemd-run --on-active=5m --unit=nft-rollback \ nft -f /root/nft-rollback.nft # one atomic transaction nft -f new.nft systemctl list-timers nft-rollback.timer # confirm the rollback is armed systemctl stop nft-rollback.timer # only after the second-session check - 记录所做的更改。 不知道发生了什么变化时,网络故障排查会困难 10 倍。
第 4 步:验证
如果检查失败,请恢复已保存的配置(或等待回滚计时器触发),修正更改,然后返回第 3 步。先检测缺失的工具:
for t in dig mtr tcpdump iperf3 nft wg; do command -v "$t" >/dev/null || echo "missing: $t"; done
| 验证项 | 方法 |
|---|---|
| DNS 解析 | dig @server domain A +short、dig domain AAAA +short |
| 反向代理 | curl -v https://domain(验证证书信任、标头和上游响应) |
| VPN 隧道 | wg show(WireGuard)、通过隧道执行 ping、检查 ip route |
| 防火墙规则 | nft list ruleset,测试允许和阻止的流量 |
| VLAN 标记 | ip -d link show、tcpdump -e -i interface(检查 802.1Q 标记) |
| HA 故障转移 | 停止主节点,验证 VIP 是否迁移,检查 journalctl -u keepalived |
| 性能 | iperf3 -c server、mtr target,检查丢包和抖动 |
快速参考:诊断工具
| 工具 | 用途 | 主要用法 |
|---|---|---|
ip | 接口、路由、邻居和规则管理 | ip addr、ip route、ip neigh、ip link |
ss | 套接字统计(替代 netstat) | ss -tlnp(TCP 监听)、ss -ulnp(UDP) |
dig | DNS 查询 | dig @8.8.8.8 example.com A +short |
mtr | traceroute 与 ping 的组合工具 | mtr -n --report target(非交互模式) |
tcpdump | 数据包捕获 | tcpdump -i any -nn port 53(DNS 流量) |
tshark | Wireshark 命令行工具 | tshark -i any -f 'port 443' -Y 'tls.handshake' |
curl | HTTP 测试 | curl -v -o /dev/null https://target(验证 TLS 和 HTTP 详情) |
iperf3 | 带宽测试 | 服务端:iperf3 -s / 客户端:iperf3 -c server |
nft | nftables 规则管理 | nft list ruleset、nft monitor trace |
wg | WireGuard 状态 | wg show、wg showconf wg0 |
resolvectl | systemd-resolved 状态 | resolvectl status、resolvectl query domain |
nmap | 端口扫描、服务检测 | nmap -sV -p 1-1024 target |
socat | 多用途中继 | socat TCP-LISTEN:8080,fork TCP:backend:80 |
快速参考:CIDR 和 DNS
CIDR/子网掩码及 DNS 记录类型对照表位于 references/cheat-sheets.md。只有在任务需要具体映射时才加载该文件。
快速参考:反向代理选择
| 代理 | 最适合 | TLS | 配置方式 | L4 支持 |
|---|---|---|---|---|
| Caddy | 简单部署、自动 HTTPS | 自动(ACME) | Caddyfile / JSON API | 支持(实验性) |
| Nginx | 高流量、静态文件 | 手动或 certbot | nginx.conf | 支持(stream 模块) |
| Traefik | Docker/K8s、动态后端 | 自动(ACME) | 标签 / 文件 / K8s CRD | 支持(TCP/UDP) |
| HAProxy | 纯负载均衡、L4/L7 | 手动 | haproxy.cfg | 支持(原生) |
新的单主机部署默认选择 Caddy;如果已有已部署的代理,则继续使用它。
Caddy 反向代理快速入门
# /etc/caddy/Caddyfile - three subdomains, auto-HTTPS
app.example.com {
reverse_proxy localhost:3000
}
api.example.com {
reverse_proxy localhost:8080
}
grafana.example.com {
reverse_proxy localhost:3001
}
Caddy 通过 ACME(Let's Encrypt)自动处理 TLS 证书签发。三个子域名的 DNS A/AAAA
记录都必须指向该主机。验证:caddy validate --config /etc/caddy/Caddyfile。
阅读 references/reverse-proxies.md,了解配置模式、TLS 设置、
健康检查、速率限制以及 WebSocket/gRPC 代理。
快速参考:VPN 协议选择
| 协议 | 速度 | 复杂度 | 密钥交换 | 最适合 |
|---|---|---|---|---|
| WireGuard | 最快 | 配置最简单 | Noise (Curve25519) | P2P、中心辐射型、通用场景 |
| OpenVPN | 良好 | PKI 复杂 | TLS/x509 | 旧系统、tap 模式(L2) |
| IPsec (strongSwan) | 良好 | 最复杂 | IKEv2 | 站点到站点、符合标准要求 |
| Tailscale/Headscale | 快(底层使用 WG) | 零配置 | WG + DERP 中继 | 覆盖网络网状组网、远程访问 |
| Nebula | 快 | 低 | 基于证书 | 大型网状网络、Slack 规模 |
默认选择 WireGuard;只有在“最适合”列中的需求适用时,才选择其他协议。
WireGuard 站点到站点快速入门
每个对等端都必须路由其本地 LAN。如果 WireGuard 运行在独立主机上,而不是 LAN 的 默认网关上,则在每个 LAN 网关上添加一条路由,让远程 LAN 经由本地 WireGuard 主机访问。验证两个方向的返回路由、转发和防火墙策略;仅隧道对等端之间 能够 ping 通,并不能证明 LAN 到 LAN 的连通性。
# Site A (/etc/wireguard/wg0.conf) - 10.0.1.0/24
[Interface]
PrivateKey = <SITE_A_PRIVATE_KEY>
Address = 10.100.0.1/30
ListenPort = 51820
# MTU: derive from measured underlay; 1420 for 1500-byte underlay with 80-byte overhead,
# or 1412 for a 1492-byte PPPoE underlay with the same overhead.
[Peer]
PublicKey = <SITE_B_PUBLIC_KEY>
Endpoint = site-b.example.com:51820
AllowedIPs = 10.0.2.0/24, 10.100.0.2/32
PersistentKeepalive = 25
# Site B (/etc/wireguard/wg0.conf) - 10.0.2.0/24
[Interface]
PrivateKey = <SITE_B_PRIVATE_KEY>
Address = 10.100.0.2/30
ListenPort = 51820
[Peer]
PublicKey = <SITE_A_PUBLIC_KEY>
Endpoint = site-a.example.com:51820
AllowedIPs = 10.0.1.0/24, 10.100.0.1/32
PersistentKeepalive = 25
两端都需要在 /etc/sysctl.d/ 中设置 net.ipv4.ip_forward = 1。AllowedIPs 是远程
子网(而不是 0.0.0.0/0——那是全隧道模式,不是站点到站点模式)。按照
references/vpn.md 中的说明,在新的受保护目录中使用 umask 077 生成密钥;切勿覆盖现有密钥。
阅读 references/vpn.md,了解设置模式、密钥管理、MTU 调优、
NAT 穿透和覆盖网络比较。
快速参考:nftables 与 iptables
iptables 已过时。nftables 是 Debian 11+、RHEL 9+、Arch 和大多数现代发行版的默认选择。
# Minimal nftables ruleset - stateful firewall with SSH
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
iif lo accept
tcp dport 22 accept
icmp type echo-request accept
icmpv6 type { echo-request, nd-neighbor-solicit, nd-neighbor-advert, nd-router-advert } accept
}
chain forward { type filter hook forward priority 0; policy drop; }
chain output { type filter hook output priority 0; policy accept; }
}
阅读 references/segmentation.md,了解 VLAN 设置、nftables 区域、网络
命名空间和 VLAN 间路由模式。
PCI-DSS 4.0 相关性
网络配置涉及多项 PCI-DSS 要求:
| 要求 | 领域 | 检查内容 |
|---|---|---|
| 1.2 | 网络安全控制 | 防火墙规则将入站/出站流量限制在必要的最小范围 |
| 1.3 | CDE 分段 | 在 CDE 与其他网络之间使用 VLAN、nftables 或物理隔离 |
| 1.4 | 可信/不可信边界 | 反向代理 TLS 终止、WAF 部署位置 |
| 2.2 | 加固 | 禁用不必要的服务,关闭未使用的端口 |
| 4.1 | 传输中加密 | 所有位置均使用 TLS 1.2+,不可信网段上不传输明文 |
| 11.3 | 网络监控 | IDS/IPS(Suricata)、日志聚合、流量分析 |
参考文件
references/dns.md- DNS 服务对比、DNSSEC、分视图、DoH/DoT、Pi-hole/AdGuard、故障排查references/reverse-proxies.md- Caddy、Nginx、Traefik、HAProxy 配置模式、TLS、WebSocket、gRPC、速率限制references/vpn.md- WireGuard、OpenVPN、IPsec/strongSwan 配置、覆盖网络(Tailscale、Headscale、Nebula、ZeroTier)、密钥管理references/segmentation.md- VLAN、子网划分、nftables 防火墙模式、网络命名空间、IPv6references/troubleshooting.md- 诊断方法、工具深入解析、常见问题、性能调优references/ha.md- keepalived/VRRP、浮动 IP、HAProxy + keepalived 高可用、健康检查模式references/cheat-sheets.md- CIDR/子网掩码表、私有/CGNAT/链路本地/ULA 地址范围、DNS 记录类型
输出约定
完整约定请参阅 references/output-contract.md。
- 技能名称: NETWORKING
- 交付类别:
audits - 模式: 有条件。当调用来分析、审查、审计或改进现有仓库内容时,遵循
references/output-contract.md中的报告篇幅和证据规则,并将交付内容写入docs/local/audits/networking/<YYYY-MM-DD>-<slug>.md。当调用来回答问题、讲解概念、构建新产物或生成内容时,可自由回复,不受该约定限制。 - 严重性等级:
P0 | P1 | P2 | P3 | info(参见共享约定;仅用于审计/审查模式)。
相关技能
- opnsense-pfsense - 管理基于 BSD 的防火墙设备(OPNsense、pfSense)。本技能处理 Linux 网络;opnsense-pfsense 处理 FreeBSD 设备防火墙。如果用户提及 pfctl、CARP 或 OPNsense/pfSense 主机名,请转交给 opnsense-pfsense。
- kubernetes - 负责 K8s 网络(NetworkPolicy、Gateway API、服务网格、CNI)。本技能涵盖通用 DNS 和代理配置;K8s 专属网络交由 kubernetes 处理。
- kubernetes-health - 负责只读 Kubernetes 集群诊断。如果请求是“集群是否健康?”,而不是“配置 DNS/代理/路由”,请转交给该技能。
- docker - 负责容器网络(桥接、Compose 网络、端口映射)。本技能涵盖主机级 Linux 网络。
- terraform - 负责云基础设施(VPC、安全组、云负载均衡器、Route53)。本技能涵盖裸机/虚拟机网络。
- ansible - 通过 playbook 大规模管理配置。本技能提供网络知识;ansible 负责自动化封装。
- privilege-escalation - 负责攻击性网络测试、漏洞利用、横向移动。本技能涵盖防御性配置和加固。
- security-audit - 负责应用层安全审查(SSRF、标头注入)。本技能涵盖网络层安全(防火墙、TLS、网络分段)。
- 网页内容检索使用主机的浏览工具;本技能配置网络基础设施。
- ci-cd - 负责自动化网络配置管理的流水线设计。本技能提供网络知识;ci-cd 负责围绕网络配置管理进行流水线编排。
规则
- 先检查现有防火墙。 添加规则前,检查
nft list ruleset和iptables-save。在同一系统上混用 nftables 和 iptables 会导致不可预测的行为。 - 不可信网段上不得使用明文传输。 所有服务都必须使用 TLS 1.2+。如果某项服务需要在没有 TLS 的情况下穿越不可信网络,请通过 VPN 建立隧道。