Featured image of post qemu 虚拟机的网络配置

qemu 虚拟机的网络配置

linux 虚拟化网络有一些非常重要的基础知识,这块需要慢慢学习,慢慢读懂!

https://developers.redhat.com/blog/2018/10/22/introduction-to-linux-interfaces-for-virtual-networking#dummy_interface

orgmode 的无序列表像 python 一样极为严格,需要手动调整。

一个华中科技大学 12 年硕士毕业的大佬,对于虚拟化的研究比较深,尤其是 CEPH (分布式文件系统块),还有网络配置这部分。

https://runsisi.com/2022/08/27/qemu-macvtap/

对比大佬的博客和我的博客,我发现他更重视内容,也不管写的长短,还有人家只要求对自己有用,中英混起来毫无压力,函数的的调用顺序都看得出来是自己多看代码总结出来的。最最重要的是真实的理解,而非浅层的科普。这样看的话,一个月写七八篇博客不如一个月写一篇精品。或者说写了一大堆冗长的基础介绍不如短短的讲一下一点的突破。

一年看不完一本书,一年没专门为锻炼跑过一次步。有价值的事做的越少,枯萎的大脑和萎缩的肌肉就越惨。看有价值的书,还有做有价值的事。为了自己,也为了世界,少浪费时间。

什么是 TUN 和 TAP 设备?

https://zh.wikipedia.org/wiki/TUN%E4%B8%8ETAP

TUN 和 TAP设备的名称来源于它们各自的作用和工作方式。它们都是虚拟网络设备,主要用于创建虚拟网络接口,尤其是在VPN(虚拟私人网络)和虚拟化环境中。具体来说:

  1. TUN 设备 (即 network TUNnel 的缩写):
    • TUN 设备通常用于传输 IP 数据包(例如 IPv4 或IPv6)。它模拟的是一个 点对点 网络设备,工作在 网络层(Layer 3) ,也就是传输 IP 数据包。它允许用户空间程序(如 VPN 客户端)处理IP 包并在虚拟机或宿主机之间进行转发。
    • 命名解释 :TUN 设备的名字源自 “tunnel” ,指的是它通常用于通过虚拟化技术创建隧道,通常用于像 VPN这样的场景,允许不同的网络之间建立连接。
  2. TAP 设备 (即 network tap 的缩写):
    • TAP 设备模拟的是一个 以太网设备 ,它工作在 数据链路层(Layer 2) 。TAP设备能够处理原始的以太网帧,允许用户空间程序接收和发送以太网帧,从而创建一个虚拟以太网接口。
    • 命名解释 :TAP 设备的名字源自 “tap” ,意思是像 “网络监控点” 或"网络接口"。它通常用于需要原始数据链路层(以太网层)访问的场景,如虚拟机间的网络桥接、创建虚拟局域网等。

区别:

  • TUN :工作在 IP 层(Layer 3),处理的是 IP 数据包。常用于 VPN等点对点通信。
  • TAP :工作在数据链路层(Layer 2),处理的是以太网帧。常用于虚拟化环境或虚拟网卡桥接。

因此,TUN 和 TAP 设备的命名实际上是根据它们各自的网络层次(网络层 vs数据链路层)和作用来定义的。“TUN” 来自于 “tunnel”(隧道),而 “TAP"来自于 “tap”(接入点或监视点)。tap 英语中既有“摸”的意思,又有窃听、监听的意思。这只是一个名词,关键还要知道这 TUN 和 TAP 的虚拟设备都实现了哪些功能。

什么是 SLIRP 网络环境(Serial Line Internet Routing Protocol)?

SLIRP 网络环境 (SLIRP Network Environment)通常与虚拟化或网络仿真相关,尤其是在容器化、虚拟机或某些模拟网络环境中。 SLIRP是 SLIP (Serial Line Internet Protocol)的一个变种,通常用于实现网络连接,尤其是在没有直接访问宿主网络的情况下,通过某种中间层实现网络通信。SLIRP主要用于以下场景:

