1. 起因

一般来讲,国内用户翻墙最简单最高效的方式,是使用“机场”提供的服务。按理说,你只要选择到一个优秀的“机场”服务商,就可以高枕无忧的享受高速跨境体验;或者对于价格敏感、使用频率不高的用户,选择一个性价比的“机场”,花小钱就把事办了也是一种方案。

既然如此,标题说的合并机场节点和自建节点,为什么要这样做呢?主要以下两个原因:

  1. 同时拥有顶级体验和超低价格
  2. 充分利用手中的 VPS 资源

好的“机场”服务商通过多入口的中转接入,然后再到各个地区的落地,线路上的优势相比自建节点是明显的且不会受到运营商和墙的干扰,但价格高昂;而自建节点通常选用的 VPS 价格便宜且流量较多,不愁“机场”流量耗尽的尴尬情况。所以我们选用顶级机场的入门套餐和自建节点相结合的方式,具体配置方法让我们继续看下去。

2. 机场的选择

机场的选择不会太多,筛选条件一个一个列出来:

  • 开设时间保底 1 年,最佳 3 年的大机场,包含便宜的入门套餐。
  • 香港节点普通延迟小于 50 毫秒,HTTPS 延迟小于 200 毫秒,且高峰期带宽足。
  • 至少两个不同地区中转入口,确保服务稳定性。
  • 优质的落地线路。
  • AI 、流媒体全解锁。

综合以上,本人唯一推荐的机场就是 AmyTelecom,Anycast 接入+专线中转,套餐 Bronze:每月 50G 流量,273 元/年。官网:https://www.amytele.net/

其他可以看看 ImmTel,套餐 Basic (Personal):每月 25G 流量,208 元/年。官网:https://immtele.com/

PS:请上面两家机场的老板,把推荐费打到我的支付宝。😉

3. 构建配置文件

mixed-port: 7890
allow-lan: false
bind-address: "*"
find-process-mode: strict
mode: rule
log-level: info
ipv6: true
keep-alive-interval: 30
external-controller: 0.0.0.0:9090
secret: "BxVdLvyUpDGm1S6r"
profile:
  store-selected: true
  store-fake-ip: true
unified-delay: true
tcp-concurrent: true
global-client-fingerprint: chrome
geodata-mode: true
geodata-loader: standard
geo-auto-update: true
geo-update-interval: 168
geox-url:
  geoip: "https://testingcf.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat"
  geosite: "https://testingcf.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat"
dns:
  enable: true
  prefer-h3: true
  listen: 0.0.0.0:53
  ipv6: true
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  use-hosts: true
  fake-ip-filter:
    - '*'
    - '*.lan'
    - '+.local'
    - 'localhost.ptlogin2.qq.com'
    - '+.srv.nintendo.net'
    - '+.stun.playstation.net'
    - 'xbox.*.microsoft.com'
    - '+.xboxlive.com'
  nameserver-policy:
    'geosite:cn':
      - https://223.5.5.5/dns-query#h3=true
      - https://1.12.12.12/dns-query
  nameserver:
    - https://1.1.1.1/dns-query
    - https://9.9.9.9/dns-query
  proxy-server-nameserver:
    - https://223.5.5.5/dns-query#h3=true
proxies:
  - name: 🇺🇸 自建节点
    type: vless
    server: server
    port: port
    uuid: uuid
    network: tcp
    tls: true
    udp: true
    flow: xtls-rprx-vision
    servername: example.com
    reality-opts:
      public-key: xxxx
      short-id: xxxx
    client-fingerprint: chrome
proxy-providers:
  jichang:
    type: http
    url: https://example.com/sub?target=clash&emoji=true&udp=true&new_name=true&config=xxxx
    path: ./jichang.yaml
    interval: 3600
    proxy: DIRECT
    health-check:
      enable: false
    filter: "03|05"
    exclude-filter: "美国"
proxy-groups:
  - name: ⚡️ 自动选择
    type: url-test
    disable-udp: false
    use:
      - jichang
    url: https://www.gstatic.com/generate_204
    interval: 150
    tolerance: 15
  - name: 🌎 国外媒体
    type: select
    disable-udp: false
    proxies:
      - 🇺🇸 自建节点
