Linux中用ip netns实现跨命名空间路由的核心是:创建隔离环境、用veth pair连通、启用IP转发(如作路由器)、配置双向路由表与默认网关,确保数据按正确路径转发。

在 Linux 中用 ip netns 实现不同命名空间间的路由,核心是“创建隔离环境 + 连通设备 + 启用转发 + 配置路由表”。关键不在命令堆砌,而在理解数据流向和每个环节的职责。
创建并初始化命名空间
先建立两个或多个独立网络环境,每个默认只有 lo 回环接口,且处于 DOWN 状态:
- 创建命名空间:
ip netns add ns1、ip netns add ns2 - 启用回环接口(必须):
ip netns exec ns1 ip link set lo up、ip netns exec ns2 ip link set lo up - 验证:运行
ip netns exec ns1 ip addr应看到lo处于 UP 状态
用 veth pair 建立跨命名空间链路
veth 是一对虚拟网卡,像一根网线直连两个命名空间。一端进一个空间,另一端进另一个空间:
- 创建配对设备:
ip link add veth-ns1 type veth peer name veth-ns2 - 把两端分别移入对应空间:
ip link set veth-ns1 netns ns1、ip link set veth-ns2 netns ns2 - 为两端配置 IP 并启用:
ip netns exec ns1 ip addr add 192.168.100.1/24 dev veth-ns1ip netns exec ns2 ip addr add 192.168.100.2/24 dev veth-ns2ip netns exec ns1 ip link set veth-ns1 upip netns exec ns2 ip link set veth-ns2 up
配置路由使流量可达
仅配 IP 不足以互通,还需明确“去往某网段该走哪条路”:
- 在
ns1中添加到ns2子网的路由(如果子网不重叠):ip netns exec ns1 ip route add 192.168.100.0/24 via 192.168.100.2 dev veth-ns1 - 更常见的是设默认网关(适用于单跳直连):
ip netns exec ns1 ip route add default via 192.168.100.2 - 同理,在
ns2中设置:ip netns exec ns2 ip route add default via 192.168.100.1 - 检查路由表:
ip netns exec ns1 ip route show
启用内核 IP 转发(如需充当中间路由器)
若要让某个命名空间(比如 ns0)作为路由器,连接三个及以上子网,必须开启转发功能:
- 临时启用:
ip netns exec ns0 sysctl -w net.ipv4.ip_forward=1 - 持久化(可选):进入
ns0后修改/etc/sysctl.conf或使用sysctl.d - 注意:转发只影响该命名空间内的协议栈行为,不影响其他命名空间



