1. SLIRP 简介

SLIRP 是一种通过 用户空间网络仿真 的技术,它允许虚拟机、容器或其他隔离环境中的设备通过宿主机的网络与外界通信。SLIRP提供了一种无需直接暴露宿主机网络接口的方式,在某些情况下,像虚拟机、Docker容器等环境可以使用 SLIRP 来实现 外部互联网连接

SLIRP 的名字源自于 SLIP (Serial Line Internet Protocol),一个早期用于串行端口(如拨号连接)来传输 IP数据包的协议。 SLIRP 则是在 SLIP的基础上进行了扩展,允许虚拟环境中的设备通过用户空间的网络栈与宿主机通信。

2. SLIRP 的工作原理

SLIRP实现的核心思想是将网络连接代理从虚拟环境转发到宿主环境。虚拟机或容器通过SLIRP 连接时,会向宿主机的网络栈发起请求,宿主机通过 SLIRP中间层将这些请求转换为真实的网络通信。

具体来说,SLIRP环境中,虚拟机或容器的网络通信不会直接连接到宿主机的物理网络接口,而是通过一种用户空间程序(通常由SLIRP实现的代理程序)来进行虚拟化的网络通信。这种方式允许虚拟化环境中的设备 共享宿主机的网络连接 ,从而使得它们可以访问外部网络(如互联网),但又不会暴露宿主机的网络接口。

特性/协议SLIPSLIRP
设计目标简单地将 IP 数据包通过串行连接传输在 SLIP 基础上增加了更多功能(如错误检测、路由、地址分配等)
错误检测无错误检测提供了基本的错误检测(如校验和)
地址分配无自动地址分配支持自动 IP 地址分配(类似 DHCP)
路由功能无路由功能提供了基本的路由功能
多用户支持通常不支持多用户连接支持多个设备共享互联网连接(通过 NAT 或类似技术)
使用场景简单的串行连接,通常用于拨号网络连接用于需要多设备共享网络连接的环境

3. SLIRP 的应用场景

  • 虚拟机和容器网络连接 :在没有完全网络隔离(如没有桥接网络)的情况下,SLIRP可以使虚拟机或容器与宿主机以及外部网络进行通信,通常用于开发、测试和模拟环境。

  • 网络仿真 :SLIRP可用于网络仿真和虚拟化环境,在一些网络测试和调试场景中,将虚拟化网络与真实网络的连接进行仿真。

  • 容器网络(如 Docker) :在某些 Docker 容器的配置中,SLIRP可以作为容器访问外部网络的一种方式,尤其是在没有直接使用桥接或端口映射时。

4. SLIRP 的优点

  • 无需修改宿主机网络配置 :SLIRP提供了一种无需修改宿主机网络接口配置的方式来使虚拟环境能够访问外部网络。
  • 简单易用 :作为用户空间的网络代理,SLIRP配置相对简单,不需要复杂的网络桥接和路由配置。
  • 网络隔离 :SLIRP在提供外部连接的同时,仍然能够保持虚拟环境的网络隔离,不直接暴露宿主机的网络接口。

5. SLIRP 的缺点

  • 性能问题 :由于 SLIRP是用户空间实现的网络代理,相比直接使用宿主机网络接口或桥接模式,可能会存在性能瓶颈,尤其是在需要大量网络流量的应用中。
  • 功能限制 :SLIRP 不支持某些高级的网络功能,如 IP地址的静态分配、端口转发等,限制了它在某些复杂网络环境中的应用。

6. SLIRP 与其他虚拟化网络模式的对比

  • 桥接模式(Bridge Mode) :在桥接模式下,虚拟机或容器的网络接口直接连接到宿主机的网络接口,并拥有自己的IP 地址。这种方式相比 SLIRP提供更高的网络性能和更灵活的网络配置,但需要更多的配置和可能的安全隐患。

  • NAT 模式(Network Address Translation) :NAT模式允许虚拟环境中的设备通过宿主机的网络接口访问外部网络,通常通过地址转换来实现。这种模式与SLIRP 类似,但具有更多的灵活性和更高的性能。

  • Host-only模式 :在这种模式下,虚拟环境仅能与宿主机通信,不直接访问外部网络。它提供了更强的网络隔离性,但无法实现互联网连接。

