问题标签 [tun]

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 投票
0 回答
1161 浏览

android - ioctl() 不允许操作

我正在用 C 语言为 Android 开发一个应用程序。我想添加一个新的 tun 接口并使用文件描述符来访问设备。我这样做的方式与此处描述的相同:https ://backreference.org/2010/03/26/tuntap-interface-tutorial/

但是,我在 ioctl() 调用上不允许操作。我的设备已植根,我授予了我的应用程序的超级用户权限,将 SELinux 策略设置为允许。但是,Android 仍然不允许我访问/dev/net/tun。我通过从/dev/tun创建符号链接来创建它。我也没有忘记在/dev/tun上设置chmod 666。调用 open("/dev/net/tun", O_RDWR | O_NONBLOCK) 返回一个有效的文件描述符,并且我正确设置了 ifreq 结构。正是ioctl()调用返回了不允许操作的错误。

此外,如果我分离代码并交叉编译它,然后通过 adb 将其推送到设备并运行它 - 一切正常。但是,如果我将其作为我的应用程序的一部分进行,则不允许该操作。

关于如何在应用程序中允许此系统调用的任何建议?任何有关失败原因的提示也将不胜感激。

代码:

0 投票
1 回答
580 浏览

docker - CoreOS - 将主机端口暴露给 VPN

我在 CoreOS 中运行 docker Openvpn 容器:

容器作为客户端连接到 VPN,其他 VPN 客户端可以 ping 容器。它使用配置中的选项在其中运行正常openvpn进程。dev tun

我的任务是使这台机器上的主机端口-p来自任何其他容器的未显示端口)可用于其他 VPN 客户端,通过tun0VPN 客户端容器内的那个(所以它必须是主机才能设置路由?)。如何实施?

0 投票
0 回答
41 浏览

networking - TAP 设备上是否可以使用除以太网之外的其他第 2 层协议?

使用 TAP 设备时,是否有人知道是否可以使用以太网以外的其他第 2 层协议,例如 PPP oder FDDI?

所有示例,我只能找到使用以太网,但内核文档 https://www.kernel.org/doc/Documentation/networking/tuntap.txt并没有具体说明这一点。

主机内核不需要处理自定义的第 2 层帧。如果我可以使用 Wireshark 和 Scapy 之类的工具来处理流量,那很好。

在我尝试为 TAP 设备构建一个接口之前,这将不起作用,我想检查一下,是否有人以前尝试过。

0 投票
1 回答
273 浏览

c# - 不允许请求的注册表访问。即使在清单中有签名的 exe 和管理员特权

我正在尝试访问 HKEY_LOCAL_MACHINE 注册表,

这是清单文件:

我还用测试证书签署了可执行文件

这是功能:

这是结果:

我应该怎么做才能在没有安全异常的情况下读取注册表

0 投票
0 回答
56 浏览

vpn - 如何在 tun 设备的用户空间实现中识别 iptables 标记的数据包?

我有一些用 C 语言编写的自定义 VPN 代码,它使用 Linux tun 设备。

此用户空间代码是否可以查看附加到数据包的 iptables 标记?还是这些标记不会传播到 tun 接口?

0 投票
0 回答
148 浏览

c++ - Client在虚拟网络接口环境下收到Server的SYN/ACK后无法回复ACK

我正在设置一个本地 vpn 环境,我想通过虚拟网络接口在本地捕获流量,然后通过物理网络接口绑定套接字将它们转发到真实目的地。但是,设置 tun 虚拟网络接口后,我什至无法连接真实目的地。

我的测试机:Linux testing-VirtualBox 3.19.0-15-generic #15-Ubuntu SMP Thu Apr 16 23:32:37 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

首先,我成功创建了一个名为 tun0 的虚拟网络接口,如下所示:

为简洁起见,我只是将目标服务器的 ip 地址添加到路由表中: route add -host 45.113.192.102 dev tun0 路由表如下: 内核 IP 路由表

xxx.xx.xxx.xxx 是我的内部主机/网关 IP 地址。

最后,我创建了一个套接字并将套接字绑定到物理网络接口。我在这里使用 libuv,应该不管这个问题。

我运行我的代码,发现我无法连接到“45.113.192.102”。我通过wireshark抓到流量,发现我的程序已经向“45.113.192.102”发送了SYN,“45.113.192.102”也回复了SYN,ACK。但是,在那之后似乎我的程序没有发送 ACK,导致连接失败。接下来,Client不断发送[TCP Spurious Retransmission] SYN,Server回复[TCP Retransmission] SYN,ACK。

0 投票
1 回答
1321 浏览

c - 如何从tun接口接收数据到dpdk绑定的网卡?

我想要任何流量生成器(比如 iperf、D-ITG 甚至 ping)将数据发送到 tun 接口。这个 tun 接口应该会自动转发到绑定到 DPDK 的 NIC。我想运行从界面获取数据的 l3fwd 示例。

我在命令行中使用了选项 --vdev=net_tun0 来创建 tun 接口。我认为 tun/tap PMD 会自动轮询 tun/tap 接口的数据包并重定向到/来自 NIC。但是,这并没有发生。我无法接收任何数据包。

我需要 dpdk 和流量生成器在同一台 PC 上运行。DPDK 应该选择用户空间的流量。

0 投票
0 回答
82 浏览

c++ - 为什么发送NAT穿越包后收不到包?

我正在设置一个基于 TUN 设备的虚拟专用网络程序,其中最重要的部分之一是 NAT 穿越。编写完这个程序后,我使用同一个局域网中的两台设备进行调试。

但是我注意到一件奇怪的事情,假设 A 想向 B 发送数据包,并且有一个外部服务器 S 具有静态 IP。我使用最常见的方式在 UDP 中实现 NAT 穿越。

A 向 B 发送一个数据包,该数据包可能被 B 的 NAT 丢弃。然后 A 向 S 发送请求,S 向 B 发送请求,然后 B 向 A 发送数据包。之后,来自 A 的数据包理论上应该被 B 接收。

但是我遇到的情况是B没有收到A的包。

我首先检查了我的 NAT 类型,它是 Port Restricted Cone NAT,所以它应该可以工作。

这是网络结构。

网络结构方案

我认为这很可能是我的代码错误,但我无法理解。

完整代码在https://github.com/timber3252/omelet上,以下是部分代码。

客户:

服务器:

我在机器 A 上使用 ping 到 B,但没有响应。数据包已成功发送到 B,但 B 无法接收任何数据包。

0 投票
0 回答
104 浏览

linux - 在 ubuntu 18.04 上设置 TUNSETQUEUE 总是失败

我想用多队列打开 tun,但是当我设置 IFF_ATTACH_QUEUE 时失败。

Linux 版本 4.15.0-62-generic (buildd@lcy01-amd64-024) (gcc 版本 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1))

函数 tun_set_queue 将得到“ioctl:Invalid argument”

0 投票
3 回答
66 浏览

sql - SQL查询优化更新

此查询需要很长时间才能更新我很想优化此查询,我们将不胜感激。