跨省异地组网 + Fake-IP 透明代理排坑笔记

记录一次跨省异地组网的硬核折腾。原以为打通 OpenVPN 隧道就完事,结果踩遍了底层网络的坑。去除废话,直接上拓扑和解决步骤,供同好抄作业。
网络拓扑:
- 广州端(客户端):老毛子 Padavan(运行 OpenVPN 客户端)
- 湖南端(服务端):爱快 iKuai(主路由 + OpenVPN 服务端
10.10.10.253) + OpenWrt(旁路由 + OpenClash10.10.10.252) - VPN 虚拟网段:
10.7.7.0/24
第一步:基础环境排雷
在搞跨省引流前,先解决本地和远端的环境死锁。
1. 解决广州出租屋网关冲突
出租屋光猫和老毛子容易产生网关 ARP 冲突。直接在老毛子的“自定义设置 -> 脚本 -> 在路由器启动后执行”中,写死光猫的 MAC 地址绑定:
arp -s 192.168.1.1 3c:a1:61:6a:87:db
2. 解决老家 OpenWrt 502 Bad Gateway
透明代理日志极易塞满 /tmp,导致核心进程假死报 502。SSH 登录 OpenWrt,输入 crontab -e 写入定时任务,每天凌晨 4 点清理日志并重启 UI 服务:
0 4 * * * rm -rf /tmp/log/* && /etc/init.d/uhttpd restart
3. 清理本地 DNS 与 DHCP 污染
- 停用老毛子自带的 Google-fu 插件,避免 53 端口冲突。
- 进入老毛子
内部网络 (LAN) -> DHCP 服务器: - DNS 服务器 1:指老家旁路由
10.10.10.252。
第二步:打通旁路由(解决路由黑洞)
此时 DNS 已能拿到 198.18.x.x (Fake-IP),但流量进不了 Clash,需要在主旁路由写明转发规则。
1. 爱快端(主路由下发)
- 端口分流:协议
任意-> 源地址10.7.7.0/24-> 下一跳网关10.10.10.252(将 VPN 流量踢给旁路由)。 - 静态路由:目的地址
198.18.0.0/16-> 下一跳10.10.10.252。
2. OpenWrt 端(补回程票)
- 静态路由:目标网段
10.7.7.0-> 掩码255.255.255.0-> IPv4 网关10.10.10.253(爱快 IP)。
3. OpenWrt 端(iptables 强制劫持)
跨网段流量容易被 OpenClash 的 ACL 漏接,直接在 OpenWrt 网络 -> 防火墙 -> 自定义规则 中硬核劫持(假定代理端口为 7892):
# 允许来自 VPN 网段 (10.7.7.0/24) 的请求访问转发
iptables -I FORWARD -s 10.7.7.0/24 -j ACCEPT
#只要是从广州 VPN 来的包,除了去老家内网 10.10.10.x 的,其他的不管是 Fake-IP 还是 Telegram 真实 IP,统统给我进 Clash!
iptables -t nat -I PREROUTING -s 10.7.7.0/24 ! -d 10.10.10.0/24 -p tcp -j REDIRECT --to-ports 7892
# 确保 198.18.0.0 的流量能被 Clash 捕获
#iptables -t nat -I PREROUTING -s 10.7.7.0/24 -p tcp -d 198.18.0.0/16 -j REDIRECT --to-ports 7892
第三步:极限压制 MTU(解决能 Ping 通但网页假死)
跨省 PPPoE + OpenVPN 封装 + Fake-IP,包头极其臃肿。1500 的大包会被运营商骨干网直接丢弃。
1. 服务端(爱快)
- OpenVPN 服务端设置,MTU 强行修改为
1280。
2. 客户端(老毛子)
- 进入
VPN 客户端 -> 设置 -> OpenVPN 扩展配置,最下方追加底层指令,钳制虚拟网卡及 TCP MSS 分片:
tun-mtu 1280
mssfix 1240
保存并重拨 VPN,网页即可秒开。
第四步:接管直连 App 流量(TG / X)
基于 DNS 欺骗的 Fake-IP 搞不定硬编码 IP 和强制走 UDP 的 App。
1. Telegram:硬编码 IP 绕过 DNS
进入老毛子的 OpenVPN 扩展配置,手动注入 TG 的核心 ASN 网段,强制绑进 VPN 隧道:
route 91.108.0.0 255.255.0.0
route 149.154.0.0 255.255.0.0
2. X (Twitter) / YouTube:QUIC 协议绕过 TCP 劫持
进入老家 OpenWrt 的 OpenClash 后台 -> 全局设置 -> 勾选 “禁用 QUIC (Drop QUIC)”。
逻辑:墙掉 UDP 443,逼迫 App 降级走 TCP 443 协议,从而落入 iptables 的劫持规则中。
总结
flowchart TD
subgraph 广州出租屋 [广州出租屋 - 客户端环境]
Device[手机 / 电脑] --“DHCP 指定 DNS: 10.10.10.252
关闭私密 DNS”–> Padavan
Padavan((老毛子 Padavan<br>OpenVPN Client))
Padavan -. "静态 ARP 绑定 (防冲突)<br>192.168.1.1 3c:a1...db" .-> Modem[电信光猫]
Padavan -- "强制 Telegram 路由走隧道<br>91.108.0.0/16<br>149.154.0.0/16" --> Padavan
end
subgraph 公网传输
VPN{OpenVPN 隧道<br>虚拟网段: 10.7.7.0/24}
Padavan <== "tun-mtu 1280<br>mssfix 1240" ===> VPN
end
subgraph 湖南老家 [湖南老家 - 服务端环境]
iKuai((爱快 iKuai 主路由<br>IP: 10.10.10.253<br>OpenVPN Server))
VPN <== "推送路由:<br>198.18.0.0/16 (Fake-IP)<br>10.10.10.0/24 (内网)" ===> iKuai
iKuai -- "【端口分流】源 10.7.7.x 踢给旁路由<br>【静态路由】目标 198.18.x.x 指向旁路由" --> OpenWrt
OpenWrt((OpenWrt 旁路由<br>IP: 10.10.10.252<br>OpenClash + ADG))
OpenWrt -. "【静态路由】目标 10.7.7.x (回程票) 指向主路由" .-> iKuai
OpenWrt -- "【iptables 劫持】<br>拦截 10.7.7.x 的 TCP 至 7892 端口" --> Clash[OpenClash 核心]
OpenWrt -- "屏蔽 UDP 443 端口<br>(逼迫 X App 降级走 TCP)" --> Firewall[防火墙 / Drop QUIC]
end
Clash == "透明代理 / 规则分流" ===> Internet((国际互联网))
classDef local fill:#E3F2FD,stroke:#2196F3,stroke-width:2px;
classDef remote fill:#F3E5F5,stroke:#9C27B0,stroke-width:2px;
classDef core fill:#FFF3E0,stroke:#FF9800,stroke-width:2px;
class Padavan local;
class iKuai remote;
class OpenWrt core;
评论区