简述
这是一种基于域名的 VPN 智能翻越方案。不同于 chnroutes 这类通过维护一个 IP 地址列表来区分国内外网站的方案,基于域名的方式不受 IP 地址变动的影响。仅需维护一个相对很少有变化的域名列表即可。
dnsmasq 在 2.66 版之后加入了对 ipset 的支持,可将指定域名的 IP 解析后自动加入某一 ipset 中。 再配置路由规制,使该 ipset 中的 IP 走 VPN 即可。
感谢 @wzyboy 提供了此方案的思路。
大致流程
- 配置 VPN
- 配置 dnsmasq,指定域名
- 增加一个路由表,默认网关为 VPN
- 使用 iptables 匹配 ipset 并打上 mark
- 使用 ip rule 将打上 mark 的包送入该路由表
所需软件
- iproute2
- dnsmasq (>= 2.66, has ipset)
- iptables (with ipset and mark modules)