问题标签 [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 回答
789 浏览

networking - 内核不回显 ICMP ping 包写入 tun 设备?

我正在尝试在我的 vps 上编写一个 vpn 服务器。我已经设置了 tun 接口 <tun2> 并且从网络接收的包可以写入服务器上的 tun 设备。但是,当我通过客户端的 ping 命令测试连接性时,服务器内核没有 ICMP 响应包。我错过了什么?

这是拓扑:

这是服务器的配置:

我可以看到 tcpdump 将 ICMP 回显请求发送到服务器上的 tun2,但没有响应:

看起来服务器上的路由是正确的:

这意味着如果内核生成 ICMP 响应,它可以路由到 tun2?所以我的猜测是,内核没有响应 ICMP ping?

这是客户端的配置:

0 投票
1 回答
1405 浏览

linux - 如何在 tun/tap 接口上读取 TCP 数据包?

我正在研究一个简单的项目,该项目在 tun 接口上侦听并修改数据包,然后将它们重新发送到真实接口。

我已经尝试过songgao/waterpkg/tuntap甚至根据一些浮动的 C 代码编写自己的代码,但无论我尝试什么,我都无法接收 TCP 数据包(ICMP/UDP 工作正常)。

我觉得我错过了一些非常明显的东西,但我无法为我的生活弄清楚......

代码:_

0 投票
1 回答
364 浏览

tun - 将数据写入linux tun接口

我创建了一个 linux tun 接口、设置 ipaddr、广播等。使用 open/ioctl apis。这是tun界面的样子,

TEST_TUN: mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500 link/none inet 45.45.45.1/24 scope global TEST_TUN valid_lft forever preferred_lft forever

由 tun_fd 接收由虚拟主机(绑定在 addr 45.45.45.1:udp=7070)写入的任何消息(在 tun 设备创建期间返回的 fd)。

如果 tun_fd 写入一个 msg ( IP(dst=45.45.45.1)+transport(udp_dst=7070)+payload) 在虚拟主机上没有收到。wireshark 捕获显示内核端正在接收数据包,但虚拟主机没有收到任何数据包。

内核不将数据包转发到虚拟主机的原因可能是什么?

0 投票
0 回答
251 浏览

linux - 从 Linux 应用程序发送 MPLS 标记的数据包

我编写了一些 VPN 软件,现在需要能够使用 MPLS 标签标记去隧道的流量。

我查看了 Mausezahn 的来源(它可以发送 MPLS 数据包),它似乎使用各种辅助函数构建了整个以太网帧,然后使用libnet_write.

暂存/send_eth.c:

我的代码目前使用 IP 级隧道接口(例如 tun0)将数据包传送到内核。

如果我想使用 MPLS,我是否需要开始使用 Tap 接口?

还是有其他方法,比如 tun0 的 fd 上的 ioctls?

还是我需要使用libnet_write

0 投票
1 回答
1076 浏览

linux-kernel - 如何修改、编译和安装 tun.ko?

我从来没有编译过一个内核模块。我想了解如何更改内核模块的源代码,在 Debian SO 上编译和安装它。

有人可以说明步骤或告诉我有关它的教程吗?

谢谢你和大家。

0 投票
1 回答
267 浏览

udp - 使用 Erlang TUNCTL 时如何提高 TUN 接口的吞吐量

我使用带有 {active, true} 的 TUNCTL 从 TUN 接口获取 UDP 数据包。该进程获取数据包并将它们发送到另一个可以工作的进程,然后将它们发送到另一个进程,该进程使用 gen_udp 将它们推出不同的接口。相同的过程以相反的方向重复,我使用 gen_udp 获取数据包并将它们发送到 TUN 接口。

当 CPU 负载接近 50%(大约 2500 个数据包/秒)时,我开始在传入的 TUN 接口上看到溢出。我永远不会在 gen_udp 端丢失任何数据包,只有 tunctl。为什么我的应用程序在 CPU 没有过载的情况下没有从 TUN 接口获取所有数据包?我的进程的消息队列中没有消息。

我玩过进程优先级和缓冲区大小,但这并没有多大作用。总 CPU 负载会有所不同。我设法降低了 CPU 负载,但即使我看到 TUN 接口吞吐量略有增加,现在它似乎在较低的 CPU 负载下达到最大值,比如 50% 而不是 60%。

TUNCTL/Procket 是否无法足够快地读取数据包,或者 TUNCTL/Procket 是否由于某种原因没有获得足够的 CPU 时间?我的理论是,Erlang Scheduler 不知道它在调用 NIF 时需要多少时间,也不知道 TUN 接口上未处理消息的数量。我需要弄脏 C++ 和/或编写自己的 NIF 吗?帮助!

0 投票
1 回答
124 浏览

linux - Tun fd 上的 read(2) 返回零

在我的应用程序中,创建了一个 Tun 接口,并且该进程在 select(2) 循环中继续使用 read(2) 读取关联的 fd。但是,当我在应用程序中调试问题时,我发现在某些时候对 Tun 文件描述符的 read(2) 操作可能会返回零。这可能吗?它可能发生的条件是什么?

提前致谢。木质的

0 投票
1 回答
1057 浏览

debian - 如何在 Debian VPS 上启用 TUN?

我有一个 Debian7 的 VPS

需要在上面设置 OpenVPN

所以我已经安装并配置了 OpenVPN,但现在遇到了 TUN 错误。

lsmod | grep tun- 返回空,所以我需要将 tun 模块加载到内核。

modprobe tun- 返回这个

modprobe: 错误: ../libkmod/libkmod.c:514 lookup_builtin_file() 无法打开内置文件'/lib/modules/2.6.32-042stab127.2/modules.builtin.bin' modprobe:
FATAL: Module tun not found在目录 /lib/modules/2.6.32-042stab127.2

0 投票
0 回答
1055 浏览

iptables - iptables 端口转发规则将流量从 WireGuard TUN 接口路由到 eth0

我使用 WireGuard (WG) 作为 VPN,并且只通过它路由某些基于端口的流量。在隧道的入口端,流量首先到达 eth0,然后进入 WG TUN 接口 wg0,因此以下规则适用于入口转发:

但是,我无法使用以下规则将流量从 TUN 接口路由到隧道出口侧的 eth0,我认为由于“隧道”是虚拟的,流量首先必须穿过 eth0,所以 PREROUTING 无效???我不确定如何考虑关于路由序列的 TUN 接口,即这仍然是 PREROUTEING 还是 POSTROUTING 或中间的某个地方?

我尝试了以下操作以查看 PREROUTING 是否适用于 wg0 接口,但它没有。我也用 POSTROUTING 试过这个,但不是解决方案。

0 投票
1 回答
721 浏览

go - 无法将流量从“tun”接口转发到“lo”

最初在这里问:https ://networkengineering.stackexchange.com/questions/56278/not-able-to-forward-traffic-from-tun-interface-to-lo

我正在编写一个小型 VPN 服务器,其中对于某个 ip 地址,我通过一个http proxy.

当前设置

  • TUN 接口在 10.0.2.0/24 启动并运行

iptables 配置

  • iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
  • iptables -t nat -A POSTROUTING -j MASQUERADE

VPN逻辑

  • 当我收到一个发往某个地址的 IP 数据包时,比如说1.2.3.4,我将它的目标地址127.0.0.1和目标端口更新为12345
  • TCP我重新计算和IP层的校验和

代码

  • 我使用gopackets解析 IP 层和 TCP 层
  • 更新目的端口和IP地址
  • 在应用层创建一个 NAT 条目,以便我可以将响应数据包中的source_ipand改回source_port

预期产出

  • 来自的流量tun0将被转发到eth0(即使我不添加该 iptable 条目,默认路由也会做同样的事情)
  • eth0将知道 lo 地址,因此会将数据包转发到环回地址,并最终转发到在 localhost 上运行的代理

实际输出

  • 数据包在中间丢失
  • tshark -i tun0显示数据包从tun0
  • 但既不显示lo也不eth0显示--dport 12345 的相应条目。