7. 总结

SLIRP网络环境是通过用户空间代理的方式使虚拟机或容器能够与外部网络通信的一种技术。它无需直接暴露宿主机的网络接口,提供了一种简单、隔离的网络连接方式,尤其适用于一些简单的开发、测试或仿真场景。尽管它在性能上可能不如桥接模式或NAT 模式,但它为需要安全性和简便性的虚拟化环境提供了一个有效的解决方案。

VEPA 模式和 BRIDGE 模式有什么区别

orgtable 和 table.el 两种表格,前一种让导出的文件正常;后一种让orgmode 的源文件可以调整表格宽度。

特性/维度Bridge模式VEPA模式
网络架构基于虚拟交换机/桥接设备,将虚拟机流量转发到物理网络直接通过硬件虚拟化技术(如SR-IOV)连接物理网卡虚拟接口,实现低延迟高吞吐量通信
数据转发路径虚拟机数据流经虚拟交换机(如bridge)后转发到物理网络数据通过硬件虚拟接口直接与物理网卡通信,绕过虚拟交换机
性能性能较低,网络延迟较高,吞吐量受限于虚拟交换机的处理能力高性能,低延迟,高吞吐量,适合高性能网络需求
硬件依赖不依赖硬件虚拟化,纯软件实现依赖硬件虚拟化支持(如 SR-IOV)
虚拟机间通信虚拟机间通信通常通过虚拟交换机进行虚拟机间通信可以通过直接连接的物理网卡的虚拟接口(VF)实现
适用场景适用于一般虚拟化场景,虚拟机与外部网络通信,负载较轻的环境适用于高性能计算、大规模虚拟化环境、云数据中心等高性能网络需求场景
配置复杂性配置相对简单,常见的虚拟化平台(如 KVM、VirtualBox)都支持配置较为复杂,需要硬件支持(如SR-IOV),多用于数据中心和高性能场景

debian 系和 rhel 系默认网络的配置文件不一样,debian 使用的是 /etc/network/interfaces ,在这里面既有网络接口 eth0 ,又有桥接接口 br0;而 rhel 使用的是/etc/sysconfig/network-scripts/ifcfg-br0 和 /etc/sysconfig/network-scripts/ifcfg-eth0 。

什么是 MACVLAN 和 MACVTAP ?

我有一台可以用起测试的虚拟机。我也可以在另外两台服务器上从新搭建一下。这部分的知识比较重要,要多花一些时间真正的弄懂。有这么一些名词 VLAN (虚拟局域网)、VXLAN (可扩展的虚拟局域网)。VLAN 主要是分割广播域(broadcast domain )而出现的一种设置。VXLAN 是为了解决 VLAN ID 数量有限的问题,VXLAN 是通过 UDP 协议来实现的, VXLAN 本身并不关心虚拟机内部传输的协议类型。无论是 TCP、UDP 还是其他协议,它都会将这些协议的流量封装在 VXLAN 数据包内,通过 UDP 传输。

仔细咀嚼,弄懂每一句话。和看数学题一样。

常用的三种设置方式

NAT (默认最简单的方式)

使用User Networking (SLIRP) 这个软件包虚拟出来一个网关(路由器)

需要内核打开 echo 1 > /proc/sys/net/ipv4/ip_forward

或者通过编辑 /etc/sysctl.conf 文件来永久启用:

net.ipv4.ip_forward = 1

sysctl -p

一种桥接(独立ip 但与宿主机网不通)

与宿主机和宿主机所在局域网下都通

这是我想学习其原理的一种配置方法。

未完成,后续补上