网络命名空间(netns)具备完整独立网络栈,但默认仅含未启用的lo接口,需手动配置veth、IP、路由、转发及DNS才可实现外网通信。

Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
确认网络命名空间是否具备完整网络栈
网络命名空间(netns)是隔离的网络环境,但默认不自带网卡、IP、路由或 DNS。先进入命名空间检查基础状态:
sudo ip netns exec myns ip addr show
若输出为空或只有 lo(且未启用),说明没有虚拟网卡接入;若 lo 是 DOWN 状态,需先启用:
sudo ip netns exec myns ip link set lo up
再检查是否分配了 IPv4 地址——没有有效地址(非 127.0.0.1)则无法通信。
验证虚拟网卡连接与路由配置
典型 netns 外网访问依赖一对 veth 设备:一端在 host,一端在 netns,并通过 host 的转发/NAT 或桥接实现互通。
需确认以下三点:
• host 侧 veth 接口是否 UP,是否桥接到有外网能力的接口(如 eth0)或已配 NAT 规则
• netns 内 veth 接口是否 UP,是否有合法 IP(如 10.0.0.2/24)
• netns 内是否存在默认路由指向 host 侧 veth 的 IP(如 sudo ip netns exec myns ip route add default via 10.0.0.1)
缺路由是常见原因,仅靠 veth 连通 ≠ 可达外网。
检查 host 的转发与 NAT 是否生效
netns 自身无网关能力,必须依赖 host 转发流量并做 SNAT/DNAT。
执行以下命令验证:
• sysctl net.ipv4.ip_forward —— 必须为 1
• sudo iptables -t nat -L POSTROUTING -v -n —— 应含类似 MASQUERADE 规则,源地址匹配 netns 子网(如 10.0.0.0/24)
• 若用 nftables,查 sudo nft list chain ip nat POSTROUTING
未开启转发或漏写 NAT,netns 发出的包能到 host,但无法以 host 身份发出到外网。
排查 DNS 与应用层连通性
即使 ping 8.8.8.8 成功,仍可能因 DNS 失效而无法解析域名。
进入 netns 后检查:
• sudo ip netns exec myns cat /etc/resolv.conf —— 需包含可用 nameserver(如 114.114.114.114),不能复用 host 的 systemd-resolved 套接字路径
• sudo ip netns exec myns nslookup baidu.com 114.114.114.114 —— 强制指定 DNS 测试解析是否独立工作
• 若用 curl/wget,注意某些发行版 netns 中缺少 ca-certificates 或 TLS 根证书,导致 HTTPS 请求失败,可加 -k 绕过验证测试连通性

















