在隔离网络命名空间中绑定独立ip需通过veth pair桥接并手动配置,因netns默认仅有down状态的lo;创建netns后添加veth设备对,一端移入并重命名为eth0、配ip启用,另一端在宿主机配同网段网关ip并启用。

在隔离的网络命名空间中绑定独立 IP,关键不是“直接分配”,而是通过虚拟网络设备(veth pair)桥接并手动配置——因为 netns 默认只有未启用的 lo,没有任何外部网卡或 IP。
创建干净的网络命名空间
先建立一个完全隔离的环境:
-
sudo ip netns add myapp —— 创建名为
myapp的 netns -
sudo ip netns exec myapp ip link show —— 只能看到
lo@NONE,且状态为 DOWN - sudo ip netns exec myapp ip addr show —— 不会显示任何 IPv4 地址(除可能的 ::1)
添加虚拟网卡并分配 IP
必须引入一对虚拟以太网设备(veth pair),一端留在宿主机,一端移入命名空间:
- sudo ip link add veth-app type veth peer name veth-app-br
-
sudo ip link set veth-app-br netns myapp —— 把
veth-app-br移进去 -
sudo ip netns exec myapp ip link set veth-app-br name eth0 —— 在 netns 内重命名为
eth0(更直观) - sudo ip netns exec myapp ip addr add 10.200.1.10/24 dev eth0 —— 绑定你要的独立 IP
- sudo ip netns exec myapp ip link set eth0 up && sudo ip netns exec myapp ip link set lo up
配置宿主机侧连通性
仅给 netns 配 IP 不够,它还不能和外界通信。需同步配置宿主机端:
- sudo ip link set veth-app up
- sudo ip addr add 10.200.1.1/24 dev veth-app —— 宿主机用同网段网关 IP
- 如需访问外网,还需开启转发并配置 NAT(非必需,仅当需要上网时)
验证 IP 是否生效且真正独立
确认这个 IP 只属于该 netns,不与宿主机或其他 netns 冲突:
-
sudo ip netns exec myapp ip addr show eth0 —— 应明确显示
10.200.1.10/24 -
ip addr show veth-app —— 宿主机上只看到自己的
10.200.1.1,看不到10.200.1.10 - sudo ip netns exec myapp ping -c 2 10.200.1.1 —— 应成功;换另一个 netns 执行则失败











