今天有人问我这个问题,离当时解决时已经过了大半年了,现在发出来希望能帮到有需要的人。

我当时是用的f3版本的,那时候有个quantum-dhcp服务,该服务需要开启namespace,步骤:

1.配置文件中开启namespace。

2.启动quantum-dhcp服务,查看日志,若有错误如:

Command: ['sudo', 'ip', 'netns', 'exec', '85060b32-1329-44fb-878e-3e691b82bfdf', 'ip', '-o', 'link', 'show', 'tap4c5e8caa-38']

Exit code: 255

Stdout: ''

Stderr: 'Object "netns" is unknown, try "ip help".\n'

https://bugs.launchpad.net/quantum/+bug/1034161

解决:

内核组件支持: CONFIG_NET_NS=y

安装最新iproute2 (iproute2-3.3)

并将ip命令移动到/sbin下


报错:无法Bind /proc/self/ns/net 文件不存在

解决:升级最新内核,我用的3.2.28


启动quantum-dhcp时 在其日志里发现错误而导致无法正常使用:

sudo ip netns exec 3f68d8dc-b761-4cb9-a3bf-7e8c4a227da9 ip -o link show tap4cffe1f8-07

seting the network namespace failed: Function not implemented\n'



解决:修改iproute2中源码:

vi /iproute2/ip/ipnetns.c



添加:#define __NR_setns 308

./configure

make

make install



308这个值依赖系统当前内核,在/usr/src下搜索unistd.h,使用这个文件中的值


常用的namespace的命令:


1. 添加一个namespace

sudo ip netns add [name]



2. 在namespace中启用一个设备

sudo ip netns exec   [name]  ip link set lo up



3. 在namespace中新加一个设备

sudo ip link set  [dev-name]   netns  [name]

启用:

sudo ip netns exec   [name]  ip link set [dev-name] up



4. 查看指定namespace中指定设备的参数信息

sudo ip netns exec  [name] ip addr show   [dev-name]   permanent scope global



5. 为namespace中指定设备设置ip

sudo ip netns exec   [name]  ip -4 addr add 192.168.1.2/24 brd 192.168.1.255 scope global dev   [dev-name]  



6.查看所有network namespace

ip netns list



7.ping虚拟机实例

ip netns exec [name] ping 192.168.1.3