規則是靜態的匹配表,而指令碼模式允許你用一段 JavaScript 為每一條連線動態決定出口——按時間段、按連接埠、按解析出的 IP,邏輯任意組合。這是 Premium 核心的功能,CFW 開箱即用。

啟用方式

設定檔頂級加入 script 段,並把 mode 設為 script(CFW 的模式切換裡會出現 Script 選項):

mode: script
script:
  code: |
    function main(ctx, metadata) {
      // 返回出口名稱:代理組名 / "DIRECT" / "REJECT"
      if (metadata.host && metadata.host.endsWith("company.com")) {
        return "DIRECT";
      }
      // 深夜自動直連遊戲,白天走代理組
      const hour = new Date().getHours();
      if (metadata.dst_port === 3074 && hour >= 1 && hour <= 7) {
        return "DIRECT";
      }
      // 其餘交給規則引擎繼續匹配
      return ctx.resolveOutbound(metadata) ?? "節點選擇";
    }
合作推薦 訂閱連結從哪來? 本站合作機場註冊即送 1GB 香港高速體驗流量,可直接一鍵匯入。 取得高速節點

metadata 常用欄位

欄位含義
host目標域名(可能為空,純 IP 連線時)
dst_ip / dst_port目標 IP 與
src_ip / src_port來源位址(配合 allow-lan 區分裝置)
networktcp / udp
process_name處理程序名(TUN 下可用)

上下文物件還提供 ctx.geoip(ip)ctx.resolveIP(host) 等工具函式,可實現「先解析再按歸屬分流」這類規則做不到的邏輯。

指令碼 shortcuts:更輕量的用法

不想整個接管 mode,可以只定義「快捷函式」,然後在普通規則裡引用,兼得兩者:

script:
  shortcuts:
    late-night-game: dst_port == 3074 and now.hour < 7

rules:
  - SCRIPT,late-night-game,DIRECT
  - MATCH,節點選擇

注意事項

  • 指令碼對每條連線執行,複雜邏輯會放大延遲;能用規則表達的儘量用規則。
  • 指令碼報錯時連線會失敗,Logs 頁面會輸出異常資訊,改動後務必觀察日誌。
  • 不要執行來路不明的設定中的指令碼——指令碼能力越強,惡意設定的風險越大。
提示:時間、連接埠一類的條件用 shortcuts 表達最簡潔;只有需要呼叫解析、組合多條件時才值得寫完整 main 函式。