文章目录
1. Linux内核实现名称空间的创建
1.1 ip netns命令
可以借助ip netns命令来完成对 Network Namespace 的各种操作。ip netns命令来自于iproute安装包,一般系统会默认安装,如果没有的话,请自行安装。
**注意:**普通用户使用ip netns命令修改网络配置时需要 sudo 权限。
可以通过ip netns命令完成对Network Namespace 的相关操作,可以通过ip netns help查看命令帮助信息:
[root@docker ~]# ip netns help
Usage: ip netns list //查看所有名称空间
ip netns add NAME //创建名称空间
ip netns set NAME NETNSID //管理
ip [-all] netns delete [NAME]
ip netns identify [PID]
ip netns pids NAME
ip [-all] netns exec [NAME] cmd ...
ip netns monitor
ip netns list-id
默认情况下,Linux系统中是没有任何 Network Namespace的,所以ip netns list命令不会返回任何信息。
1.2 创建Network Namespace
命令:ip netns add <name>
示例:
通过命令创建一个名为ns0的命名空间:
1.查看名称空间
[root@docker ~]# ip netns list
2.创建名称ns0名称空间
[root@docker ~]# ip netns add ns0
3.查看创建的名称空间
[root@docker ~]# ip netns list
ns0
4.重复创建会出现报错如下:
[root@docker ~]# ip netns add ns0
Cannot create namespace file "/var/run/netns/ns0": File exists
新创建的 Network Namespace 会出现在/var/run/netns/
目录下。
[root@docker ~]# ls /var/run/netns/
ns0
每个 Network Namespace 会有自己独立的网卡、路由表、ARP 表、iptables 等和网络相关的资源。
1.3 操作Network Namespace
ip命令提供了ip netns exec
子命令可以在对应的 Network Namespace 中执行命令。
查看新创建 Network Namespace 的网卡ns0的信息
[root@docker ~]# ip netns exec ns0 ip address
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
新创建的 Network Namespace 中默认只有一个lo回环网卡,切该网卡为关闭状态,此时,尝试去 ping 该lo回环网卡,会提示Network is unreachable
[root@docker ~]# ip netns exec ns0 ping 127.0.0.1
connect: Network is unreachable
启用ns0的lo回环网卡:
1.开启网卡
[root@docker ~]# ip netns exec ns0 ip link set lo up
2.查看网卡是否开启
[root@docker ~]# ip netns exec ns0 ip add
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qd