Linux网络命名空间(netns)实现内核级网络协议栈隔离,使不同服务拥有独立网卡、IP、路由表、iptables规则和端口空间,真正达成“网络不可见、不可连、不可干扰”。

Linux 网络命名空间(netns)能让服务运行在完全独立的网络环境中——各自有专属网卡、IP、路由表、iptables 规则和端口空间。同一台机器上,两个服务同时监听 80 端口不会冲突,彼此也看不见对方的网络设备或连接,真正实现“网络不可见、不可连、不可干扰”。这不是靠防火墙限制,而是内核级协议栈隔离。
快速创建并验证隔离环境
用 ip netns 命令可秒级创建命名空间,无需重启或安装额外组件:
- 创建两个命名空间:
sudo ip netns add app-prod和sudo ip netns add app-staging - 查看是否生效:
ls /var/run/netns/或sudo ip netns list - 进入任一命名空间执行命令:
sudo ip netns exec app-prod ip link show—— 输出仅含lo(DOWN 状态),无其他网卡,证明网络栈已清空 - 尝试从 host ping 命名空间内地址(尚未配置 IP)会失败;不同命名空间之间默认完全不通
配置可通信的虚拟网络链路
纯 netns 默认无外部连通能力。需通过 veth pair 搭建“虚拟网线”,一端在 host,一端在 netns:
Linux 性能分析与调优专家,覆盖 CPU、内存、磁盘 I/O、网络、内核参数、编译优化、容器/K8s。适用场景:系统卡顿/高负载、内存不足/OOM/Swap 高、CPU 异常/iowait 高。
- 创建 veth 对:
sudo ip link add veth-host type veth peer name veth-guest - 将 guest 端移入目标命名空间:
sudo ip link set veth-guest netns app-prod - host 侧配置 IP 并启用:
sudo ip addr add 192.168.100.1/24 dev veth-host && sudo ip link set veth-host up - 在命名空间内配置另一端:
sudo ip netns exec app-prod ip addr add 192.168.100.2/24 dev veth-guest,再执行sudo ip netns exec app-prod ip link set veth-guest up && ip link set lo up - 添加默认路由:
sudo ip netns exec app-prod ip route add default via 192.168.100.1
此时 app-prod 已具备完整三层网络能力,且与 host 及其他 netns 完全隔离,除非显式桥接或开启转发。
将服务绑定到指定网络命名空间
有两种主流方式启动服务并确保其运行在目标 netns 中:
-
启动时进入 netns:用
ip netns exec直接运行服务进程,例如sudo ip netns exec app-prod /usr/bin/python3 -m http.server 8000 -
启动后迁移调试:先启动服务(如 systemd 服务),再用
nsenter进入其 netns 查看状态:sudo nsenter -t $PID -n -U --preserve-credentials -r /bin/bash,然后执行ss -tln确认只监听预期地址 - 验证隔离性:从 host 执行
curl http://192.168.100.2:8000应成功;但切换到另一个 netns(如sudo ip netns exec app-staging curl http://192.168.100.2:8000)会超时或拒绝连接
持久化与生产环境注意事项
命名空间本身不自动持久化,关闭 shell 后若无进程驻留,netns 会被内核回收。生产部署需注意:
- 确保至少一个进程长期运行在 netns 内(如用
sleep infinity占位,或让服务进程自身驻留) - 若使用
unshare --net创建临时 netns,需配合--pid --fork --user避免 PID 混乱,并提前开启/proc/sys/user/max_user_namespaces - 跨命名空间通信若需更复杂拓扑(如多子网、VLAN、QoS),可结合
bridge、ovs-vsctl或iptables在 host 侧统一管理 - VPS 或云主机部署前,确认内核 ≥ 3.8,且
CONFIG_NET_NS=y已启用(绝大多数现代发行版默认支持)

















