Mr.*_*nce 10 networking tunneling
我最近发现了 Linux TUN/TAP 接口的存在,并且仍在尝试理解它们。我想我得到了基本概念 - 创建了模拟网络接口的伪设备,而不是将数据传递给硬件,而是传递给用户空间程序。
您将如何指导不相关的程序使用此隧道?
例如,在创建隧道之前,我的系统仅包含 eth0 和 lo、普通以太网接口(连接到我的本地网络)和环回接口。在程序创建和配置隧道后,我有一个新的接口 gr0,我提供了一个位于本地网络上但未使用的 IP 地址(因此我们都在同一个子网上)。我如何让一个不相关的程序利用这个“隧道”?假设我有一个简单的 Python 消息传递使用 TCP 连接的客户端/服务器应用程序,我该如何配置它以使用隧道?
如果我遗漏了一些基本的东西,我深表歉意,但像往常一样,我设法让自己在事情的计划中感到困惑。同样,我想要的只是让一个简单的 TCP 程序利用这个隧道。
谢谢!
它并不总是“隧道”。TUN/TAP 只是特定的 NIC 驱动程序。从网络堆栈的角度来看,它们充当任何其他网络接口:它们可以拥有 IP 地址,可以是点对点或广播接口。路由规则也适用于它们。但是,写入其中一个网络接口的所有流量都会转到某个用户空间程序进行处理,并且用户空间程序直接写入的所有数据/dev/tunX
看起来都像是网络堆栈的传入数据包。
在通常的隧道设置服务器和客户端具有分配地址的 TUN 设备。在它们两个上配置的路由表将所需的流量定向到此 TUN 设备。当数据包被路由到 tun0 时,内核将它发送到用户空间程序(客户端),该程序将这个数据包通过例如 TCP 连接发送到远程机器(服务器)上的其他程序。在远程机器上,其他程序(服务器)从客户端接收数据包并将其写入自己的/dev/tunX
设备,将该数据包“注入”到网络堆栈中。隧道数据包和其他数据包一样被处理。
归档时间: |
|
查看次数: |
7768 次 |
最近记录: |