我和楼主方案差不多。同样是我折腾软路由十年时间下来,选择的最优解。
但还有几个小问题:
1. mosdns 对未知域名,会有 dns leak 。因为我曾经被请过喝茶,对这方面我有些在意。
2. 目前的 proxy tool 比如 clash ,对 NAT type 会有影响(即便是 direct 规则)。所以我把 STUN 相关端口直接在 nftables bypass 了。clash meta 的 endpoint-independent-nat 也许可以解决,但是实测产生了一些其他问题。
这样会使基于 STUN 或类似 p2p 协议的应用走直连,比如 Google Meet / Teams / FaceTime / 各种游戏。不过问题不大,对于游戏可以另外用加速器。对于视频会议应用,一般他们都有针对中国的优化(已知 Teams / Zooms / FaceTime 都有),直连体验也还行。
3. 有些域名做了分区解析,比如
bing.com 在国内解析到北京,会跳转
cn.bing.com 。并且
bing.com 不在 gfwlist 。这时候想要访问全球 bing ,只能手动把它加入到 mosdns 灰名单。
还好这类域名非常少,需要手动维护的规则很少。
4. 针对一些会探测用户 IP 的特定应用要专门处理。
比如 Steam ,只有当检测到用户是中国 IP 时,才会提供国内 CDN 作为下载服务器。所以需要把
api.steampowered.com 放入 direct 名单。
还有 plex 的外网访问服务,需要把
v4.plex.tv 放入 direct ,这样 plex 才能正确地把国内 IP 作为公网直连 IP 。
--
楼上有人说 "Redirect 和 Tproxy 应该是二选一的关系",我表示支持。在能用 tproxy 时应该都用 tproxy ,这样是最简单的,特别是考虑到 ipv6 ( redirect 不支持 ipv6 )。