RouterOS 主路由(10.10.10.253) + OpenWrt 代理盒子(10.10.10.252) 的完整、最简、最干净、最稳定的 Fake-IP 透明代理方案

一、RouterOS 主路由 —— 最简透明代理配置

1. 定义 fake-ip 段(OpenClash 使用的虚假 IP) 假设你用的是:`198.18.0.0/15`
/ip firewall address-list
add list=proxy_cidr address=198.18.0.0/15

如果你用 28.x.x.x,则改成:

add list=proxy_cidr address=28.0.0.0/8
2. 定义需要走代理的设备

(你可以全部设备,也可以只有某些设备)

例:所有设备

add list=proxy_device address=10.10.10.0/24
3. DNS 劫持(proxy_device的 DNS → OpenWrt 10.10.10.252)

DNS → OpenWrt → Clash (FakeIP/TUN) Fake-IP 会自动被 Clash 转到 1053,无需你设置。

/ip firewall nat
add chain=dstnat action=dst-nat dst-address=10.10.10.253 protocol=udp dst-port=53 \
    src-address-list=proxy_device to-addresses=10.10.10.252 to-ports=53 \
    comment=fakeip_proxy

add chain=dstnat action=dst-nat dst-address=10.10.10.253 protocol=tcp dst-port=53 \
    src-address-list=proxy_device to-addresses=10.10.10.252 to-ports=53 \
    comment=fakeip_proxy
4. 路由配置 所有访问 Fake-IP 段 198.18.0.0/15 的连接,都丢给 OpenWrt 处理:所有目标为 **198.18.0.0/15** 的流量都经过 **OpenWrt** 处理
/ip route
add dst-address=198.18.0.0/15 gateway=10.10.10.252 comment=fakeip_proxy
5. NAT(网络地址转换)
/ip firewall nat
add chain=srcnat action=masquerade src-address=10.10.10.0/24 dst-address=10.10.10.252 \
    comment=fakeip_proxy
6. 防火墙 把规则拖到前面 放行到 Fake-IP 段(本质是转发到 OpenWrt)的流量
/ip firewall filter
add chain=forward dst-address-list=proxy_cidr action=accept comment=fakeip_proxy

二、Netwatch:监控 OpenWrt 状态

加入“自动保护脚本”(Netwatch),当 OpenClash 掉线时:

  • 透明代理立即关闭(避免黑洞)
  • 全网恢复直连,不影响国内访问
Netwatch 脚本

OpenClash 正常,我们需要启用 TCP 和 UDP 流量的 DNAT 规则,同时确保连接的清除。

