Shadowrocket 設定ファイル「.conf」を解説:General・Rule・Host・URL Rewriteの役割

.conf設定ファイルをセクションごとに解説。Generalは全般設定とDNS、Ruleは通信の振り分け、Hostはローカルの名前解決、URL Rewriteはリクエストの書き換えを担当します。編集後の反映方法も紹介します。

この記事の概要

この記事は、Shadowrocketにプロバイダーのサブスクリプションを追加済みで、ローカル設定の仕組みを理解・編集したい方向けです。まず接続情報と通信ルールの違いを確認し、最小限の.conf例で4つのセクションを見ていきます。最後に「バックアップ、編集、選択、テスト」の順で変更を検証し、DNS・ルール・リクエスト書き換えの問題を切り分けます。

1. .conf・サブスクリプション・現在の接続を区別する

.confはテキスト形式の設定ファイルで、角括弧内の名前がセクションを表します。セクションごとに構文が異なります。[General]は主にキーと値の組み合わせ、[Rule]はカンマ区切りのルール、[Host]はホスト名のマッピング、[URL Rewrite]はマッチ条件・転送先・アクションを記述します。あるセクションの書式を別のセクションにそのまま使うことはできません。

Homeでサブスクリプションを追加するのは、利用可能な接続項目を取得するためです。一方、Configで設定を選ぶと、通信をどのように処理するかが決まります。両者は関連しますが、同じ操作ではありません。利用中のプロバイダーとサブスクリプションがある場合は、プロバイダーからリンクを入手し、接続情報が提供されるのか、設定全体が提供されるのかを確認してください。URLの末尾だけで内容を判断しないでください。

4つのセクション
General / Rule / Host / URL Rewriteを解説
3つの画面
Homeは接続、Configは設定、Settingsはアプリの各種設定を管理
4つのモード
Global Routing:Proxy / Direct / Config / Scene

[Rule]の振り分け動作を確認するには、Home → Global RoutingでConfigを選択します。ProxyとDirectは、このセクションのルールを検証するための同等の環境ではありません。Sceneを使っている場合は、そのシーンで適用される設定も確認してください。ファイルを保存しただけで現在のモードを確認しないと、「ルールを変更しても何も変わらない」と誤解しがちです。

2. General:全般設定を確認してからDNSを判断

[General]では、DNSなどの全般的な動作を設定します。読むときは、まず等号の左側にあるキーを確認し、次に右側の値を見ます。フィールド名・英語の句読点・真偽値はそのままにしてください。値の中に日本語の説明を加えたり、半角カンマを全角カンマに置き換えたりしないでください。

[General]
dns-server = system

ここでのdns-server = systemは、システムのDNSを使う設定です。すべての接続が直接通信するという意味でも、すべてのリクエストにプロキシを指定するという意味でもありません。DNSは「ホスト名をどう名前解決するか」、Ruleは「接続にどのポリシーを適用するか」を決めます。実際の名前解決先は、ルールのオプションやプロキシプロトコル、ほかのDNS設定にも左右されます。

Generalの確認ポイント

セクション名
[General]
キーの例
dns-server
値の例
system
書式
キー = 値

動作中のDNS設定を維持し、フィールドは一度に1つだけ変更します。

Ruleの確認ポイント

セクション名
[Rule]
マッチ条件
DOMAIN-SUFFIX / IP-CIDR / GEOIP
ポリシー
DIRECT / PROXY / REJECT
フォールバック
FINAL,PROXY

DNS設定でポリシーは代用できません。通信の振り分け順はRuleで確認します。

「接続項目は使えるのに、ドメインにアクセスできない」場合は、まずログで名前解決に失敗しているのか、IPアドレスの取得後に接続が失敗しているのかを確認します。前者ならDNSを優先して調べます。後者の場合は、適用されたポリシー、接続先ポート、サーバーの状態も確認してください。HTTPSの標準ポートは443ですが、プロバイダーの接続ポートが443とは限りません。混同しないようにしましょう。

3. Rule:上から順に照合し、FINALは最後に置く

[Rule]のルールは上から順に照合され、最初に一致したルールのポリシーが適用されます。「より具体的な条件」を探して後続のルールと比較することはありません。そのため、例外ルールは広い条件のルールより前に置き、残りの通信を受けるFINALは最後に配置します。

[Rule]
DOMAIN,blocked.example.com,REJECT
DOMAIN-SUFFIX,example.com,DIRECT
IP-CIDR,192.0.2.0/24,DIRECT,no-resolve
GEOIP,CN,DIRECT
FINAL,PROXY

