背景
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/
手順
-
アカウント作成およびログイン 省略(各自で行ってください)。
-
Workersプロジェクトのセットアップ Cloudflare CLIツール
wranglerを使用して新しいプロジェクトを作成します。
npm create cloudflare@latest
工程を選択後、以下のコマンドでローカルテストを行います:
npx wrangler dev
正しく動作すれば、ブラウザで http://localhost:8787 にアクセスできます。
- YAML操作用ライブラリのインストール
npm install js-yaml
- カスタムルールの追加
次の 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);
}
};
- 環境変数の設定
開発時には .dev.vars ファイルに、本番環境では wrangler.toml の [vars] セクションに次の設定を追加します:
SOURCE_URL=[あなたのサブスクリプションURL]
- デプロイ
次のコマンドで Cloudflare にデプロイします:
npx wrangler deploy
- プロクシツールのサブスクリプション更新
デプロイ後に生成されたURLをプロクシツールのサブスクリプションアドレスに設定します。
これで、カスタムルールを使用したプロクシ設定が完了します。