この記事の要点

自分で利用する権限のあるWireGuard設定を持ち、Shadowrocketで各項目を確認したい方向けです。まず自分の端末のPrivateKeyと接続先のPublicKeyを区別し、Endpoint、トンネルアドレス、AllowedIPsを入力します。最後にGlobal Routingによるルールの影響を確認します。この記事では設定項目と確認手順を解説しますが、接続情報は提供していません。例示するアドレスは形式の説明用で、実際の接続には使用できません。

1. WireGuard設定の両端を区別する

WireGuardの設定は通常、[Interface]と1つ以上の[Peer]で構成されます。前者は自分の端末のトンネルインターフェース、後者は通信を許可する接続先を表します。設定をShadowrocketに移す際は、各項目がどちらに属するかを確認して入力してください。設定内で最初に見つかったPublicKeyを、そのままサーバーの鍵として入力するのは誤りです。

WireGuardはUDPで通信します。Endpointのポート番号は接続先の設定によって異なります。51820はよく使われる例で、必須の固定ポートではありません。Webページにアクセスできることや、一般的なTCPポートのテストに応答があることだけでは、現在のネットワークでWireGuardのUDP通信が許可されているとは判断できません。

UDP
WireGuardのトランスポートプロトコル
32バイト
デコード後の公開鍵と秘密鍵の長さ
51820
この記事で使うEndpointポートの例。固定値ではありません

鍵は通常Base64形式のテキストで表されます。32バイトの値はエンコード後、末尾に=が付いた44文字になるのが一般的です。この長さは明らかなコピー漏れの発見には役立ちますが、鍵が正しい端末や接続先のものかどうかは確認できません。PrivateKeyやPresharedKey、それらを含むQRコードを公開の掲示板などに投稿しないでください。

2. PrivateKey・PublicKey・PresharedKeyの対応関係

項目入力する内容よくある入力ミス
PrivateKeyこのクライアントに対応する秘密鍵。[Interface]セクションの値を使います。サーバーの秘密鍵を入力している、または鍵を再生成した後にクライアントの公開鍵を接続先へ登録していない。
PublicKey対象の[Peer]の公開鍵、つまり接続先の公開鍵です。この欄には、端末のPrivateKeyから生成された公開鍵を入力している。
PresharedKey双方で別途取り決めた事前共有鍵。元の設定に記載されている場合のみ入力します。片方だけに値を設定している、またはPrivateKeyと取り違えている。
Addressこの端末に割り当てられたトンネル内アドレス。例:10.66.0.2/32。Endpointのグローバルアドレスを入力している、または別の端末と同じトンネルアドレスを使っている。

PrivateKeyが端末の識別情報となり、対応するクライアント公開鍵を接続先の設定に登録する必要があります。ShadowrocketでPrivateKeyだけを変更し、接続先に以前のクライアント公開鍵が残っていると、通常ハンドシェイクは成立しません。PublicKeyはパスワードでも自由に決められるラベルでもありません。実際の接続先の秘密鍵と対になる鍵を使ってください。

鍵をコピーするときは、大文字・小文字、プラス記号、スラッシュ、末尾のイコールをそのまま保持し、誤って含まれた引用符や改行を取り除きます。鍵が漏えいした場合は交換し、接続先の登録内容も更新してください。チャット履歴を削除するだけでは、古い鍵は無効になりません。

3. Endpoint・AllowedIPs・DNS・MTUの役割

Endpointは暗号化通信を開始するときに接続する外部アドレスで、トンネル内部のアドレスではありません。IPv4の例は192.0.2.10:51820です。IPv6アドレスとポートを1つの入力欄に指定する場合は、[2001:db8::10]:51820のように記述します。画面にアドレスとポートの入力欄が別々にある場合は、アドレス欄にホスト名またはIPアドレス、ポート欄に数字だけを入力してください。