ここに記載したドメインと192.0.2.0/24は説明用の例であり、接続先を示すものではありません。1行目は指定したホストを拒否し、2行目はexample.comとそのサブドメインへの接続を直接行います。ホスト単位の拒否ルールが先にあるため、blocked.example.comは後続のサフィックスルールで許可されません。

キーワードまたはポリシー役割確認ポイント
DOMAIN-SUFFIXドメインのサフィックスとそのサブドメインに一致プロトコル、ポート、パスを含めずに指定
IP-CIDRIPv4アドレスの範囲に一致no-resolveは、このルールの照合時にドメインを積極的に名前解決しないようにします
GEOIPIPアドレスの地理情報データベースに基づいて照合Webページの言語やドメインの末尾で判断するものではありません
DIRECT宛先に直接接続ローカルネットワークと宛先への到達性に左右されます
PROXYプロキシポリシーを使って通信利用可能な接続項目があることを確認
REJECT一致した接続を拒否通常利用するドメインを誤ってブロックしていないか確認
FINAL前のルールに一致しなかった通信を処理ドメインのパラメーターを指定せず、最後に配置

ポイント:最初に一致したルールを特定してから変更する

誤った振り分けが起きたら、接続ログで実際のホスト名と適用されたポリシーを確認し、必要な個別ルールを広い条件のルールより前に置きます。FINALの後ろにルールを追加するだけでは解決しません。

4. Host:名前解決を変更する。URLは変わらない

[Host]はローカルの名前解決に使います。次の例では、lab.example.comを文書用アドレス192.0.2.10に割り当てています。このアドレスはアクセス可能なテストサーバーではありません。実際に使う場合は、自分が管理でき、確実に到達できる宛先アドレスに置き換えてください。

[Host]
lab.example.com = 192.0.2.10

ドメインを特定のサーバーに割り当てた後で証明書エラーが起きても、IPアドレスに到達できるだけでHostの設定が正しいとは限りません。そのサーバーが元のホスト名とTLSを正しく処理できる必要があります。アプリが独自に名前解決する場合や特定の接続方法を使う場合は、すべてのリクエストに同じローカルマッピングが適用されるとは限りません。実際の接続ログを確認してください。

5. URL Rewrite:リクエストURLを照合して指定のアクションを実行

[URL Rewrite]はURLの照合と書き換えを行うもので、「どの接続先にドメインを割り当てるか」を決める振り分け表ではありません。次の例では、HTTPからHTTPSへのリダイレクトを使って、正規表現・転送先URL・アクションコードの3要素を説明します。

[URL Rewrite]
^http://example\.com/(.*)$ https://example.com/$1 302

^と$はそれぞれ照合の開始位置と終了位置を指定し、\.は文字としてのピリオドを表します。(.*)は後続の文字列をキャプチャし、転送先の$1は1つ目のキャプチャグループを参照します。302はリダイレクトのアクションです。ここで指定するアクションコードを、RuleのPROXYと混同しないでください。

HTTPSのパスは通常、外から確認できません

上の例が対象とするのはHTTPリクエストです。暗号化済みのHTTPS通信では、通常のプロキシ転送だけで完全なパスを読み取ることはできません。HTTPSリクエストの内容を書き換えるには、適用可能なMITM条件、対象範囲、証明書の信頼設定も関係します。ルールのテスト目的で対象をすべてのドメインに広げたり、出所の不明な証明書を追加したりしないでください。

トラブルシューティングでは、まず元のリクエストがHTTPか確認し、古いリダイレクトキャッシュも調べます。ブラウザーがHSTSによってHTTPSを直接使っている場合、HTTPルールが照合されないことがあります。処理対象が異なるため、Ruleの順番を変更しても解決しません。動作を確認できない書き換えルールは、いったん無効にして元のアクセス方法に戻してください。

6. 編集内容を反映する:保存・選択・接続の再確立

