【问题标题】:which physical interface tun/tap device attached to连接到哪个物理接口 tun/tap 设备
【发布时间】:2014-02-28 02:12:52
【问题描述】:

我在理解 tun/tap 设备的实际工作原理时遇到了一点问题,这是来自 wiki 的内容

  1. 虚拟网络设备实际上是如何工作的?虚拟网络设备可以看作是一个简单的点对点或以太网设备, 它不是从物理媒体接收数据包,而是接收 它们来自用户空间程序,而不是通过 物理媒体将它们发送到用户空间程序。

假设您在 tap0 上配置了 IPX,那么只要 内核向tap0发送一个IPX数据包,它被传递给应用程序 (例如 VTun)。应用程序对其进行加密、压缩和发送 通过 TCP 或 UDP 到另一端。另一边的申请 解压缩和解密接收到的数据并将数据包写入 TAP 设备,内核处理数据包,就像它来自真实的一样 物理设备。

好的 应用程序对其进行加密、压缩并通过 TCP 或 UDP 将其发送到另一端。

如果您有 3 个物理连接每个路由到互联网,tun/tap 设备将使用哪个物理设备路由到互联网?

我很困惑,因为没有人真正谈论 tun/tap 接口和实际物理接口/s 之间的真正关系是什么

提前打个招呼

【问题讨论】:

    标签: sockets networking tap tun


    【解决方案1】:

    TUN/TAP 没有(直接)连接到任何物理接口。 程序使用它们向虚拟实体(用户空间程序而不是物理设备)写入/读取 L2/L3 数据包。

    TUN 的一个用例如下: 您在“RealDeal”机器上有一个虚拟机。 VM 有一个 NIC(虚拟),它为 VM 处理以太网帧。但是“RealDeal”会剥离所有以太网帧头并将 IP 数据包发送到上游。这是个问题。 连接到网桥的 Tap 接口告诉操作系统,如果数据包是用于 VM 的,则不要剥离以太网标头。

    【讨论】:

      【解决方案2】:

      没有内在的关系。

      重要的是要了解 TUN/TAP 和任何其他设备都不会进行路由。 Internet 协议 (IP) 路由由 IP 堆栈处理,它无法真正区分 TAP 接口和真正的以太网接口。 IP 堆栈从 TUN/TAP 接口接收的数据包是由同一台机器上的程序生成的,当 IP 堆栈将数据包路由出 TUN 或 TAP 接口时,它们仅由打开该接口的软件接收。将它们视为连接到软件的以太网端口,而不是真正的以太网。

      您似乎很好地掌握了您引用的示例。 Vtun(软件)打开 tap0 接口和一个套接字,然后像任何其他 IP 流量一样路由该套接字。 Vtun 获取它在 tap0 上接收到的数据包,并使用加密和压缩对其进行封装,然后将它们推出套接字。该套接字另一端的另一个 Vtun 实例(可能在另一台机器上运行)从套接字解封装数据包并将它们推送到其 TAP 接口以供其内核的网络层处理。

      但套接字根本不是 TAP 的一部分,它的路由方式取决于 IP 堆栈。如果 Vtun 的两个实例在同一系统上运行,则套接字将不需要路由出物理接口。在这样的用例中,可以完全删除套接字(以及加密和压缩)。您可以让一个程序在两个 TAP 接口之间愚蠢地复制数据。 TUN/TAP 规范中没有任何内容需要套接字或物理接口;示例套接字是附带的,是 Vtun 程序的本质引入的一个功能。

      因此,您关于互联网的三个物理连接的问题与 TUN/TAP 无关,而是与一般 IP 路由有关。答案很大程度上取决于您的具体配置。

      【讨论】:

      • 非常感谢,最近我仔细查看了openvpn代码,我发现openvpn软件本身就是绑定到以太网接口的那个,从openvpn收到一个数据包解密然后写它直接到关联的 tun/tab 设备,然后当操作系统回复(使用任何软件)将流量发送到该 tun/tab 时,openvpn 将直接从 tun/tab 设备读取数据,对其进行加密并压缩,然后将其封装然后 openvpn 标头将其发送到第一次接收流量的同一个绑定接口。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 2021-08-15
      • 1970-01-01
      • 2012-03-10
      • 2020-07-20
      • 1970-01-01
      • 2014-01-26
      相关资源
      最近更新 更多