问题标签 [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 投票
1 回答
1760 浏览

c++ - TUN/TAP 上的 C 编译器错误

我喜欢用 C++ 程序创建一个 TUN/TAP 接口。我在http://backreference.org/2010/03/26/tuntap-interface-tutorial/在网上找到了一个直截了当的教程 。

问题是,我似乎对 if.h 和 if_tun.h 有链接问题。当我将教程剥离到下面的最小示例时,只是为了打开一个插槽,我得到了一些错误。例子:

如果认为这应该编译,但我收到以下错误:

我在带有 Linux 3.11.4 的 Fedora 18 上使用 GCC 4.7.2(在这种情况下,从没有任何开关的命令行)。我的图书馆有什么问题?

0 投票
2 回答
19984 浏览

java - 带有 VpnService 的 Android 防火墙

我正在尝试使用 VpnService for BS 项目为 android 实现一个简单的防火墙。我选择 VpnService 是因为它将在非 root 设备上运行。它将记录连接并让您过滤连接。(基于 IP)

有一个应用程序这样做,所以它是可能的。

谷歌播放应用商店

我做了一些研究,发现 VpnService 创建了一个 Tun 接口。而已。(没有 VPN 实现只是一个隧道)它可以让你给这个接口一个地址并添加路由。它返回一个文件描述符。您可以读取传出包和写入传入包。

我创建了一个 VpnService 派生类并启动了服务。我可以tun0使用 VpnService.Builder 类进行配置。当我查看与它的mobiwol's连接时,adb shell netcfg它会创建一个tun0具有 10.2.3.4/32 地址的接口。它将所有包裹路由到这个专用网络并发送到互联网。我也在尝试同样的方法。创建了一个地址为 10.0.0.2/32 的接口。添加了带有 addRoute 功能的路线。0.0.0.0/0 所以据我所知,我可以从所有网络捕获所有包。(我对这个主题很陌生,还在学习。我在互联网上找到了一些片段,所以我不太确定。如果我错了,请纠正我。)

我在服务中创建了 2 个线程。一个从文件描述符中读取并使用受保护的套接字将其写入 127.0.0.1。(我不确定我是否应该读/写 127.0.0.1。也许这就是问题所在。)

我分析了从文件描述符中读取的数据包。例如:

我没有在其余数据中找到任何其他 IP 标头。我认为应该在 10.0.0.2 网络到本地网络(192.168.2.1)和互联网之间进行封装。我不确定。

我真正的问题是我卡在传入的包线程上。我什么都读不了。没有反应。正如您在屏幕截图中看到的,没有传入数据:

截屏

我正在尝试从使用受保护套接字写入 127.0.0.1 的同一连接中读取。

Android <-> Tun 接口 (tun0) <-> 互联网连接

所有包 <-> 10.0.0.2 <-> 127.0.0.1?<-> 192.168.2.1 <-> 互联网?

我找不到任何有关 VpnService 的有用信息。(ToyVPN 的例子没用)我阅读了关于 Linux Tun/Tap 的文档,但它是关于主机和远程之间的隧道的。我希望主机和远程在同一设备上。不像隧道。

我怎样才能做到这一点?

编辑:请求的代码。它处于非常早期的阶段。正如我之前提到的,它是一个 VpnService 派生类。在服务线程中创建了 2 个线程(读取和写入)。

0 投票
1 回答
3666 浏览

c - Linux TUN/TAP:无法从 TAP 设备读回数据

问题是关于想要使用 Tun/Tap 模块的 Linux 主机的正确配置。

我的目标:

利用现有的路由软件(以下为APP1和APP2),但拦截并修改其发送和接收的所有消息(由Mediator完成)。

我的场景:

  • tap1 和 tap2:分别使用 IFF_TAP 标志和 IP 10.0.0.1/24 和 10.0.0.2/24 设置的设备。创建设备的代码如下:

    /li>
  • Mediator:自己编写的小代码,用于在 tap1 和 tap2 之间简单地中继数据。基本结构如下:

    /li>
  • APP1 和 APP2:OSPF 路由守护进程分别通过 tap1 和 tap2 进行通信。对守护进程的跟踪表明,基本上涉及以下系统调用:

    /li>

我的用法:

  • 将wireshark连接到tap1。(还没有看到流量)。
  • 启动APP1。(wireshark 看到源为 10.0.0.1 (tap1) 的 IGMP 和 OSPF 消息)
  • 启动APP2。(wireshark 仍然只能看到源为 10.0.0.1 (tap1) 的 IGMP 和 OSPF 消息,因为 Mediator 尚未运行)
  • 启动调解器。(wireshark 现在可以看到来自 tap1 和 tap2 的 IGMP 和 OSPF 消息)。

我的问题:

即使wireshark - 连接到tap1 - 看到来自tap1 和tap2 的消息,APP2 也没有收到APP1 发送的消息,APP2 也没有收到来自APP1 的消息。在上面显示的 strace 提取中,select() 调用永远不会返回文件描述符 8,它实际上是连接到 tap1 的套接字。

我的问题:

为什么 APP1 没有收到 APP2 发送的消息,即使这些消息是由 APP2 发送的,由 Mediator 中继并被附加到 tap1 的wireshark 看到?

我是否必须在我的 Linux 主机上添加任何类型/种类的附加路由?

我在设置 tun/tap 设备时犯了错误吗?

我的中介代码不能正常工作吗?

0 投票
1 回答
2125 浏览

c# - 将 TAP-Windows 设备置于 TAP 模式

我正在使用 TAP-Windows(来自 OpenVPN 项目)来创建一个界面,如此此处所述。我基于第一篇文章中提供的示例代码:

设备似乎处于 TUN 模式 - 当我获得数据包的有效负载时,不包括以太网标头。强制接口以 TAP 模式运行的正确方法是什么?

我在 VirtualBox 中的 32 位 Windows 7 虚拟机上运行代码。

0 投票
2 回答
3599 浏览

sockets - 连接到哪个物理接口 tun/tap 设备

我在理解 tun/tap 设备的实际工作方式时遇到了一点问题,这是来自 wiki

  1. 虚拟网络设备如何实际工作?虚拟网络设备可以看作是一个简单的点对点或以太网设备,它不是从物理媒体接收数据包,而是从用户空间程序接收数据包,而不是通过物理媒体发送数据包,而是将数据包发送到用户空间程序。

假设您在 tap0 上配置了 IPX,那么每当内核向 tap0 发送一个 IPX 数据包时,它就会被传递给应用程序(例如 Vtun)。应用程序加密、压缩并通过 TCP 或 UDP 将其发送到另一端。另一端的应用程序对接收到的数据进行解压缩和解密并将数据包写入TAP设备,内核处理数据包就像它来自真实的物理设备一样。

Ok 应用程序加密、压缩并通过 TCP 或 UDP 将其发送到另一端。

如果您有 3 个物理连接每个路由到互联网,tun/tap 设备将使用哪个物理设备路由到互联网?

我很困惑,因为没有人真正谈论 tun/tap 接口和实际物理接口之间的真正关系

提前TY

0 投票
0 回答
2122 浏览

c - 如何在 Windows C 程序中使用 tun 设备

我之前在 Linux 上使用过 tun 设备,需要在 Windows 上移植我的代码。我已经在 Windows 上安装了 OpenVPN 的 tun/tap 驱动程序,但我无法弄清楚如何在 Windows C 程序中为该 tun 设备创建设备句柄。

基本上我需要帮助创建 tun 设备并获取句柄。

我在 Linux 上使用的代码如下(类似于 kernel.org 上的示例)

0 投票
5 回答
739 浏览

c - 使用 AX.25 封装创建 TUN 网络设备

我正在尝试使用 AX.25 封装创建一个 TUN 网络设备。有效的是: - 创建设备 - 将其封装设置为 ax25

不起作用的是设置它的硬件地址。这在 ax.25 通信中至关重要,因为它用于唯一地寻址节点。

首先,我创建 TUN 设备:

这导致:

然后我将接口设置为 AX.25 封装:

这导致:

然后是设置硬件地址的问题。硬件地址是一个字符串,如: FH1GOU-1 首先,您需要将该地址的每个字节向右移动一位。然后,ioctl-magic。这总是失败。我也尝试过创建 tun-device 然后在其上调用 ifconfig ,这会导致“不支持”错误。当然可能是根本不可能在 tun 设备上设置 ax.25 硬件地址,但是为什么可以设置 ax.25 封装呢?

最后一行,带有 ioctl 的那一行,总是打印 -1 (=error)。

我还尝试使用 TUNSETIFF ioctl 直接设置硬件地址,但这似乎被忽略了。

有任何想法吗?

0 投票
1 回答
462 浏览

android - Android VpnService:从 Tun 设备读取挂起

我的应用正在使用 VpnService 进行流量拦截。

它的作用:
1.从 Tun 设备循环读取:

TunDevice.read:

2.将数据代理到受保护的套接字。

问题是一段时间后它停止从 TUN 设备读取。读取方法只是挂起并等待一段时间(如 3-5 分钟)。

使用 netstat 我看到所有新连接都处于 SYN_SENT 状态,我可以理解原因 - 它们无法从我的代码中接收 ACK,因为我无法接收这些 SYN 数据包。

问题是:它可能是什么?TUN 设备什么时候可以这样?

0 投票
2 回答
14417 浏览

android - Android 4 OpenVPN 应用程序 tun_builder_error(拓扑 net30)

我在我的服务器上运行了一个 OpenVPN 服务器,我想连接多个设备(智能手机、笔记本电脑、台式电脑、平板电脑......)。我可以将笔记本电脑与 Linux 或 Mac OS X 或我的 Windows 8 平板电脑连接起来。所以这项工作非常好。

但是当我想将我的 Nexus 5 与 Android 4.4.2 连接时,OpenVPN 应用程序给了我以下错误:

这是我的client.conf。:

以及对应的server.conf:

ccd/Nexus5 文件:

我为每个客户端使用相同的 client.conf(当然是改编的证书)。它适用于所有设备,除了 Nexus 5。经过研究,我读到它可能有助于添加

到 server.conf。但是没有客户端可以连接了,所以这没有帮助。你能在我的配置文件或任何东西中发现任何错误吗?

以下是 Nexus 5 OpenVPN 应用程序的日志:

谢谢!

0 投票
3 回答
4348 浏览

vpn - TAP/TUN adapter in LXC container

I am trying to create an lxc container that acts as a vpn server. I am trying to add the tap/tun adapter to the container's device list. I have tried adding the following line to the lxc config.

lxc.cgroup.devices.allow = c 10:200 rwm

That did not seems to add it to the container. I have tried creating the folder

/var/lib/lxc/vm1/rootfs/dev/net and mknod -m 666 /var/lib/lxc/vm1/rootfs/dev/net/tun c 10 200

This does not work as well. Using mknod inside the container throws an error Operation not permitted

Any ideas on how I proceed? I am still new to VPN servers and LXC containers.