Skip to content

imkuang/virtual-switch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Virtual Switch

简易二层虚拟交换机,基于 TAP 设备实现远程组网(暂未实现身份认证和数据加密传输,不对安全性做保证,请勿用于正式用途)

使用说明

通过本仓库代码可编译出两个产物 vswitchvport,对应说明如下:

  • vswitch:运行在所有待组网设备均可访问到的设备上,实际处理二层交换的数据转发业务
  • vport:运行在所有待组网的设备上,创建 TAP 接口并将对应流量发送到 vswitch 进行转发

本工具的组网使用场景通常至少涉及三台设备,其中两台设备无法直接通信,但是均可与第三台设备通信。

在该第三台设备上运行 vswitch,需指定服务绑定的地址和端口,可选设置日志打印等级,如下:

./vswitch -d 2 -i 192.168.123.200 -p 20808

在另外两台可与 vswitch 通信的设备上运行 vport,需指定待创建的 TAP 设备名、上述远程 VSwitch 的 IP 地址和端口号,可选设置日志打印等级:

sudo ./vport -d 2 -n vtap -i 192.168.123.200 -p 20808

之后在这两台运行 vport 的设备上手动为刚刚创建的 TAP 设备设置同网段的 IP 地址并启用对应网络接口后即可通过 VSwitch 转发跟对方通信:

# PC1 设置 IP 地址并启用接口
sudo ip addr add 192.168.198.10/24 dev vtap
sudo ip link set vtap up

# PC2 设置 IP 地址并启用接口
sudo ip addr add 192.168.198.12/24 dev vtap
sudo ip link set vtap up

# 之后 PC1 和 PC2 之间可以通过上述设置的 IP 地址通信
ping 192.168.198.10
ping 192.168.198.12

系统架构图

基础系统架构图如下,其中 VSwitch 维护了一个转发表,记录各 MAC 地址和 VPort 的对应关系,并根据收到以太网帧的目的地址查询该转发表对数据包进行转发;VPort 通过 UDP Socket 与 VSwitch 建立连接,并将来自本地 TAP 设备的流量发送到 VSwitch 处理:

        +----------------------------------------------+
        |                   VSwitch                    |
        |                                              |
        |     +----------------+---------------+       |
        |     |          Forward Table         |       |
        |     |--------------------------------+       |
        |     |      MAC       |      VPort    |       |
        |     |--------------------------------+       |
        |     | 11:11:11:11:11 |    VPort-1    |       |
        |     |--------------------------------+       |
        |     | 22:22:22:22:22 |    VPort-2    |       |
        |     +----------------+---------------+       |
        |                                              |
        |           ^                       ^          |
        +-----------|-----------------------|----------+
                    |                       |
            +-------|--------+     +--------|-------+
            |       v        |     |        v       |
            | +------------+ |     | +------------+ |
            | | UDP Socket | |     | | UDP Socket | |
            | +------------+ |     | +------------+ |
            |       ^        |     |        ^       |
            |       |        |     |        |       |
            |(Ethernet Frame)|     |(Ethernet Frame)|
            |       |        |     |        |       |
      VPort |       v        |     |        v       | VPort
            | +------------+ |     | +------------+ |
            | | TAP Device | |     | | TAP Device | |
            | +------------+ |     | +------------+ |
            |       ^        |     |        ^       |
            +-------|--------+     +--------|-------+
                    v                       v
      -------------------------   -------------------------
      Computer A's Linux Kernel   Computer B's Linux Kernel

About

简易二层虚拟交换机(Layer-2 Virtual Switch),基于 TAP 设备实现远程组网

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published