服务公告

服务公告 > 技术教程 > 网络命名空间与 veth:动手理解虚拟网络

网络命名空间与 veth:动手理解虚拟网络

发布时间:2025-11-28 10:43
## 概念 容器网络、虚拟机网络听起来复杂,拆到最底层其实只依赖两个内核机制。网络命名空间把网络栈整体隔离:每个命名空间有自己独立的网卡、路由表、iptables 规则与端口空间,互不可见。虚拟以太网设备 veth 成对出现,从一端进去的包会从另一端出来,把两个命名空间用一根虚拟网线连起来。容器网络再花哨,本质也是这两样东西的规模化管理。 ## 原理:两个空间一根线 想象两个独立的网络世界:根命名空间是宿主机本身,新建的命名空间起初只有一块 DOWN 状态的本地回环,连 ping 自己都费劲,它对网络的全部认知都是空白的。要让它与外界沟通,就建一对 veth,一端放进新命名空间改名,另一端留在宿主机,两端分别配上网段内的地址,两个世界便互通了。宿主机上再多一步,把留在宿主的一端挂进网桥,新命名空间就能借宿主的路由访问外部,这正是容器网络的标准骨架。用几个命名空间加几对 veth,就能在单机上摆出一个微型数据中心,网络拓扑的每次改动都可以先在这个沙盘里推演。 ## 最小实操 建命名空间与 veth 对,并分别配置地址。 ``` ip netns add box1 ip link add veth0 type veth peer name veth1 ip link set veth1 netns box1 ip addr add 10.0.0.1/24 dev veth0 ip link set veth0 up ip netns exec box1 ip addr add 10.0.0.2/24 dev veth1 ip netns exec box1 ip link set veth1 up ip netns exec box1 ping 10.0.0.1 ``` 最后一条 ping 通,隔离与互通就同时得到了演示:宿主机上任何进程看不到 box1 里的端口,box1 里的进程却有完整的网络能力。进入命名空间执行命令的写法,也是平时排查容器网络的标准入口,先弄清目标进程在哪个命名空间里,再进那个空间查它的地址与路由。 ## 常见错误 一是忘了把两端都置 UP,链路状态没起来,配了地址也不通;二是两端地址配错网段,veth 是二层设备,三层不通先查地址与路由;三是实验结束不清理,命名空间与残留的 veth 会让后续实验的网络状态越来越混乱,用 ip netns del 与 ip link del 及时收拾。顺云云服务器上自建容器环境前,先手工搭一遍这个最小模型,理解了它,容器网络的各种问题就有了下手的位置。