/tool netwatch
add host=10.10.10.252 interval=5s timeout=3s type=icmp down-script="
  :log warning \"Fake-IP Proxy DOWN — disabling rules\";
  /ip firewall nat set [find comment=\"fakeip_proxy\"] disabled=yes;
  /ip firewall filter set [find comment=\"fakeip_proxy\"] disabled=yes;
  /ip route set [find comment=\"fakeip_proxy\"] disabled=yes;
  /ip firewall connection remove [find dst-port=53];
" up-script="
  :log warning \"Fake-IP Proxy UP — enabling rules\";
  /ip firewall nat set [find comment=\"fakeip_proxy\"] disabled=no;
  /ip firewall filter set [find comment=\"fakeip_proxy\"] disabled=no;
  /ip route set [find comment=\"fakeip_proxy\"] disabled=no;
" comment="watch_openwrt_fakeip"

:small_orange_diamond: host=10.10.10.252 监控的目标设备 IP :backhand_index_pointing_right: 你的 OpenWrt 代理盒子 :small_orange_diamond: interval=5s 每隔 5 秒检测一次 检测内容取决于 type(默认 icmp) :small_orange_diamond: timeout=1s Ping 超过3 秒没有回应 视为失败 也就是说: 如果 3 秒内没回复,就算“Down” 如果 has reply,则判定为“Up” :small_orange_diamond: type=icmp 检测方式为 ICMP(ping) 这是最适合 LAN 内检测设备是否在线的方法。


三、OpenWrt(10.10.10.252)设置要求

你需要确保:
  1. Clash 开启 fake-ip 模式
dns:
  enable: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/15
  1. Clash 必须开启 tun
tun:
  enable: true
  dns-hijack:
    - any:53
  1. OpenWrt 的默认网关必须是 RouterOS
10.10.10.253

流量工作流程图

┌─────────────┐
 │  客户端手机、电脑    │
└───────┬─────┘
        │ DNS
        ▼
┌──────────────────────────┐
│     RouterOS 主路由 10.10.10.253                │
│     ① DNS 劫持 → OpenWrt                            │
│     ② RouteList → 10.10.10.252                    │
└───────┬──────────────────┘
        │ 透明代理的流量
        ▼
┌──────────────────────────┐
│ OpenWrt + OpenClash 10.10.10.252         │
│ Fake-IP → 代理节点 → 回程到 ROS            │
└───────┬──────────────────┘
        │ 回程流量
        ▼
┌──────────────┐
│ RouterOS NAT出口 │
└──────────────┘

1. 结构简单,易于管理

:glowing_star: 优点

  • RouterOS 主路由负责上网的基本 NAT、DHCP、DNS 等功能,不需要特别复杂的配置。
  • **OpenWrt(10.10.10.252)**专门作为 旁路代理,只负责代理流量,完全不参与路由和 NAT。
  • OpenClashSingbox 处理代理逻辑,不需要自己设置复杂的路由表
  • 透明代理只需设置 DNS 劫持 + DNAT,不需要额外的路由策略和复杂的网络管理,配置和维护都相对简单。
  • 回程流量不需要调整,RouterOS 会通过 NAT 自动处理,无需复杂的路由或策略切换。

:globe_showing_europe_africa: 适合家庭和小型网络

  • 配置简单,问题容易排查和修复。
  • 当 OpenWrt 掉线时,Netwatch 会自动恢复直连,避免黑洞。
  • 代理流量透明且可靠,几乎没有影响。

2. 稳定性和性能最佳

:glowing_star: 优点

  • 没有双网关:只有 RouterOS 作为网关,OpenWrt 不会成为网络的“瓶颈”,减少双网关导致的路由冲突和性能瓶颈。
  • 性能高:OpenWrt 仅作为代理盒子(不当网关),不会处理其他路由、NAT 等任务,负担非常轻。
  • 高可用性:如果 OpenWrt 掉线,Netwatch 会禁用 DNAT 规则,恢复到默认的直连模式。并且,国内访问流量会立即恢复,国外访问流量被丢弃,不会出现大量延迟。

:laptop: 适合高频使用的网络

  • 可以长时间稳定运行,不容易出现丢包、延迟等问题。
  • 适用于游戏、视频流、以及需要稳定网络的场景。

3. 隐私和安全性好

:glowing_star: 优点

  • 透明代理的流量完全通过 OpenClash 进行代理,不经过 RouterOS,所以不会留下任何可追踪的本地日志。
  • 通过 Fake-IP(虚拟 IP) 方案,外部网络只看到 虚拟 IP 地址,而非真实设备的 IP。
  • OpenWrt + OpenClash 可以灵活选择 代理节点(如 Shadowsocks, V2Ray, Trojan, etc.),保证了隐私的高度保护。

:locked_with_key: 适合注重隐私保护的用户

  • 所有的上网流量都可以走 加密隧道,降低被监控或追踪的风险。

4. 灵活性和可扩展性强

:glowing_star: 优点

  • Node(节点)配置灵活:你可以随时通过 OpenClash 修改代理节点,比如切换到不同国家的节点、切换不同的代理协议,或选择智能模式。
  • 规则和分流:你可以在 OpenClash 或 Singbox 中轻松设置分流规则,例如:
    • YouTube 流量走特定节点。
    • Google 流量走本地直连。
    • 国内流量 直连,国外流量 走代理。
  • 自动化和智能路由:通过 GeoIP,智能选择节点,让网络更加灵活高效。

5. 维护成本低

:glowing_star: 优点

  • 少量配置,低维护:这种方案的配置主要集中在 RouterOS 上的 NATDNS 劫持,在 OpenWrt 上的配置也仅限于 Clash/Singbox 的代理设置
  • 透明代理不依赖复杂的策略路由:无须额外的复杂路由表或标记路由规则,减少了配置的复杂性和出错的可能性。
  • 不容易出问题:如果 OpenWrt 掉线,Netwatch 会自动切换回直连模式,不会导致长时间断网。

:technologist: 适合新手和技术要求不高的用户

  • 设置简单,容易理解和操作,且问题容易解决。

6. 为什么不推荐策略路由模式?

:glowing_star: 缺点

  • 双网关模式复杂:需要配置 routing-table,使用 mark-routing 标记流量并指定下一跳,这样很容易出错,尤其是在主路由与旁路由之间的回程问题上。
  • NAT 双重处理:OpenWrt 需要处理自己的路由和 NAT,增加了网络的复杂度。并且需要避免双重 NAT 或者静态路由配置错误,导致流量无法正常回程。
  • 性能受限:由于需要处理更多的路由、NAT 规则,策略路由模式的性能相对较差,尤其是当路由器性能较弱时,容易出现性能瓶颈。
  • 维护难度大:复杂的路由配置需要定期检查和优化,且需要手动管理各个出口路径,出现问题时排查难度较大。

:green_square: 最终结论:透明代理(DNAT)是最优方案

:star: 为什么选择透明代理(DNAT)模式

  • 简洁:配置简单,只需要 DNS 劫持和 DNAT 配置,不需要复杂的路由和标记。
  • 稳定:OpenWrt 只负责代理,不负责其他复杂任务,负载小,性能高。
  • 高可用性:如果 OpenWrt 掉线,Netwatch 会自动切换,保证流量恢复直连。
  • 灵活性高:可随时更换代理节点,或者智能选择节点进行分流。
  • 安全性高:Fake-IP 技术隐蔽真实 IP,保护隐私。

:globe_showing_europe_africa: 这种方式最适合家庭用户和小型办公室的科学上网需求

openclash dns配置示例(优化)

dns:
  enable: true
  listen: 0.0.0.0:1053      # 监听所有接口的 DNS 请求
  ipv6: false                # 禁用 IPv6 支持
  respect-rules: true        # 启用规则模式进行 DNS 分流
  enhanced-mode: fake-ip     # 启用 fake-ip 模式
  fake-ip-range: 198.18.0.1/15 # 设置 fake-ip 
  fake-ip-filter-mode: blacklist
  fake-ip-filter:
    - "rule-set:private_domain,cn_domain" # 对国内域名进行过滤
    - "+.msftconnecttest.com"
    - "+.msftncsi.com"
    - "time.*.com"
  
  # 设置 DNS 解析服务(使用本地 DNS 或公共 DNS)
  nameserver:
    - 223.5.5.5              # 使用阿里云 DNS
    - 223.6.6.6              # 使用阿里云 DNS
    - 10.10.10.253           # 使用 RouterOS 提供的本地 DNS

  # 设置代理服务器的 DNS 配置(Cloudflare / Google DoH 用于解析国外域名)
  proxy-server-nameserver:
    - https://1.1.1.1/dns-query  # 使用 Cloudflare DoH 来解析国外的域名
    - https://8.8.8.8/dns-query  # 使用 Google DoH 来解析国外的域名

Telegram透明代理不能连接的问题解决

一、在 RouterOS 上创建 Telegram 地址列表

这些地址列表包含了 Telegram 的 IP 地址范围,我们继续使用这些地址列表来标记 Telegram 流量,这些 IP 地址范围确保 Telegram 流量会被正确标记并进行处理。

/ip firewall address-list
add address=91.108.56.0/22 list=telegram_addr
add address=91.108.4.0/22 list=telegram_addr
add address=91.108.8.0/22 list=telegram_addr
add address=91.108.16.0/22 list=telegram_addr
add address=91.108.12.0/22 list=telegram_addr
add address=149.154.160.0/20 list=telegram_addr
add address=91.105.192.0/23 list=telegram_addr
add address=91.108.20.0/22 list=telegram_addr
add address=185.76.151.0/24 list=telegram_addr
add address=149.154.168.0/22 list=telegram_addr
add address=149.154.172.0/22 list=telegram_addr
add address=5.28.192.0/18 list=telegram_addr
add address=95.161.64.0/20 list=telegram_addr
add address=109.239.140.0/24 list=telegram_addr
add address=91.108.0.0/16 list=telegram_addr

二、创建并配置路由表

你已经配置了一个名为 telegram_proxy 的路由表,并指向 OpenWrt 的网关(10.10.10.252)。这条配置是正确的,确保 Telegram 流量通过 OpenWrt 转发。

1.创建路由表
/routing/table/add name=telegram_proxy fib

2.将路由条目添加到新路由表
/ip/route/add gateway=10.10.10.252 routing-table=telegram_proxy comment=telegram_proxy_route

这条命令的作用是将标记为 telegram_proxy 的流量通过 OpenWrt 转发。确保 OpenWrt 的代理服务能够处理该流量。

三、在 RouterOS 上设置 mangle 规则

你已经正确地为 Telegram 流量添加了 mangle 规则,目的是根据目的地址(即 Telegram 的 IP 地址范围)来标记流量,标记后的流量将通过 telegram_proxy 路由表转发到 OpenWrt。

/ip/firewall/mangle/add chain=prerouting dst-address-list=telegram_addr action=mark-routing new-routing-mark=telegram_proxy passthrough=yes

这条规则会在路由表的预处理阶段(prerouting)对目的地址属于 telegram_addr 地址列表的流量进行标记,并将其路由到 telegram_proxy 路由表。

四、防火墙

这条规则允许 目的地址在 telegram_addr 地址列表中的流量(即 Telegram 的流量)通过转发链(forward),不指定协议和端口。因此,所有目的地是 Telegram 服务器的流量都会被接受,无论是 TCP 还是 UDP,或者是 443 端口或其它端口。

/ip firewall filter add chain=forward dst-address-list=telegram_addr action=accept comment="Allow Telegram traffic"

批量修改网关脚本

脚本

:local oldIP "10.10.10.252"
:local newIP "10.10.10.7"

# 1. NAT 规则里改 to-addresses / dst-address
/ip firewall nat
:foreach i in=[find where comment="fakeip_proxy"] do={

    :if ([:len [get $i to-addresses]] > 0) do={
        :if ([get $i to-addresses] = $oldIP) do={
            set $i to-addresses=$newIP
        }
    }

    :if ([:len [get $i dst-address]] > 0) do={
        :if ([get $i dst-address] = $oldIP) do={
            set $i dst-address=$newIP
        }
    }
}

# 2. 路由里改 gateway
/ip route
:foreach i in=[find where comment="fakeip_proxy"] do={

    :if ([:len [get $i gateway]] > 0) do={
        :if ([get $i gateway] = $oldIP) do={
            set $i gateway=$newIP
        }
    }
}

以后 IP要改,只要改脚本最上面两行

:local oldIP "原来的IP"
:local newIP "新的IP"
  • 用命令检查结果
/ip firewall nat print where comment=fakeip_proxy
/ip route print where comment=fakeip_proxy
  • 不用脚本
/ip firewall nat set [find comment=fakeip_proxy && to-addresses=10.10.10.252] to-addresses=10.10.10.7
/ip firewall nat set [find comment=fakeip_proxy && dst-address=10.10.10.252] dst-address=10.10.10.7
/ip route set [find comment=fakeip_proxy && gateway=10.10.10.252] gateway=10.10.10.7