Cloudflare Workersを使用したカスタムプロクシルールの設定

背景

Microsoft Copilotを使用中に、「ルール」モードで常に接続できない問題に遭遇しました。その後、次のようなエラーページが表示されました。

この問題はおそらくプロクシツールの「ルール」設定によるものですが、時には「ルール」モードを使いたい場面もあります。特にトラフィックコストを考慮すると、手動でモードを切り替えるのは煩雑です。

以下は、あるプロクシツールの「ルール」設定画面です:

では、このルールをどのように変更すればよいのでしょうか?

プロクシルールについて

まず、これらのルールがどこから来ているのかを確認する必要があります。私の場合、サブスクリプションURLから取得しており、その内容は次のようになっています:

port: ****
socks-port: ****
allow-lan: false
mode: Rule
log-level: silent
rules:
  - DOMAIN-SUFFIX,ghcr.io,Proxy

rulesセクションには、具体的なルールが記述されています。それぞれのルールタイプとその意味を以下に示します:

ルールタイプ 説明
DOMAIN-KEYWORD 指定されたキーワードを含むドメインにマッチします。
DOMAIN-SUFFIX 指定されたサフィックスで終わるドメインにマッチします。
IP-CIDR 指定されたCIDR範囲内のIPアドレスにマッチします。
GEOIP 指定された地理的地域に属するIPアドレスにマッチします。
SRC-IP 指定されたソースIPアドレスにマッチします。
URL-REGEX 指定された正規表現パターンに一致するURLにマッチします。
USER-AGENT 指定されたユーザーエージェントにマッチします。
FORCE-PROXY 他のルールに関係なく必ずプロクシを使用します。
DIRECT プロクシを使用せず直接接続します。

それでは、簡単で費用のかからない方法でこれらのルールを変更する方法を探ってみましょう。

Cloudflare Workersの使用

Cloudflare Workersは、Cloudflareによって提供されるサーバーレス技術です。これはグローバルに分散されたエッジノード上でコードを実行し、低遅延と高性能を実現します。さらに、基本的なプランは無料です!

公式サイト:https://www.cloudflare.com/ja-jp/

手順

  1. アカウント作成およびログイン 省略(各自で行ってください)。

  2. Workersプロジェクトのセットアップ Cloudflare CLIツール wrangler を使用して新しいプロジェクトを作成します。

npm create cloudflare@latest

工程を選択後、以下のコマンドでローカルテストを行います:

npx wrangler dev

正しく動作すれば、ブラウザで http://localhost:8787 にアクセスできます。

  1. YAML操作用ライブラリのインストール
npm install js-yaml
  1. カスタムルールの追加

次の TypeScript コードを index.ts に書き込みます:

import * as yaml from 'js-yaml';

export interface Env {
  SOURCE_URL: string;
}

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const sourceUrl = env.SOURCE_URL;
    const init = {};
    const response = await fetch(sourceUrl);
    const configString = await response.text();
    const updatedConfigString = this.updateRules(configString);

    return new Response(updatedConfigString, { headers: { "Content-Type": "text/plain" } });
  },

  updateRules(configString: string): string {
    const config = yaml.load(configString) as any;

    // 不要なルールを削除
    config.rules = config.rules?.filter((rule: string) => !rule.includes("microsoft"));

    // 新しいルールを追加
    config.rules.push('DOMAIN-KEYWORD,microsoft,Proxy');
    config.rules.push('DOMAIN-KEYWORD,copilot,Proxy');
    config.rules.push('DOMAIN-SUFFIX,microsofttranslator.com,Proxy');

    return yaml.dump(config);
  }
};
  1. 環境変数の設定

開発時には .dev.vars ファイルに、本番環境では wrangler.toml[vars] セクションに次の設定を追加します:

SOURCE_URL=[あなたのサブスクリプションURL]
  1. デプロイ

次のコマンドで Cloudflare にデプロイします:

npx wrangler deploy
  1. プロクシツールのサブスクリプション更新

デプロイ後に生成されたURLをプロクシツールのサブスクリプションアドレスに設定します。

これで、カスタムルールを使用したプロクシ設定が完了します。

タグ: Cloudflare Workers YAML Proxy Configuration

5月19日 12:39 投稿