rules:
  - GEOSITE,private,DIRECT
  - GEOSITE,category-games@cn,DIRECT
  - GEOSITE,cn,DIRECT
  - GEOSITE,category-ads-all,REJECT
  - GEOSITE,category-games,⚡️ 自动选择
  - GEOSITE,category-social-media-!cn,🌎 国外媒体
  - GEOSITE,category-porn,🌎 国外媒体
  - GEOSITE,category-entertainment,🌎 国外媒体
  - GEOSITE,geolocation-!cn,⚡️ 自动选择
  - GEOIP,private,DIRECT,no-resolve
  - GEOIP,cn,DIRECT
  - MATCH,⚡️ 自动选择

该配置文件使用了 mihomo (clash meta) 兼容的书写方式,而 mihomo 作为目前 clash 系持续维护的版本,其自身的诸多优势使其成为“机场”使用的不二选择。配置文件中的部分内容需要自定义,接下来我们一条一条详细解释。

3.1 geodata 部分的配置

geodata-mode: true
geodata-loader: standard
geo-auto-update: true
geo-update-interval: 168
geox-url:
  geoip: "https://testingcf.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geoip.dat"
  geosite: "https://testingcf.jsdelivr.net/gh/Loyalsoldier/v2ray-rules-dat@release/geosite.dat"

geodata 的使用主要是为了实现高效的地理位置 based 流量分流,配置好后可舍弃 rule-providers 这种方式的规则引入:

  • geodata-mode,geoip 数据模式使用 dat 还是 mmdb 格式。建议 true 使用 dat 格式。
  • geodata-loader,geo 文件加载模式。这里使用 standard;如果是路由器或者其他小内存设备,请使用 memconservative
  • geo-auto-updategeo-update-interval,启用自动更新和设置更新间隔。单位为小时,一般来讲 geodata 文件的更新间隔设置在一周至一月之间即可。
  • geox-url,geo 文件的下载和更新地址,数据模式使用 dat 格式时只需配置 geoipgeosite 两行即可。*ray 系默认使用 v2fly 仓库中提供的版本, 而本配置使用的是 Loyalsoldier 的增强版本。

3.2 引入自建节点

mihomo 支持众多协议的代理节点配置,通过 proxies 字段引入,内容为数组。比方说你自建的节点使用 VLESS-Vision-REALITY,那么具体配置如下所示。其他协议的配置方式参考:虚空终端 Docs

proxies:
  - name: 🇺🇸 自建节点 # 自建节点名称
    type: vless
    server: server
    port: port
    uuid: uuid
    network: tcp
    tls: true
    udp: true
    flow: xtls-rprx-vision
    servername: example.com # 偷域名
    reality-opts:
      public-key: xxxx
      short-id: xxxx
    client-fingerprint: chrome

另外如果有多个自建节点要引入,可以在此一起配置,然后在步骤 3.4 中一起添加到自建节点组。

3.3 引入机场节点

上一步骤通过 proxies 引入自建节点后,接下来我们通过 proxy-providers 引入机场节点。

proxy-providers:
  jichang:
    type: http
    url: https://example.com/sub?target=clash&emoji=true&udp=true&config=xxxx
    path: ./jichang.yaml
    interval: 3600
    proxy: DIRECT
    health-check:
      enable: false
    filter: "03|05"
    exclude-filter: "美国"
  • type, 订阅方式。因为是在线订阅所以选择 http 。
  • url,填写机场的订阅链接。一般机场都提供多种方式的订阅链接,这里只需要把 clash 的订阅链接复制粘贴到此处。
  • interval,订阅更新时间。
  • proxy,机场的订阅链接一般都使用未屏蔽的域名且少有变动,这里填 DIRECT 。
  • health-check,健康检查禁用。
  • filter,对机场的节点进行匹配筛选。机场的节点一般都包括多个地区且每个地区包含多个落地,比如香港 01,香港 02,香港 03……日本 01,日本 02,日本 03……新加坡 01,新加坡 02,新加坡 03……命名均遵循一定的规律。此处假设填写 03,就可以筛选出所有包含 03 的节点。建议每个地区筛选两个落地就好,效果可以看下图。
  • exclude-filter,对机场的节点进行排除。我的自建节点位于美国,所以就把机场的美国节点排除了,填写美国。仅留下速度较快的亚洲节点即可。