設定項目意味確認方法
AllowedIPsWireGuard Peerが対象とするアドレス範囲と、受信元の制約です。クライアントからの通信先が該当Peerのアドレス範囲に含まれることを確認します。接続先でクライアントのトンネル送信元アドレスが許可されているかも確認してください。
DNS一般的な設定ファイルに記載されるDNSリゾルバーの設定です。WireGuardのハンドシェイク自体には含まれません。DNSリゾルバーのアドレスに現在の通信経路から到達できるか確認し、ShadowrocketのConfigにあるDNS設定も確認してください。
MTUトンネルインターフェースで扱えるIPパケットの最大サイズです。まず設定提供元の値をそのまま使います。大きなリクエストだけが止まり、小さいリクエストは通る場合に限り、MTUを個別に調整してみてください。
PersistentKeepalive通信がない間に定期送信するキープアライブパケットの間隔。単位は秒です。NATマッピングを維持する必要がある場合は、設定管理者の指定に従って設定します。例:25。誤った鍵を修復する機能ではありません。

AllowedIPsはShadowrocketのルールベースの振り分け設定全体を表すものではありません

0.0.0.0/0はすべてのIPv4アドレス、::/0はすべてのIPv6アドレスを対象とします。前者だけではIPv6まで対象になりません。10.66.0.0/24だけを指定した場合は、このネットワーク範囲のみが対象です。範囲は利用目的と接続先の対応状況に合わせてください。「すべてを網羅する」ためだけに、安易に範囲を広げないでください。

Shadowrocketでは、まずGlobal Routingと現在のConfigによって接続経路が決まります。その接続がWireGuardの出力先に割り当てられた場合は、Peerのアドレス範囲にも合致する必要があります。そのため、AllowedIPsに特定のIPアドレスが含まれていても、その宛先への通信で必ずWireGuardが自動選択されるわけではありません。ルールでWireGuardが選ばれても、AllowedIPsにない範囲が自動で追加されるわけではありません。

# アドレス形式の説明用です。設定全体としてそのままインポートすることはできません。
# 以下は説明用のアドレスで、実在のサービスには対応していません。
[Interface]
Address = 10.66.0.2/32
MTU = 1420

[Peer]
Endpoint = 192.0.2.10:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

1420はよく使われるMTUの参考値ですが、すべてのネットワークで最適とは限りません。ハンドシェイクは正常でも大きな応答が止まる場合は、元の値を記録してから、たとえば1380のような小さい値を試し、同じリクエストで再確認してください。そのうえで変更を維持するか判断します。MTU、DNS、鍵を同時に変更すると、どの変更が影響したのか分からなくなります。インポート方法によっては、元ファイルのDNSやMTUなどの設定がすべて自動反映されるとは限りません。

4. ShadowrocketにWireGuardを追加する手順

ここではHome、Config、Settingsの構成に沿って手動追加の手順を説明します。画面上の項目の並びや保存ボタンの位置はプラットフォームによって異なる場合があります。英語の項目名と意味を照らし合わせて入力してください。複数のPeerを含む設定の場合、接続項目を1つ手動追加するだけでPeerの選択関係まで完全に再現できるとは限りません。まず今回使うPeerを確認してください。

  1. 元の設定を整理する

    [Interface]と対象の[Peer]を区別し、クライアントのPrivateKey、Address、接続先のPublicKey、Endpoint、AllowedIPsを用意します。元の設定にPresharedKeyがある場合は、それも用意してください。

  2. タイプを選択する

    Homeを開き、右上の「+」→ Type → WireGuardの順に選択します。見分けやすい名前を設定し、既存の接続項目と同じ名前にして誤選択しないようにしてください。

  3. 各項目を入力する

    自分の端末とPeerのどちらに属する値かを確認して、鍵とアドレスを入力します。Endpointのアドレスとポートが別欄の場合は、それぞれ入力してください。AllowedIPsのCIDRプレフィックス長はそのまま保持します。提供されていないPresharedKeyを自分で生成して代用しないでください。

  4. 保存して選択する

    保存後、Homeに戻って追加したWireGuard項目を選択します。現在のGlobal Routingの値を確認してから接続を開始してください。初回にシステム権限の確認が表示された場合は、端末の画面に従って操作します。

  5. 動作を確認して設定を戻す

    自分にアクセス権があり、AllowedIPsの範囲内にある宛先でテストします。確認が終わったら、普段使っているGlobal Routingの設定に戻してください。Configで、実際のルールが参照するポリシーが想定した出力先を指しているかも確認します。

5. Global Routingで設定ミスとルールの影響を切り分ける

診断を始める前に、Home → Global Routingの現在値を記録します。Config、Proxy、Direct、Sceneはルーティング方式であり、WireGuardの鍵設定ではありません。Sceneは設定済みのシーンに従って動作します。シーンの内容を確認する前に、固定のテスト経路として扱わないでください。

