Setup Tproxy on Router

使用了一段时间的 wireguard 之后,使用的时候时不时总是会断一会,我感觉体验不是很好。所以想换回使用 v2ray 了。当然 wireguard 还是继续作为国内回家使用。和国外的 tunnel 就换 v2ray 了。

首先需要做的就是调整原来的那套方案里面的出国线路。

  1. 把 ipset/dnsmasq/iptables 相关的配置删掉。
  2. 把 hotplug 里面关于 ip rule add fwmark 的部分删掉。相关 route 还是需要留着,因为我还需要在家之外的网络连回家。
  3. 吧 wireguard 里面和 VPS 的连接也去掉。

这一顿操作之后,出国应该就挂了。接下来就配置透明代理。

> 如果是想要新配置一台,那按说不需要参考那个文章。如果想要配置 wireguard 给手机什么的使用,可以参考那个。

透明代理的思路主要就是通过 iptables 劫持所有流量转发给 v2ray,然后 v2ray 对流量进行分发。实现思路放到了 Github,router 要注意这个实现下 router 本机并不能翻墙。解释下实现。

对于 run.sh

  1. L16, L17 增加一条策略,把 iptables 打了 fwmark 1 的流量能让他路由到 v2ray。这条很重要,否则 v2ray 收不到 TCP 流量。
  2. L28, L29 不处理非 53 端口的本地流量,需要把 DNS 请求也让 v2ray 处理。也可以选择不转发 DNS 流量。而是通过另外的 DNS 程序来解决污染问题,如果这样那可能会需要实现本机翻墙的问题。
  3. L35,L36 只处理从 lan 和 wg0 进来的流量。这个在其他的文档里面一般并没有 -i 这个参数。我这里加上这个参数主要是避免花时间折腾可能存在环形流量。

对于 config.json

  1. Inbound 部分没啥好说的。
  2. DNS 部分很重要。因为之前把 DNS 流量都导入到了 v2ray,所以需要 v2ray 能处理好 dns 请求。

    1. 我全都设置了只返回 IPV4 的 ip,因为 iptables 里面没有处理 ipv6 的流量。
    2. 国外 dns 使用 DoH,使用 udp 会遇到不能正常解析的问题。我换 DoH 之后就稳定多了。
    3. L71 需要配置为自己的 vps 的 domain。如果是使用 https 之类的 transport 就会需要使用域名,这里配置好这个域名走国内的 dns。
  3. Outbound 部分除了正常的 proxy 之外,还需要配置一个 dns-out。

    1. 对于 dns-out,流量大概是 iptables -> inbound(dokodemo-door) -> routing L113 -> outbound(dns-out) -> 内置 DNS L46 -> routing。整个就是会走两遍 routing。
    2. dns-out 配置使用 proxy。dns-out 默认只会把 A 和 AAAA 的请求做转发,其他流量会放走。所以如果不配置 proxy,这些类型的 dns 请求会发送给你的 isp。
  4. routing 走的是白名单模式。最后一条兜底的是 L181 把流量都转发给 proxy。