3.4 节点分组以及组内策略

机场节点和自建节点引入完成后,把它们分成两个组以方便配置路由规则。其中机场节点组为排在前面的默认组,组名称:⚡️ 自动选择,type 策略类型为 url-test(每 150 秒测试一次组内节点的延迟,自动选择延迟最低的节点)。自建节点组名称:🌎 国外媒体,type 策略类型为 select 。具体如下所示:

proxy-groups:
  - name: ⚡️ 自动选择
    type: url-test
    disable-udp: false
    use:
      - jichang
    url: https://www.gstatic.com/generate_204
    interval: 150
    tolerance: 15
  - name: 🌎 国外媒体
    type: select
    disable-udp: false
    proxies:
      - 🇺🇸 自建节点
  • disable-udp,禁用 udp 。
  • use,引入 proxy-providers 中的 jichang 订阅节点。
  • proxies,引入 proxies 中的自建节点。
  • url,健康检查测试地址。
  • interval,健康检查间隔,如不为 0 则启用定时测试,单位为秒。
  • tolerance,节点切换容差。如本次检查结果相比上一次,有节点的延迟更小,差距大于设定值则切换节点。

3.5 路由规则

总体思路是一般的需代理网站走默认策略组(机场节点),消耗流量多的需代理流媒体网站、成人网站走自建节点,以实现本文标题【合并机场节点和自建节点】的意义。

rules:
  - GEOSITE,private,DIRECT
  - GEOSITE,category-games@cn,DIRECT
  - GEOSITE,cn,DIRECT
  - GEOSITE,category-ads-all,REJECT
  - GEOSITE,category-games,⚡️ 自动选择
  - GEOSITE,category-social-media-!cn,🌎 国外媒体
  - GEOSITE,category-porn,🌎 国外媒体
  - GEOSITE,category-entertainment,🌎 国外媒体
  - GEOSITE,geolocation-!cn,⚡️ 自动选择
  - GEOIP,private,DIRECT,no-resolve
  - GEOIP,cn,DIRECT
  - MATCH,⚡️ 自动选择

11 行规则至少能适配 95% 的场景,不要再去用机场那种几百行、甚至上千行的规则了。如果有自定义的规则要添加,可以按从上到下、从小到大的顺序,插入到合适位置。比如:

  • 一加海外社区走代理:DOMAIN,community.oneplus.com,⚡️ 自动选择
  • 微软 OneDrive 走直连:GEOSITE,onedrive,DIRECT
  • Netflix 等需要流媒体解锁的:
    • 自建节点能直接解锁(配置 warp 解锁或者接入第三方解锁):GEOSITE,netflix,🌎 国外媒体
    • 直接走机场指定节点:GEOSITE,netflix,🇸🇬 新加坡 03

那么合在一起就是下面的效果:

rules:
  - DOMAIN,community.oneplus.com,⚡️ 自动选择
  - GEOSITE,private,DIRECT
  - GEOSITE,category-games@cn,DIRECT
  - GEOSITE,onedrive,DIRECT
  - GEOSITE,cn,DIRECT
  - GEOSITE,category-ads-all,REJECT
  - GEOSITE,category-games,⚡️ 自动选择
  - GEOSITE,category-social-media-!cn,🌎 国外媒体
  - GEOSITE,category-porn,🌎 国外媒体
  - GEOSITE,netflix,🌎 国外媒体
  - GEOSITE,category-entertainment,🌎 国外媒体
  - GEOSITE,geolocation-!cn,⚡️ 自动选择
  - GEOIP,private,DIRECT,no-resolve
  - GEOIP,cn,DIRECT
  - MATCH,⚡️ 自动选择

4. 导入客户端

上面的步骤全部完成后,把配置保存成 yaml 结尾的文件,就可以准备导入到客户端了。下图以电脑客户端 Clash Verge Rev 为例,新建 Local 类型的配置开始导入。

接下来最后的步骤:设置中开启系统代理开机启动静默启动,打完收工。🎉💪🍻

5. 备注

  • 本配置不包含 tun 字段,因本人不使用该模式。
  • 本配置不包含 sniffer 字段,因本人不使用透明代理。

6. 致谢