51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

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    # 删除宿主机的虚拟网卡
赞(7)
未经允许不得转载:工具盒子 » linux namespace 详解