前言:原文在我的博客网站中,持续更新数通、系统方面的知识,欢迎来访!
创建命名空间(Namespaces)并配置虚拟网卡https://myweb.myskillstree.cn/85.html
目录
简述:
命名空间(Namespaces)是Linux内核提供的一种隔离机制,用于将系统资源(如进程、网络、文件系统、用户等)隔离成不同的视图,使得不同的进程组在不同的命名空间中具有独立的资源视图。

命名空间提供了一种轻量级的虚拟化解决方案,可以在不增加额外的系统资源开销的情况下,实现多租户、安全隔离和资源共享等功能,一个命名空间里有一个进程及所需资源。
对系统资源进行分区,以实现某种形式的进程隔离,这样,对一个命名空间中资源的更改不会影响其他命名空间中的资源,包括进程 ID、主机名、用户 ID、文件名和网络接口等。
可以虚拟化网络堆栈,每个网络名称空间都有自己的资源,例如网络接口、IP 地址、路由表、隧道、防火墙等,例如,iptables添加到网络名称空间的规则只会影响进入和离开该名称空间的流量。
命名空间的一些命令展示:
ip netns help # 查阅帮助
ip netns list # 查看所有命名空间
ip netns delete <name> # 删除命名空间
ip all netns delete # 删除所有命名空间
ip netns add net0 # 创建net0的命名空间
ip netns add net1 # 创建net1的命名空间
ip netns exec net0 bash # 进入net0的bash
exit # 退出命名空间
ip link set lo up # 打开环回网卡
两种为命名空间执行命令的方式
1、在宿主机上执行ip netns exec bash进入命名空间的bash后再执行命令
2、在宿主机上执行ip netns exec net0 +命令,直接在宿主机上进行控制
Veth Pair
成对的虚拟网络设备接口,可以用户连接容器/网桥/命名空间,相关命令展示如下:
ip link add type veth # 创建veth pair网卡
ip link set veth0 netns net0 # 将veth0网卡添加到net0的命名空间
ip link set veth1 netns net1 # 将veth1网卡添加到net1的命名空间
ip netns exec net0 ip addr add 10.0.0.1/24 dev veth0 # 为net0的veth0网卡添加地址
ip netns exec net1 ip addr add 10.0.0.2/24 dev veth1 # 为net1的veth1网卡添加地址
练习
- 创建命名空间net0和net1;
- 创建一对Veth网卡并为每个命名空间分配一个Veth网卡;
- 为Veth网卡添加IP地址并实现相互通信;
1、切换到root用户
su root
2、创建命名空间net0和net1
ip netns add net0 # 创建net0的命名空间
ip netns add net1 # 创建net0的命名空间
ip netns list # 查看所有命名空间
3、创建一对Veth网卡并为每个命名空间分配一个Veth网卡
ip link add type veth # 创建veth pair网卡
ip link set veth0 netns net0 # 将veth0网卡添加到net0的命名空间
ip link set veth1 netns net1 # 将veth1网卡添加到net1的命名空间
4、为Veth网卡添加IP地址并实现相互通信
ip netns exec net0 ip link set veth0 up # 打开命名空间net0的veth0网卡
ip netns exec net0 ip link set veth1 up # 打开命名空间net1的veth1网卡
ip netns exec net0 ip addr add 10.0.0.1/24 dev veth0 # 为net0的veth0网卡添加地址
ip netns exec net1 ip addr add 10.0.0.2/24 dev veth1 # 为net1的veth1网卡添加地址
测试:
用命名空间net0的veth网卡去ping一下net1的veth网卡
ip netns exec net0 ping 10.0.0.2