veth pair本质是创建一对直连虚拟网线:1. 创建命名空间ns1和veth0/veth1,将veth1移入ns1;2. 双端配ip(192.168.100.1/24和192.168.100.2/24)并up;3. 互相ping通验证;4. 如需上网,开启ip_forward、加snat规则、设默认路由。

Linux 中用 veth pair(虚拟以太网对)连接网络命名空间和宿主机,本质是创建一对“直连网线”:一端放进命名空间,另一端留在宿主机,再配好 IP 和启用接口即可通信。
1. 创建命名空间和 veth 对
先建一个独立的网络环境,再生成成对的虚拟网卡:
-
创建命名空间:
ip netns add ns1 -
创建 veth 对:
ip link add veth0 type veth peer name veth1(veth0 留宿主机,veth1 进命名空间) -
把 veth1 移入命名空间:
ip link set veth1 netns ns1
2. 配置并启用两端接口
命名空间内必须激活 lo,两端都要配 IP 并 up 起来:
-
启动命名空间的回环:
ip netns exec ns1 ip link set lo up -
为宿主机端 veth0 配地址:
ip addr add 192.168.100.1/24 dev veth0,然后ip link set veth0 up -
为命名空间端 veth1 配地址:
ip netns exec ns1 ip addr add 192.168.100.2/24 dev veth1,再ip netns exec ns1 ip link set veth1 up
3. 验证通信是否正常
从两边互相 ping,确认链路通:
-
从宿主机 ping 命名空间:
ping -c 3 192.168.100.2 -
从命名空间 ping 宿主机:
ip netns exec ns1 ping -c 3 192.168.100.1
4. 可选:让命名空间访问外网
若需命名空间通过宿主机上网,还需两步:
-
开启宿主机 IP 转发:
echo 1 > /proc/sys/net/ipv4/ip_forward -
加 SNAT 规则(假设宿主机外网口是 eth0):
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j MASQUERADE -
在命名空间里设默认路由:
ip netns exec ns1 ip route add default via 192.168.100.1











