Wireguard はトンネル IP アドレスを設定しなくても動作します。つまり、AllowedIP、エンドポイント アドレス、秘密鍵と公開鍵を設定するだけで十分です。
のドキュメントではオプセンス次のような警告があります。
注記:トンネル アドレスは CIDR 表記で、ネットワークの一意の IP とサブネットである必要があります。[..]/32 (IPv4) または /128 (IPv6) のトンネルアドレスを使用しないでください。
pfSense には次のような説明がありそうです:
注記:ルートはシステム ルーティング テーブルに自動的に作成されません。トンネル ネットワーク自体以外のネットワークのルートは、静的ルートまたは動的ルートを使用して個別に設定する必要があります。
インターネットで検索しても、多くの説明は見つかりません。
- Reddit: サブネットマスクに関する混乱
- Reddit: VPN サーバーとして使用する場合の /24 と /32 に関するヘルプ
- Reddit: /8、/16 などの違い...何に使われるのですか?
サブネットには機能がないようですが、いくつかテストを行いました。
- これはローカル トラフィック ルーティングとは関係ありません。つまり、2 番目に接続されたピアへのルーティングは、両方のピアを含むサブネットの有無に関係なく機能します。
- これは、「インターフェース上に留まる」こととカーネルを通過することとは関係ありません。どちらの場合も、ファイアウォール ルールを使用してトラフィックを制御できます。
では、トンネル IP のサブネット マスクの目的は何でしょうか?
答え1
サブネットマスク何もしないWireGuard 固有。
WireGuard 自体は、インターフェース アドレスのサブネット マスクを使用したり、気にしたりしません (アドレス自体を使用したり、気にしたりすることもありません)。ただし、WireGuard ホスト上のネットワーク スタックやその他のネットワーク ツールは、各ネットワーク インターフェースに登録されている IP アドレスとサブネットを考慮し、それらを使用して、特定のインターフェースが特定のネットワークに直接接続されているかどうかを判断します。
観察される動作は、使用している OS や特定のネットワーク ツール (OPNSense/pfSense やそのさまざまなプラグインなど) によって異なる場合がありますが、ルーティング テーブル、ファイアウォール ルール、ARP メッセージ、ネイバー テーブルなどの多くは、各ネットワーク インターフェイスに設定した IP アドレスとサブネットに基づいて自動的に生成される可能性があります。ただし、多くの場合、カスタム ルーティング/ファイアウォール ルール、カーネル設定、ネットワーク デーモン構成などを使用して、これらのデフォルトを上書きできます。
例えば、WireGuardインターフェースを標準で起動すると、wgクイックLinux上のスクリプトでは、そのスクリプトはiproute2ツールを使用して、インターフェースに設定した各アドレスとサブネットを追加します。追加したアドレスごとに、iproute2 は、アドレスのサブネットに一致する対応するルートをメイン ルーティング テーブルに自動的に追加します。そのスクリプトを使用して、 というwg0
名前のインターフェースを起動する10.0.0.123/24
と、iproute2 はメイン ルーティング テーブルに次のルートを追加します。
10.0.0.0/24 dev wg0 proto kernel scope link src 10.0.0.123
これは WireGuard の問題ではなく、Linux の標準ネットワーク ツールの一部のデフォルトの動作です。このルートを削除して他のルートを追加したり、別のツール セットを使用して WireGuard インターフェイスを設定したりすることは自由です。(ただし、このルートや、AllowedIPs
インターフェイス自体の構成に対応するエントリがない WireGuard インターフェイスに追加された他のルートは、事実上ブラックホールになることに注意してください。)
結論としては、ほとんどの場合、WireGuard インターフェースで /32 または /128 サブネット マスクのアドレスを使用してもまったく問題ありません。独自のルーティングおよびファイアウォール ルールを設定して、そのインターフェースに任意のトラフィックを送信できます。ただし、より高度なケース (特に、プロキシ ARP、NDP プロキシ、OSPF など (ローカル サブネット内での使用を目的とした) などのツールをインターフェースで実行する場合) では、WireGuard インターフェースとその仮想ネイバーを一貫した論理サブネットに割り当てることで、これらのツールのデフォルトの動作と競合する必要がなくなります。