Config

おすすめ

現在のConfigのルールに従ってポリシーを選択します。DOMAIN-SUFFIX、GEOIP、IP-CIDR、FINALなどのルールによって、宛先ごとに異なる出力先が選ばれる場合があります。該当するポリシーに一致した通信だけが、そのWireGuard項目を使用します。

適した用途:ルールの確認が済んだ後の日常的な通信振り分け。

Proxy

Shadowrocketが処理する対象の通信に、選択したプロキシ経路を使います。Configのルールによる振り分けを一時的に切り離して確認するのに便利です。ただし、選択した項目が目的のWireGuardであることと、宛先アドレスがそのAllowedIPsの範囲内にあることを確認してください。

適した用途:WireGuard経由で指定したテスト先に短時間アクセスできるか確認する。

Direct

通常の直接接続経路を使います。この状態でWebページが開いても、直接接続でアクセスできたことしか分かりません。WireGuardの設定が正しい証拠にも、Peerの出口の状態を判断する根拠にもなりません。

適した用途:端末本来のネットワークで基本的な通信ができるか確認する。

Proxyで指定した宛先にアクセスでき、Configに戻すと失敗する場合は、まず宛先に適用されるルールとポリシーを確認してください。すぐにPrivateKeyを変更しないでください。Proxyでも失敗する場合は、Endpoint、UDPへの到達性、双方の鍵、AllowedIPsを確認します。Settings → On Demandは条件に応じて接続を開始する設定で、Peerの鍵は変更しません。自動再接続の影響を調べる場合は、現在の状態を記録してから一時的に無効にし、手動で接続を操作してください。

6. ハンドシェイク失敗・ドメインに接続できない・アイドル時の切断を確認する

接続をオンにしてもアクセスできないのはなぜ?

接続をオンにしただけでは、Peerとの通信が正常に完了したとは限りません。まずHomeで目的のWireGuard項目が選択されていることを確認します。次にEndpointのアドレスとUDPポート、クライアントのPrivateKeyに対応する公開鍵が接続先に登録されているか、PublicKeyが本当に接続先のものかを確認してください。ログや接続先のハンドシェイク記録を確認できる場合は、テスト後に新しいハンドシェイクが記録されるか見ます。接続スイッチの状態だけで判断しないでください。

ハンドシェイクの記録はあるのに、Webページを読み込めない?

双方のAllowedIPsを確認します。クライアント側で宛先アドレスが範囲に含まれているか、接続先側で端末のトンネル送信元アドレスが許可されているかを確認してください。宛先が接続先の配下にあるネットワークの場合は、ネットワーク管理者に転送設定、ファイアウォール、戻り経路、必要なNATを確認してもらいます。ハンドシェイクが証明するのは、鍵と基本的なUDP通信が機能していることです。接続先が目的のネットワークへの転送機能を提供していることまでは保証しません。

IPアドレスには接続できるのに、ドメイン名の名前解決に失敗する?

Configで現在のDNS設定とリゾルバーへの到達性を確認し、Endpointのホスト名の名前解決と、接続先サービスのドメイン名の名前解決を切り分けます。IPアドレスを直接入力して試す場合は、もともとIPアドレスでのアクセスに対応する宛先を選んでください。HTTPSサイトでは証明書や仮想ホストの要件により、IPアドレスへの直接アクセスが拒否されることがあります。この場合のエラーをDNSの問題と決めつけないでください。

しばらくすると通信できなくなり、再接続すると復旧する?

まずWi-Fiとモバイルネットワークの切り替わりや、システムのスリープによって接続状態が変化していないか確認します。NATマッピングの期限切れが疑われる場合は、元の設定に従ってPersistentKeepaliveを確認してください。例:25秒。Settings → On Demandに該当する接続条件が設定されているかも確認します。キープアライブは定期的な通信を増やす機能であり、ネットワーク切り替え後の動作確認に代わるものではありません。

トラブルの相談時には、発生時刻、ネットワークの種類、宛先の種類、Global Routingの値、ハンドシェイクの有無を伝えると状況を確認しやすくなります。ただし、PrivateKey、PresharedKey、購読URL全体は伏せてください。一度に1項目だけ変更して記録すると、複数の設定を続けて入れ替えるより原因を特定しやすくなります。