从 LAN 将所有互联网流量路由到 Tor

警告:请严格按顺序完成每一步,否则可能会失去 LuCI 的访问权限!强烈建议在操作前建立 SSH 连接,以便在失去 LuCI 访问时能够恢复更改。

警告:此操作在 GL.iNet Flint 2 (GL-MT6000) 上测试通过,但不保证适用于所有设备。如果任何步骤看起来不寻常或不清楚,请立即停止并撤销所有修改。

警告:本指南是在作者的路由器看似正常工作的情况下编写的。仍可能存在问题,安全性无法保证,因为部分流量可能会泄露。作者对按照本指南操作所造成的任何后果不承担责任。

本指南介绍如何将 LAN 的所有互联网流量通过 Tor 路由。此操作在 OpenWrt 24.10 上测试通过。

除 Tor 配置外,其余步骤可完全通过 LuCI 完成,无需 SSH。

步骤 1:安装和配置 Tor

首先在路由器上安装 Tor:

 # opkg update
 # opkg install tor

根据需要配置 Tor,但请确保你的 torrc 至少包含以下内容:

TransPort 0.0.0.0:9040
VirtualAddrNetworkIPv4 10.192.0.0/10
AutomapHostsOnResolve 1

为了更高的安全性,如果你只有一个接口进行转发,也可以将 TransPort 设置为路由器在 lan 接口上的 IP 地址。

步骤 2:设置 DNSCrypt

我参考这里的指南配置了 DNSCrypt。Using the command line 部分的五条命令在我这里可以正常工作,但你也可以通过 LuCI 进行配置。

打开 System -> Software,搜索 dnscrypt-proxy2 并安装。然后进入 Network -> DHCP and DNS -> Forwards -> DNS Forwards 并添加 127.0.0.53。之后打开 System -> Startup 并重启 dnsmasq

如果不想使用 DNSCrypt,你需要在 torrc 中添加 DNSPort 并在 DNS Forwards 中进行配置。我未测试此方法,建议使用 DNSCrypt。

步骤 3:添加防火墙规则(重要 — 请严格遵循)

打开 Firewall -> IP sets 并创建以下 IP 集:

  • Name: tor_bypass

  • Family: IPv4

  • Packet Field Match: dest_ip

  • IPs/Networks/MACs:

    • 路由器在接口上的 IP 地址
    • 192.168.10.1/16
    • 10.0.0.0/8
    • 172.16.0.0/12
    • 127.0.0.1/32
  • 其他字段保持不变

打开 Firewall -> Port Forwards 并添加以下规则:

  • General Settings:

    • Name: tor-trans-forward(或任意你喜欢的名称)
    • Restrict to address family: IPv4 only
    • Protocol: TCP
    • Source zone: lan(或希望重定向流量的其他防火墙区域)
    • External port: 1–65535
    • Destination zone: lan(必须与 Source zone 相同)
    • Internal IP address: 路由器在接口上的 IP 地址
    • Internal port: 9040
  • Advanced Settings:

    • Use ipset: !tor_bypass请勿省略感叹号
    • 其他字段保持不变

打开 Firewall -> Traffic Rules 并添加以下规则:

  • General Settings:

    • Name: 阻止非 TCP 流量(或你喜欢的名称)
    • Protocol: UDP, ICMP, IGMP, IPSEC-ESP
    • Source zone: lan(必须与 Port Forward 的 Source zone 相同)
    • Destination zone: wan
    • Action: reject
    • 其他字段保持不变
  • Advanced Settings:

    • 所有字段保持不变

如果启用了 IPv6,你必须禁用或阻止它。打开 Firewall -> Traffic Rules 并添加以下规则:

  • General Settings:

    • Name: 阻止 IPv6(或你喜欢的名称)
    • Protocol: Any
    • Source zone: lan
    • Destination zone: wan
    • Action: reject
    • 其他字段保持不变
  • Advanced Settings:

    • Restrict to address family: IPv6 only
    • 其他字段保持不变

如有其他接口需要将流量路由到 Tor,请现在重复此步骤。

步骤 4:保存并检查配置

点击 Save & Apply

访问 https://check.torproject.org/ 和/或 https://myip.wtf/ 检查流量是否正确转发。

访问 https://ipv6.myip.wtf/ 确认 IPv6 是否已被阻止。

检查 LuCI 是否仍可访问。

如果一切正常,配置完成。

如果有问题,请使用文本编辑器恢复 /etc/config/firewall 中的配置,建议在 Libera.Chat 的 #openwrt 频道寻求帮助。