【问题标题】:writing data to linux tun interface将数据写入linux tun接口
【发布时间】:2018-08-22 13:55:48
【问题描述】:

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

TEST_TUN: mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500 链接/无 inet 45.45.45.1/24 范围全局 TEST_TUN valid_lft 永远首选_lft 永远

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

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

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

【问题讨论】:

  • “虚拟主机”是什么意思?
  • 虚拟主机是指运行在传输层之上的任何用户应用程序,如 TCP/UDP 应用程序(SIP 或 HTTP)

标签: tun


【解决方案1】:

您的 tun 设备是否处于启动状态?

如果没有,那么你可以简单地通过..

$sudo ifconfig tun0 up

您也可以通过 ioctle 命令执行此操作..

如果您的设备已经处于启动状态,那么您的 linux detro 必须开启转发功能。 你可以通过..来做到这一点。

#echo "1" > /proc/sys/net/ipv4/ip_forwarding

$sudo sysctl net.ipv4.ip_forward=1
$sudo sysctl -p

然后是路由规则..您必须设置路由规则,以便通过您的虚拟接口捕获所有流量..

$sudo ip route 128/1 dev tun

此命令将在您的内核路由表中添加一条路由,所有流量都将流经您的虚拟接口..

如果我理解正确,那么这可能会对你有所帮助..

【讨论】:

    猜你喜欢
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多