Linux网络 —— Network namespace

Docker是基于Linux Kernel的namespace做的隔离,这里重点讨论linux的Network namespace网络隔离。

1.Linux中的网卡

# 查看网络信息 
ip a[ddr]
0
lo: 本地网卡,回环的网络接口127.0.0.1
eth0: 网络通信的,用来连接网络的
eth1: 本地网卡,虚拟机配置的网段,与宿主机关联
docker0: docker的网卡
# 简化命令 
ip link show 
# 都是以文件形式存储 
ls /sys/class/net
0
修改网络配置:linux 网络.note [参考]
cd /etc/sysconfig/network-scripts/ 
vi ifcfg-eth0
0
 一个网卡可以绑定多个IP
ip addr add 192.168.100.120/24 dev eth0    # 给eth0网卡添加192.168.100.120的ip信息
ip addr delete 192.168.100.120/24 dev eth0    # 删除添加的IP
0

2.Network Namespace

Network Namespace是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,它们有独自的网络栈信息.不管是虚拟机还是容器,运行的时候仿佛自己就在独立的网络中.
Network Namespace 实战
# 添加一个namespace
ip netns add ns1

# 查看当前具有的namespace
ip netns list

# 删除namespace
ip netns delete ns1

# 进入net的命名空间
ip netns exec ns1 ip a
0
ns1的lo 与宿主机网络是隔离的
0
默认lo的state状态时DOWN.
# 启动 lo 网卡
ip netns exec ns1 ifup lo
ip netns exec ns1 ip link set lo up    #等同于

# 停掉 lo 网卡
ip netns exec ns1 ifdown lo
ip netns exec ns1 link set lo down    #等同于
0

3.两个namespace互联

0
veth pair:虚拟以太网连接。必须是成对出现的。
思想:在宿主机上创建成对的veth网卡,分别分配给ns1和ns2,来实现ns1和ns2通讯的。
# 创建ns2,并启用网卡
ip netns add ns2
ip netns exec ns2 ip link set lo up

# 创建veth peer
ip link add veth-ns1 type veth peer name veth-ns2
0
# 将veth-ns1交给ns1
ip link set veth-ns1 netns ns1
ip netns exec ns1 ip a        # 查看
0
# 由于状态时Dwon,现在将它启用
ip netns exec ns1 ip link set veth-ns1 up
ip netns exec ns1 ip a    
 此处虽然网卡启动了,但是没有ip,因为它也不知道。所以要设置一下。
 
0
ip netns exec ns1 ip addr add 192.168.0.11/24 dev veth-ns1
ip netns exec ns1 ip a 
0
同理,设置ns2的veth
ip link set veth-ns2 netns ns2
ip netns exec ns2 ip a 
ip netns exec ns2 ip addr add 192.168.0.12/24 dev veth-ns2
ip netns exec ns2 ip a 
ip netns exec ns2 ip link set veth-ns2 up
ip netns exec ns2 ip a 

两边都设置好,成对的网卡才能上线,网卡状态都UP

0
现在状态如图
0
# 查看连通性
ip netns exec ns1 ping 192.168.0.12
ip netns exec ns2 ping 192.168.0.11

至此,两边网络是互通的。

posted @ 2022-05-10 11:36  海~~D  阅读(697)  评论(0编辑  收藏  举报