壊れた WireGuard 設定の多くは値そのものを間違えているのではなく、正しい値を逆側に置いています。秘密鍵はこの機械のもので、peer は相手の機械の公開鍵を持ち、アドレスはトンネルがどこに住むかを表すのに interface ブロックに収まります。ファイルを二つの向きが出会うものとして読み、そのうえで補助スクリプトが何を上乗せしたかを確かめてください。プロトコル自体のフィールドはファイルより少なく、余分なものは別に知っておく価値があります。

interface の鍵はこの機械を表す

interface ブロックはこの端点自身の身元を保持します。PrivateKey はその身元であり、ホストから出ることはなく、対応する公開鍵はそこから導かれ、他の peer が並べるのはそれです。ListenPort はこの側がハンドシェイクを受け取る場所なので、一つのアドレスの後ろにいる二つのクライアントは別のポートが必要です。

Address はこのホストが応答するトンネルのアドレスで、同時に使う送信元でもあるため接頭辞長付きで書かれます。ここで接頭辞を誤ると、ホストがどの宛先を直結とみなすかが変わり、設定ではなく経路の問題に見える故障が生まれます。

本物のクライアントを使う [Interface] ブロックで残りはたいてい wg-quick が加えます:DNS、MTU、Table、そしてフック行です。これらはプロトコルのフィールドではなく、素の wg の設定はそれらを完全に無視します。

各 peer 項目はもう一方の側を表す

[Peer] ブロックは遠い側です。 PublicKey はその側の導出鍵であり、決してその秘密鍵ではなく、PresharedKey は両側が同一に保持しなければならない任意の追加の秘密です。Endpoint はどこへ送るかであり、PersistentKeepalive は他に出ていくものがないとき、間隔の後にこのホストへパケットを送るよう求めます。

ここでの混乱の大半は二つの誤りで説明できます。自分の秘密鍵を peer ブロックに写すと二つの端点が一つの身元を共有し、ハンドシェイクは記録の残りにくい形で失敗します。Endpoint をクライアントで省くのは、サーバーが入ってくるハンドシェイクからアドレスを学ぶためふつう意図的ですが、開始しなければならないサーバーで省くのは意図的ではありません。keepalive は NAT の対応付けを開いたままにするだけで、スループットを上げも遅延を下げもしないので、通信がすでに流れているときに三十秒の余分なパケットは何も買いません。

AllowedIPs は経路であり、許可の一覧ではない

AllowedIPs は WireGuard の暗号鍵経路です。外向きには、宛先に基づいてどの peer がパケットを受け取るかを決めます。内向きには、その peer から届くパケットを送信元に基づいて受け入れるかを決めます。同じフィールドが両方を担うので、これはアクセス制御リストでも許可されたウェブサイトの一覧でもありません。

狭い AllowedIPs をサーバー側でクライアントに与えると、サーバーはその送信元を主張するパケットだけを受け入れ、その宛先だけをそのクライアントへ送ります。片側だけを広げると、上がるのに何も通さないトンネルになります。

wg-quick がプロトコルの周りに加えるもの

wg-quick は同じファイルを読み、プロトコルが OS に任せているネットワーク手順を行います。interface のアドレスを割り当て、AllowedIPs から導いた経路を加え、リゾルバの設定を書き、フックコマンドを順に実行します。

その層が古典的な非対称を説明します。0.0.0.0/0 と DNS 行を含むファイルはクライアントに既定経路とリゾルバを与えますが、サーバーの転送や NAT の規則には一切触れません。それらはサーバー自身の設定に属し、クライアントのファイルでは供給できません。

ファイルの所有者は一人に保ちます。SaveConfig が有効な間に手で編集すると、次に interface が落ちたときに編集は消え、しかも interface はそうなったことを教えてくれません。

ファイルではなく適用済みの状態を確かめる

ファイルは意図です。適用済みの状態はカーネルが保持しているもので、有効化のあとに補助ツールや drop-in、フックが何かを編集すると両者は食い違います。

生きた状態とアドレス設定を一緒に読み、そのうえで両方を自分が書いた内容と比べてください:

sudo wg show
ip -4 addr show dev wg0
ip -4 route show dev wg0
grep -v "^#" /etc/wireguard/wg0.conf

peer の一覧が空なら、interface は設定が適用されないまま作られています。アドレスと経路があるのにカウンタがゼロのままなら、ファイルは読み込まれてハンドシェイクが失敗しており、セクション順ではなく鍵か端点の問題です。その差がたいてい本当の不具合なので、編集の前に二つの見え方を比べてください。

関連記事