gpt4 book ai didi

sockets - 使用 TUN/TAP 读取传入的数据,封装为 UDP 并传输

转载 作者:行者123 更新时间:2023-12-03 11:54:32 25 4
gpt4 key购买 nike

我有一个 tun/tap 设备,用于从一个接口(interface)读取传入的数据包,并通过另一个接口(interface)将它们作为 UDP 数据包发送。我可以实现这一点,可以读取发送到 tun/tap 接口(interface)的 ICMP 包,还可以使用 UDP 远程获取它们。但是当我尝试将输入接口(interface)的默认网关更改为 tun/tap 设备时,就会出现问题,以便我可以从 tun/tap 读取所有传入数据。完成后,由于路由不正确,我无法发送 UDP 数据包。

我还向您尝试了套接字通信中的“SO_BINDTODEVICE”选项,但仍然没有用。请注意,我没有在 tun/tap 中使用 write() 方法。我只是使用了 read() 函数,收集数据并通过 UDP 套接字通信发送它们。

请让我知道我的方法是否错误或任何其他解决方法来克服这个问题。谢谢。

/********More Details********/

谢谢罗布。

我想要实现的是在高延迟 channel 中模拟基于 IP 的 header 通信(ROHC)。

为此,我有 4 个虚拟机。 VM1 是一台普通的台式机。 VM2 是一个网关,它使用 tun/tap(来自 VM1)获取数据包,并与 VM4 进行基于 UDP 的通信。 VM3 是可以设置延迟、错误率等参数的 channel 。 VM4 连接到 WAN。 VM1 中的用户应该能够像平常一样浏览 WAN。请找到下面的图表。
  IP Packets
|
| +------------------+ +--------------+ +----------------+
'---|eth1..... | | | | |
| | | | | | |
| tun/tap | | eth0|___|UDP Sock eth0|___
| | | | | | | | | |
| ..UDP Sock|_____|eth1 | | | | | |
| | | | | +tun/tap+ | '
+------------------+ +--------------+ +----------------+ WAN
VM2 VM3(Channel) VM4

更新:

谢谢汤米。你的解决方案奏效了。我可以通过一种方式将 UDP 数据包传送到最终的 NAT 网关。但是直到现在我都无法找到相反的工作方式。
我尝试使用 iptables 启用伪装,并在 VM1 上设置到 tuntap 的主机路由,但它不起作用。
我对此有一些疑问。
1) 在 VM4 中,我接收 UDP 数据并写入 tun/tap。这将由内核路由到 WAN。但是对于传入的数据包,我是否需要再次使用 tun/tap 读取?在这种情况下,我是否需要在不同的线程中进行读写?我问这个是因为我需要将它们也作为 UDP 数据传输回来。如果我在这里遗漏了什么,请告诉我。
再次非常感谢您的帮助。

最佳答案

您的 udp 数据包也将被路由到您的 tuntap 接口(interface)。 (好吧,根据某些设置,它们可能会被丢弃)。您需要为发送它们的 udp 对等方添加路由规则、主机规则或不会干扰其他通信的较小网络规则。

关于sockets - 使用 TUN/TAP 读取传入的数据,封装为 UDP 并传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5789780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com