Linux网络虚拟化基础:Linux bridge / Network Namespace

本文介绍了Linux网络虚拟化中的关键概念——Linux bridge和Network Namespace。Linux bridge用于虚拟网卡间的通信,而Network Namespace则提供内核资源隔离。通过将vif连接到Linux bridge,可以在不同namespace间实现网络隔离并进行通信。操作过程相对简单,但管理工具使用可能较为复杂。

Linux网络虚拟化基础:Linux bridge / Network Namespace

简述

 在网络虚拟化中,有两项技术的发展相当重要,甚至可以说是网络功能软件化、虚拟化的重要重要基础。

  • linux bridge (brctl)

 在linux中,对于创建的一些虚拟网卡之间实现通信,提供了linux bridge作为虚拟网桥,进行数据交换。

  • Network Namespace (ip netns)

 linux系统中,提供很多namespace用于实现内核资源相互隔离,相互隔离的资源之间互不影响,在现有资源下提供轻量级的虚拟化的服务。

 本文将通过network namespace跟linux bridge介绍最为基础的网络虚拟化的基础应用。

说明

 在同一台linux host上构造如下,创建两个vif放入不同的network namespace进行网络隔离,通过将vif连接到linux bridge上实现通信。
在这里插入图片描述

操作

[root@localhost baojx]# ifconfig -a
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 64  bytes 5408 (5.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 64  bytes 5408 (5.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

// 创建网桥br
[root@localhost baojx]# brctl addbr br
[root@localhost baojx]# brctl show
bridge name	bridge id		STP enabled	interfaces
br		8000.000000000000	no	

// 生成bridge管理口br
[root@localhost baojx]# ifconfig -a
br: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether 12:3f:c2:3c:08:83  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 648 (648.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 64  bytes 5408 (5.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 64  bytes 5408 (5.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

// 使能bridge管理口br,配置IP
[root@localhost baojx]# ip link set dev br up
[root@localhost baojx]# ip address add 192.168.0.254/24 dev br
[root@localhost baojx]# ifconfig br
br: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.254  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::9441:51ff:feff:524b  prefixlen 64  scopeid 0x20<link>
        ether 96:41:51:ff:52:4b  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 21  bytes 3535 (3.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

// 创建虚拟接口并attach到linux bridge端口
[root@localhost baojx]# ip link add veth0 type veth peer name br-vif-0
[root@localhost baojx]# ip link add veth1 type veth peer name br-vif-1
[root@localhost baojx]# ip address add 192.168.0.1/24 dev veth0
[root@localhost baojx]# ip link set veth0 up
[root@localhost baojx]# ip link set veth1 up
[root@localhost baojx]# ip link set br-vif-0 up
[root@localhost baojx]# ip link set br-vif-1 up
[root@localhost baojx]# ifconfig 
br: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.254  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::9441:51ff:feff:524b  prefixlen 64  scopeid 0x20<link>
        ether 96:41:51:ff:52:4b  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1505  bytes 398024 (388.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

br-vif-0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::8c4b:1fff:fec9:e8ae  prefixlen 64  scopeid 0x20<link>
        ether 8e:4b:1f:c9:e8:ae  txqueuelen 1000  (Ethernet)
        RX packets 85  bytes 19249 (18.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 648 (648.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

br-vif-1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::7821:8fff:fe7f:40d6  prefixlen 64  scopeid 0x20<link>
        ether 7a:21:8f:7f:40:d6  txqueuelen 1000  (Ethernet)
        RX packets 87  bytes 19322 (18.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 648 (648.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 64  bytes 5408 (5.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 64  bytes 5408 (5.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.1  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::fc45:2ff:fe76:50fb  prefixlen 64  scopeid 0x20<link>
        ether fe:45:02:76:50:fb  txqueuelen 1000  (Ethernet)
        RX packets 8  bytes 648 (648.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 85  bytes 19249 (18.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.2  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::bcc5:18ff:fe20:f886  prefixlen 64  scopeid 0x20<link>
        ether be:c5:18:20:f8:86  txqueuelen 1000  (Ethernet)
        RX packets 8  bytes 648 (648.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 87  bytes 19322 (18.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

// 将虚拟bridge port添加到linux bridge,并开启端口混杂模式,接受所有数据包
[root@localhost baojx]# brctl addif br br-vif-0
[root@localhost baojx]# brctl addif br br-vif-1
[root@localhost baojx]# ip link set br-vif-0 promisc on
[root@localhost baojx]# ip link set br-vif-1 promisc on
[root@localhost baojx]# ifconfig br-vif-o
br-vif-o: error fetching interface information: Device not found
[root@localhost baojx]# ifconfig br-vif-0
br-vif-0: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
        inet6 fe80::8c4b:1fff:fec9:e8ae  prefixlen 64  scopeid 0x20<link>
        ether 8e:4b:1f:c9:e8:ae  txqueuelen 1000  (Ethernet)
        RX packets 305  bytes 76400 (74.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 194  bytes 49524 (48.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@localhost baojx]# ifconfig br-vif-1
br-vif-1: flags=4419<UP,BROADCAST,RUNNING,PROMISC,MULTICAST>  mtu 1500
        inet6 fe80::7821:8fff:fe7f:40d6  prefixlen 64  scopeid 0x20<link>
        ether 7a:21:8f:7f:40:d6  txqueuelen 1000  (Ethernet)
        RX packets 310  bytes 76872 (75.0 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 196  bytes 50044 (48.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

// 创建network namespace ns
[root@localhost baojx]# ip netns add ns
[root@localhost baojx]# ip netns
ns

// 将veth1按入network namespace ns,进入namespace配置IP
[root@localhost baojx]# ip link set veth1 netns ns
[root@localhost baojx]# ip netns exec ns bash
[root@localhost baojx]# ip link set veth1 up
[root@localhost baojx]# ip address add 192.168.0.2/24 dev veth1
[root@localhost baojx]# ifconfig
veth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.2  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::bcc5:18ff:fe20:f886  prefixlen 64  scopeid 0x20<link>
        ether be:c5:18:20:f8:86  txqueuelen 1000  (Ethernet)
        RX packets 708  bytes 183522 (179.2 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 568  bytes 142153 (138.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

// 检查对另外一个namespace的网络联通性
[root@localhost baojx]# ping 192.168.0.1 -c 1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=0.048 ms

--- 192.168.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.048/0.048/0.048/0.000 ms

总结

至此,最为简单的模拟完成,本身组织实现并不复杂,只是一些管理工具cli比较难用。小记作为对之前摸索学习过程的小结。当然实际操作中还有其他比较有意思的小细节、小现象,在此就不一一赘述了。

银灿IS918M-GA量产工具是针对银灿(Innodisk)品牌的特定型号固态硬盘(SSD)设计的专业软件,主要用于对这些硬盘进行批量生产和修复操作。版本221206指的是该工具的更新日期,即2022年12月6日,通常这样的更新意味着修复了之前的bug,增加了新功能,或优化了性能。在IT行业中,"量产工具"是一种专门用于对存储设备进行初始化、格式化、分区、写入数据等操作的软件。这类工具对于生产环境尤其重要,因为它们可以高效地处理大量硬件,而无需手动逐一操作。银灿IS918M-GA量产工具就是这样一个专用的工具,适用于银灿IS918M-GA系列的固态硬盘。银灿(Innodisk)是一家专注于企业级存储解决方案的制造商,其产品广泛应用于数据中心、云计算、工业自动化等领域。IS918M-GA可能是一款针对这些市场设计的高性能、高可靠性的SSD。量产工具则为这些硬盘提供了一种标准化的管理方式,确保在大规模部署时能够快速、一致地完成设置。在文件名称列表中提到的“IS918MPTool”可能是这个量产工具的主程序文件,用户通过运行这个程序来启动和控制整个量产过程。此外,量产工具通常会包含一系列辅助文件,如驱动程序、配置文件、固件更新等,这些都可能在同一个压缩包内。使用量产工具时,用户首先需要连接待处理的固态硬盘,然后根据软件界面的指引进行操作。这可能包括选择操作模式(如初始化、格式化、固件升级等)、设置分区参数、分配容量等。在批量操作中,工具会自动按预设步骤处理每个设备,大大提高了工作效率。在更新到版本221206后,用户可能会发现以下改进:1. **性能提升**:新版本可能优化了内部算法,使得数据处理速度更快。2. **稳定性增强**:修复了可能导致工具崩溃或操作失败的bug,提升了整体稳定性。3. **兼容性扩展**:可能增加了对新固件或硬件的支持,扩大了适用范围。4. **新功能添加**:可能加入了新的操作选项,如新的加密技术或更灵活的分区策略。5. **用户体验改善**:改进了用户界面,使操作更直观,或者提供了更多的错误提示和帮助信息。银灿IS918M-GA量产工具版本221206是针对特定SSD型号的专业管理软件,它提供了批量生产和修复功能,帮助企业用户更高效地管理和维护他们的存储设备。使用这样的工具,不仅可以节省时间,还能确保设备的统一性和可靠性。在使用前,务必仔细阅读官方文档,了解如何正确操作,以避免可能的数据丢失或设备损坏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值