我最近发现了Linux /TAP接口的存在,并且仍然试图理解它们。我想我有一个基本的概念--创建伪设备来模拟网络接口,而不是将数据传递给硬件,而是传递给用户空间程序。
你将如何指导一个无关的程序来利用这个隧道?
例如,在创建隧道之前,我的系统只包含eth0和lo、普通的以太网接口(连接到本地网络)和回送接口。在一个程序创建和配置了一个隧道之后,我有了一个新的接口gr0,我给出了一个IP地址,这个地址位于我的本地网络上,但没有使用(所以我们都在同一个子网上)。我如何使一个无关的程序利用这个‘隧道’?假设我有一个简单的Python消息传递客户机/服务器应用程序,它使用TCP连接,我如何配置它来使用隧道?
如果我错过了一些基本的东西,我很抱歉,但像往常一样,我设法把自己搞糊涂了。再说一遍,我只想让一个简单的TCP程序利用这个隧道。
谢谢!
发布于 2011-03-28 19:20:26
它并不总是“隧道”。TUN/TAP只是特定的NIC驱动程序。从网络堆栈的角度来看,它们充当任何其他网络接口:它们可以有IP地址,可以是点对点接口,也可以是广播接口。路由规则也适用于它们。但是,被写入其中一个网络接口的所有通信量都会转到某个用户空间程序进行处理,而用户空间程序直接写入/dev/tunX的所有数据看起来就像网络堆栈中的传入数据包。
在通常的隧道设置中,服务器和客户端都有具有指定地址的TUN设备。在这两种设备上配置的路由表将所需的通信量定向到此TUN设备。当数据包被路由到tun0时,内核将其发送到用户空间程序(client),后者通过例如TCP连接将此数据包发送到远程计算机(服务器)上的其他程序。在远程机器上,其他程序(服务器)接收来自客户端的数据包,并将其写入自己的/dev/tunX设备,将该数据包“注入”到网络堆栈中。隧道化的数据包就像其他的一样被处理。
https://unix.stackexchange.com/questions/10240
复制相似问题