我想写一个透明代理,为系统设置默认路由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的作者。我来这里是为了你的帮助;)