Tun设备:写透明代理时如何避免路由死循环?

问题描述

我想写一个透明代理,为系统设置认路由0.0.0.0,让所有数据包通过我的tun(或windows上的wintun)设备。

通过这样做,我可以从 tun 设备读取 Ip 帧,并注入到我的 lwip 网络堆栈中进行处理。

为了学习怎么做,我只看了一些透明的工具,比如https://github.com/eycorsican/leaf/blob/d35e649e620ab9f49be927962849f31e81054230/leaf/src/proxy/tun/inbound.rs#L111

但我陷入了路由循环。 0.0.0.0 认路由将路由所有数据包通过 tun,因此我可以读取所有系统数据包。

如果将数据包写入 tun 设备,然后内核做出路由决定,它会在那里看到认路由并将其再次发送到我刚才写的 tun 设备。

我的问题是:

它会读取我刚写的数据包吗?

如果不是,内核或tun设备如何避免这种情况?

正如 https://superuser.com/a/1614808/944262 的回答所说

要么使用网络命名空间(然后你可以有两个认路由)

我肯定知道用户网络堆栈可以解析从tun设备读取的Ip帧,但是使用它的目的是什么?

我是 https://superuser.com/questions/1664065/tun-device-how-to-avoid-routing-dead-loop-when-write-a-transparent-proxy 的作者。我是来帮你的 ;)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...