linux namespace 详解
Linux Namespace是Linux系统提供的一种资源隔离机制,可实现系统资源隔离的列表如下:
IPC:
用于隔离进程间通信。
MNT:
用于隔离文件系统和提供硬盘挂载点。
NET:
用于隔离网络。
PID:
用于隔离进程ID。
User:
用于隔离用户和用户组。
UTS:
用于隔离HostName和DomianName。
ll /proc/$$/ns
接下来 我们用 net 来 看看 是如何做到隔离的
NET网络名称空间测试案例:
(1)创建一个名称为"baimei-linux"的网络名称空间
[root@baimeidashu ~]#ip netns add baimei-linux
[root@baimeidashu ~]#ll /var/run/netns/baimei-linux
-r--r--r-- 1 root root 0 Jun 11 20:41 /var/run/netns/baimei-linux
(2)启动"baimei-linux"的网络名称空间的网卡
ip netns exec baimei-linux ping 127.0.0.1 # 未启动网卡,无法ping通自己。
我们开启一下网卡
ip netns exec baimei-linux ifconfig lo up
再执行:
ip netns exec baimei-linux ping 127.0.0.1
(3)宿主机创建网络设备对
创建一对 网络
ip link add veth100 type veth peer name veth200
ip a # 会多出来2块网卡,即veth100,veth200。
(4)将"veth200"设备关联到我们自定义的"baimei-linux"网络名称空间
ip link set veth200 netns baimei-linux
ip a # 你会发现宿主机的veth200不见啦!
(5)将"veth200"设备配置IP地址
ip netns exec baimei-linux ip a
ip netns exec baimei-linux ifconfig veth200 172.31.100.200/24 up
ip netns exec baimei-linux ip a
(6)宿主机veth100也配置IP地址
ifconfig veth100 172.31.100.100/24 up
ifconfig veth100
ping 172.31.100.200
是可以ping 通的
(7)baimei-linux"的网络名称空间ping宿主机的IP地址
ip netns exec baimei-linux ping 172.31.100.100
是可以ping 通的
ip netns exec baimei-linux ping 10.0.0.102 # 未添加网关,无法跨网段ping通
怎么才能通呢? 我们配置一下网关
ip netns exec baimei-linux route add default gw 172.31.100.100 # 配置默认网关
ip netns exec baimei-linux route -n
ip netns exec baimei-linux ping 10.0.0.202 # Duang~可以ping通啦!
我们测试一下外网
ip netns exec baimei-linux ping baidu.com # 无法访问外网,这是正常的!此处建议pingIP地址,域名解析需要DNS。
找到 39.156.66.10
tcpdump -i veth100 -nn icmp # 宿主机可以抓取到数据报文。
ip netns exec baimei-linux ping 39.156.66.10
ip netns exec baimei-linux iptables -vnL -t nat # 如果想要连接外网,可以尝试手动配置NAT。
(8)测试完成后,删除名称空间
ll /var/run/netns/ # 可以先查看挂载点文件是否存在
ip netns del baimei-linux # 删除名称空间
ll /var/run/netns/
ip link del veth100 # 删除宿主机的虚拟网卡