问题标签 [tun-tap]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
250 浏览

c++ - 使用 tun/tap 接口的错误序列号

我正在尝试使用 tun/tap 将 TCP 数据包读入结构,因此将 IFF_TUN 标志设置为使用 tun 设备(无以太网标头)。

我有这样的结构(我不关心字节序问题):

Tcp 标头:

IPv4 标头:

并像这样读取数据包:

到目前为止,一切都很好。但是当我尝试读取 TCP 序列号时,我得到了错误的数字:

tshark 输出显示 seq=0 (如下所示):

但我的代码输出是7be53b39

0 投票
1 回答
342 浏览

linux - 无法使用自定义(桥接)tap 设备在 QEMU VM 中加载 XDP 程序

我最近尝试在 QEMU VM 中加载 XDP 程序(使用virtio-net-pci作为 NIC 驱动程序,并将设备作为后端)。这样做似乎需要我的 NIC 具有队列的 vCPU*2 功能,这可以通过在 QEMU 启动命令 ( ... -netdev tap,queues=<N> ...) 中声明它来完成。如果我没有用足够数量的队列声明 NIC 并尝试加载 XDP 程序,我会收到以下内核消息和错误:

到目前为止,这完全不是问题,尽管我知道为什么需要这样做(我已经成功地在我的主机上加载了相同的 XDP 程序,它只有一个队列)。

但我的目标是让 QEMU 使用我的自定义分接设备,该设备已连接到主机上的网桥。而不是让 QEMU 为我创建一个新的。

为了使用自定义 Tap 设备,我使用以下命令启动 VM:

tap0所谓的自定义水龙头设备在哪里。

上面的 QEMU 命令不会启动 VM,错误信息是:

通过删除选项ifname=tap0queues=4,它可以正常启动。

似乎它告诉我我不能同时声明具有多队列和桥接抽头设备的 NIC。但尴尬的是我需要在桥接分接头设备上执行 XDP 程序。

有谁知道为什么桥接分接头设备不能与启用多队列的 NIC 一起使用?

PS内核版本:5.4.33QEMU版本:4.2.0 (Debian 1:4.2-3ubuntu6.2)

感谢您阅读我的问题!

0 投票
1 回答
179 浏览

rust - 在 MacOS 上使用 tun_tap_mac crate

我正在尝试在 MacOS 上使用tun_tap_mac 板条箱,但在入门时遇到了麻烦。这是我的代码:

我收到了这个错误:

我尝试使用 sudo 进行构建,但遇到了同样的问题。MacOS 没有setcap-like 功能,文档似乎很稀疏。看起来这个板条箱是从原始 tun_tap 分叉来支持 Mac 的,但我真的找不到任何其他帮助。有什么建议吗?

0 投票
0 回答
179 浏览

openvpn - 如何创建一个tun接口?

这是我第一次管理虚拟接口,我想在 linux 上创建一个临时 TUN 接口我正在关注本教程https://backreference.org/2010/03/26/tuntap-interface-tutorial/但我有很多对某些适应症的理解较差。

  1. 首先,我从 .tar 文件夹中下载了 simpletun.c 文件,但我不明白如何处理它,也不知道在哪里保存它。

  2. 在此行中运行时:

~# openvpn --mktun --dev tun0

2021 年 4 月 9 日星期五 12:41:46 错误:无法打开 TUN/TAP dev /dev/net/tun:没有这样的文件或目录 (errno=2)

2021 年 4 月 9 日星期五 12:41:46 因致命错误退出

在 root 的终端中,似乎没有找到 dev/net/tun,即使我创建了它。我有一种我理解错了的感觉。你能帮我理解我具体应该做什么才能让它发挥作用吗?

问候,

霉变

0 投票
1 回答
704 浏览

networking - Qemu 网络选项:tap vs bridge

我刚开始学习如何在项目中使用 Qemu。我试图使用桥接网络运行 Qemu,并且想知道网络选项、tap 和 bridge 之间有什么区别。

我阅读了 Qemu 文档中的网络选项部分,但无法理解其中的区别。该文档提到“-netdev tap”用于配置具有 ID id 的主机 TAP 网络后端,而“-netdev bridge”用于将主机 TAP 网络接口连接到主机桥设备。我还查看了这个网站:https : //wiki.archlinux.org/title/QEMU#Tap_networking_with_QEMU,但仍然无法理解使用“-netdev tap”与“-netdev bridge”之间的区别。

任何人都可以通过解释为 Qemu 使用“-netdev tap”和“-netdev bridge”之间的区别来帮助我吗?

谢谢你。

0 投票
0 回答
41 浏览

c - 运行创建 TUN 接口的代码,并在我的代码中模拟 TCP 侦听端口。所以收到的 SYN 包在代码中用 SYN+ACK 响应

我有一个从 TUN0 接口读取 IP 数据包的简单服务器。在这段代码中,我试图在端口 80 上模拟 TCP 侦听端口的行为,因此将其称为服务器。所以如果我收到 SYN 请求,我会用 SYN+ACK 响应来响应它。

我反复检查我的代码 SYN+ACK 数据包是否被忽略,并且我不断重新传输 SYN 数据包。为什么会这样?

我的 SYN+ACK 数据包似乎很好。其他人也检查了它,如果需要,请参阅下面的完整数据包捕获。但是我的客户端忽略了我的服务器代码对其 TCP SYN 数据包的 SYN+ACK 数据包响应。

我检查了netstat

我还禁用了 Linux Reverse 的路径过滤

但是我的 netstat 没有显示任何丢弃的数据包。那么我的客户端只是忽略我的服务器的 SYN+ACK 数据包的另一个原因可能是什么。我不断从客户端重新传输 SYN 数据包。Linux内核中是否有一些神奇的工作拒绝SYN + ACK数据包并且没有人知道它。我是否需要iptable配置或其他东西,我认为最初不需要,但我还能做什么。

这是初始 SYN 和 SYN+ACK 的十六进制转储

同步+确认

数据包捕获显示:

这是完整的数据包捕获:

https://drive.google.com/file/d/1hF8FeQcZqGvAZzxHHRRtO2BOl8Y1Yymn/view?usp=sharing

内核版本:内核 5.13.0-22-generic