💨

WireGuardのAllowedIPsについて

2022/12/30に公開

はじめに

前回、WireGuardの構築について記事を書きました。
その際、 allowed-ips の補足を書こうと思ったのですが、補足だけではまとめきれないなと思って、別の記事にまとめることにしました。
https://zenn.dev/motisan/articles/20221230_wireguard

振り返り

WireGuard の設定を行う際、以下のようなコマンドを実行します。

$ wg set wg0 peer XX allowed-ips A.A.A.A/AA endpoint 対向のIPアドレス:ポート番号

設定ファイルとしては、以下のように記載されています。

/etc/wireguard/wg0.conf
[Interface]
# 省略

[Peer]
# 省略
AllowedIPs = 172.16.12.2/32,192.168.10.0/24
# 省略

上記でででくるallowed-ips(以後、統一のために「AllowedIPs」と記載します)は何を意味しているのか?ということが今回のポイントです。

本題

AllowedIPsの意味は、データを受信する時データを送信する時で若干意味が異なってくるので、分けて考えます。


1. データを「受信」する時

データを受信する場合、受信した側は、
パケット内の送信元のIPアドレスがAllowedIPsに記載されているかどうか
を確認します。
記載されたIPアドレスからであればパケットを許可しますが、記載されていないIPアドレスからだった場合は、パケットを破棄します。

AllowedIPs = 172.16.12.2/32,192.168.10.0/24

上記のような記載の場合、172.16.12.2/32192.168.10.0/24からの通信を許可します。
Peer先に複数のNW(VLAN)が存在して、WireGuard経由でアクセスしてくる場合は、その全てのNWアドレスを記載してあげる必要があります。


2. データを「送信」する時

データを送信する場合、AllowedIPsに記載された送信先のパケットは、
WireGuardのNICにルーティング
されます。
例えば以下のような設定だった場合、クライアントが192.168.10.5に対して接続を試みると、WireGuardのNICであるwg0にルーティングされます。

AllowedIPs = 172.16.12.2/32,192.168.10.0/24

上記の理由については、実際のルーティングテーブルを確認すると分かります。

wg0 起動前のルーティングテーブル
$ ip route
default via 192.168.1.1 dev eth0 
169.254.169.254 dev eth0 
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.244
wg0 起動後のルーティングテーブル
$ ip route
default via 192.168.1.1 dev eth0 
169.254.169.254 dev eth0 
172.16.12.2 dev wg0 scope link  # wg0へのルーティングが追加されている
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.244 
192.168.10.0/24 dev wg0 scope link  # wg0へのルーティングが追加されている

wg0のNICを起動させると、自動的にルーティングの設定が追加されていることがわかります。

おわりに

より詳しくWireGuardについて知りたい場合は、ホワイトペーパーも出ているのでそれを確認することをお勧めします。
※自分には難しくて全てを理解はできませんでした。

https://www.wireguard.com/papers/wireguard.pdf

Discussion