mcpField
N
networking

networking

github.com/iuliandita云与 DevOps1088 次安装1 天前更新
代码仓库

关于 networking

面向基础设施运维人员的 Linux 网络配置、故障排查与性能优化技能,涵盖 DNS、代理、VPN、防火墙和路由,并强调变更验证与回滚。

主要功能

  1. 01DNS 与反向代理配置
  2. 02VPN、防火墙与 VLAN 设置
  3. 03路由与高可用配置
  4. 04网络诊断与性能调优
  5. 05变更验证与回滚

适用场景

  1. 01排查 DNS 或连接故障
  2. 02设置 VPN 与网络隔离
  3. 03配置代理与负载均衡器
  4. 04安全地调优网络性能

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/iuliandita/skills --skill networking

安装后在 Claude Code 中输入/networking确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
agent-hygiene.md
cheat-sheets.md
dns.md
ha.md
output-contract.md
reverse-proxies.md
segmentation.md
troubleshooting.md
vpn.md

详细介绍

网络:配置、故障排查与优化

配置、排查并优化 Linux 网络基础设施。涵盖 DNS、反向代理、VPN、防火墙(nftables)、VLAN、子网划分、高可用、动态路由和网络性能调优。

目标版本(2026 年 10 月):

工具版本备注
Caddy2.11.6自动 HTTPS、Caddyfile + JSON API;GHSA-6365-7ppr-5r92 已在 2.11.5 中修复
Nginx1.30.5 stable / 1.31.6 mainline已修补 CVE-2026-90439;包含 CVE-2026-42533/60005/56434 的修复
Traefik3.7.13(v2 分支为 2.11.57)原生支持 Gateway API,v2 即将 EOL
HAProxy3.4.6 LTS / 3.3.16 stable / 3.2.25 LTS3.4 LTS 将于 2031 年第二季度 EOL
WireGuard tools1.0.20260223内核模块 + 用户空间工具
strongSwan6.1.0(修复 CVE-2026-78133 及其他 10 项问题,2026-09-07)使用 swanctl 配置(旧版 ipsec.conf 已弃用)
nftables1.1.7iptables 的后继者,现代发行版上的默认选择
keepalived2.4.3VRRP + 健康检查
Unbound1.26.12026-09-16 公告发布后的安全最低版本
CoreDNS1.14.7K8s 默认 DNS,基于插件
FRRouting10.7.1于 2026-08-31 与 10.6.2/10.5.5/10.4.5 一同发布
Tailscale / HeadscaleHeadscale 0.29.4可自托管的控制服务
cloudflared2026.9.3Cloudflare Tunnel(仅出站)
OpenVPN2.7.7 / 2.6.23 LTS2.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 步:收集上下文

在编写配置或运行命令之前:

  1. 使用什么发行版和 init 系统?(systemd 还是 OpenRC——这会影响服务管理)
  2. 当前网络状态如何?(ip addr、ip route、ss -tlnp、resolvectl status)
  3. 是否已有防火墙?(nft list ruleset、iptables-save)
  4. 由谁管理 DNS?(resolvectl status 或 cat /etc/resolv.conf——检查是否使用 systemd-resolved 存根)
  5. 是否已有 VPN/覆盖网络?(wg show、tailscale status、用 ip link 检查 tun/wg/vxlan 设备)
  6. 是否位于 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)
digDNS 查询dig @8.8.8.8 example.com A +short
mtrtraceroute 与 ping 的组合工具mtr -n --report target(非交互模式)
tcpdump数据包捕获tcpdump -i any -nn port 53(DNS 流量)
tsharkWireshark 命令行工具tshark -i any -f 'port 443' -Y 'tls.handshake'
curlHTTP 测试curl -v -o /dev/null https://target(验证 TLS 和 HTTP 详情)
iperf3带宽测试服务端:iperf3 -s / 客户端:iperf3 -c server
nftnftables 规则管理nft list ruleset、nft monitor trace
wgWireGuard 状态wg show、wg showconf wg0
resolvectlsystemd-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高流量、静态文件手动或 certbotnginx.conf支持(stream 模块)
TraefikDocker/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.3CDE 分段在 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 防火墙模式、网络命名空间、IPv6
  • references/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 负责围绕网络配置管理进行流水线编排。

规则

  1. 先检查现有防火墙。 添加规则前,检查 nft list ruleset 和 iptables-save。在同一系统上混用 nftables 和 iptables 会导致不可预测的行为。
  2. 不可信网段上不得使用明文传输。 所有服务都必须使用 TLS 1.2+。如果某项服务需要在没有 TLS 的情况下穿越不可信网络,请通过 VPN 建立隧道。

评论

支持 Markdown