问题描述
我想写一个透明代理,为系统设置默认路由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 (将#修改为@)