0

我创建了一个 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 捕获显示内核端正在接收数据包,但虚拟主机没有收到任何数据包。

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

4

1 回答 1

0

是否已将您的 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

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

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

于 2021-05-26T14:43:37.383 回答