您的位置 首页 docker

linux namespace 详解

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    # 删除宿主机的虚拟网卡

 

欢迎来撩 : 汇总all

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章