設定ファイルがConfigの一覧にあるだけでは、選択済みとは限りません。また、テキストを保存しても、既存の長時間接続が自動的に確立し直されるわけではありません。まず、現在動作している設定を複製してローカルにバックアップし、次の手順で一度に1項目ずつ検証してください。プラットフォームによってメニュー表示は異なる場合があるため、ここではHome、Config、Settingsの各画面の役割に沿って説明します。

  1. 対象を確認:Configで現在選択されているファイルを探し、名前を控えてから編集画面を開きます。選択されていない別のファイルを誤って編集しないようにしてください。
  2. 一度に1か所だけ変更:まずルールを1つ、またはキーと値の組み合わせを1つ変更します。セクション名と英語の句読点はそのままにしてください。FINALが重複していないか、ルールを誤ったセクションに記述していないかも確認します。
  3. 保存して選択:編集内容を保存し、Configに戻って、そのファイルが現在の設定として選択されていることを確認します。構文エラーが表示された場合は修正し、有効な設定としてテストに進まないでください。
  4. モードを確認:Home → Global Routingに戻り、Configを選択して、現在の接続項目が利用できることを確認します。
  5. 新しい接続を確立:短時間の切断が許容できる場合は再接続し、テストするアプリからリクエストを再送します。接続が再利用されないよう、必要に応じて古いページを閉じるか、テストアプリを再起動してください。
  6. 結果を確認:同じ宛先に再度アクセスし、適用されたルール、ポリシー、エラーの種類を確認します。「ページの表示が速くなった気がする」だけで設定の反映を判断しないでください。
元のファイルをバックアップ1項目を変更保存して選択接続を再確立ログを確認

リモート設定とローカル編集は分けて管理してください。リモートファイルを再ダウンロードすると、ローカルの変更が上書きされることがあります。また、Homeの接続サブスクリプションを更新しても、Configのルールが更新されるわけではありません。カスタムルールを継続して管理する場合は、独立したコピーを保存し、変更したフィールドと想定結果を記録してください。サブスクリプションの更新後は、設定ファイルが参照するポリシー名が引き続き存在することも確認します。

On Demandはルールを選択しません

Settings → On Demandでは、条件に応じた接続動作を管理します。.confを有効にするためのスイッチではありません。手動で切断しても自動的に再接続される場合は、On Demandの条件を確認してください。接続は正常なのに振り分けが想定と異なる場合は、Global RoutingとConfigに戻って確認します。

7. よくある質問:症状から確認する設定セクションを特定

ファイルを保存したのに、追加したルールが反映されないのはなぜ?

Configで現在選択されているファイル、Home → Global RoutingがConfigになっているか、新しいルールがFINALより前にあるかを順に確認します。次にテストアプリから新しい接続を確立し、実際に適用されたルールを確認してください。ルールを変更する前から確立済みのダウンロード接続で検証しないでください。

Hostを変更してもHTTPSでエラーになるのはなぜ?

マッピング先のIPアドレスが元のドメインのサービスを提供しているか、証明書が元のドメインをカバーしているかを確認します。Hostが変更するのは名前のマッピングだけで、リクエスト内のホスト名は変わりません。まず元のマッピングに戻して比較し、そのうえで宛先アドレスを使い続けるか判断してください。

サブスクリプションの更新後、カスタム設定をもう一度インポートする必要はありますか?

まず、更新されたのがHomeの接続一覧か、Configのリモートファイルかを確認します。前者ならローカル設定を機械的に再インポートする必要はありませんが、削除または名前変更されたポリシーへの参照を確認してください。後者はローカルの変更を上書きする可能性があるため、バックアップと比較してから選択します。

URL Rewriteが効かない場合、DNSを変更すればよいですか?

まず元のリクエストのプロトコル、照合条件全体、キャプチャグループ、アクションコードを確認し、リダイレクトキャッシュとHSTSも調べます。DNSを優先して確認するのは、ログで名前解決の失敗が確認された場合だけです。正規表現が一致していない問題をDNSの変更で覆い隠さないでください。

.confを適切に管理するには、各セクションの役割を区別することが重要です。Generalは全般設定、Ruleはポリシー、Hostは名前のマッピング、URL Rewriteは条件に合致するリクエストURLを処理します。一度に変更する箇所を1つに絞り、元に戻せるコピーを保管すれば、設定変更と接続結果を対応づけて確認できます。

Shadowrocketの全プラットフォーム向けダウンロードと設定ガイド

iPhone / iPad版はApp Storeで2.99ドルの買い切りです。システム要件はApp Storeの掲載情報をご確認ください。Mac(Appleシリコン / Intel)、Windows、Android、Linux版は無料です。アプリの購入と接続プランは別のものです。アプリを購入しても接続プランは含まれません。サブスクリプションは利用中のプロバイダーから入手してください。

Shadowrocketを全プラットフォーム向けにダウンロード