wireguard で ip route がおかしくなる。
wiregaurd でwg0 を設定すると、 デフォルトルートが完全にwg0 に持っていかれる。
ip route
でルーティングテーブルを確認し、 eth0 へデフォルト・ルートが向いているのにも関わらず、 ip route 1.1.1.1
してもwg0 へ向いてしまう。
とくに、クライアント側が AllowIPs で 0.0.0.0/0
を設定しているときに起きてしまう。
default を設定しているのに。
takuya@ubuntu01:~$ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default Aw_Wrt.lan 0.0.0.0 UG 0 0 0 br0 172.16.3.0 0.0.0.0 255.255.255.0 U 0 0 0 wg0 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br0 192.168.2.223 0.0.0.0 255.255.255.255 UH 0 0 0 wg0 takuya@ubuntu01:~$ ip route default via 192.168.1.1 dev br0 172.16.3.0/24 dev wg0 scope link 192.168.1.0/24 dev br0 proto kernel scope link src 192.168.1.240 192.168.2.223 dev wg0 scope link
経路は wg0 経由になっている。
takuya@ubuntu01:~$ ip route get 1.1.1.1 1.1.1.1 dev wg0 table 51820 src 172.16.3.2 uid 1000 cache
tableを使っている。
wireguard の起動をよく見ていると route add 時に fwmark
とtable
を使っている。
takuya@ubuntu01:~$ sudo wg-quick up wg0 [#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63 [#] ip -4 address add 172.16.3.2 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] ip -4 route add 192.168.2.223/32 dev wg0 [#] ip -4 route add 172.16.3.0/24 dev wg0 [#] wg set wg0 fwmark 51820 [#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820 [#] ip -4 rule add not fwmark 51820 table 51820 [#] ip -4 rule add table main suppress_prefixlength 0 [#] sysctl -q net.ipv4.conf.all.src_valid_mark=1 [#] iptables-restore -n
table とは?
LinuxのPBR( policy base routeing ) 関連ですね。私達が ip route
で見ているのは、 main
テーブルです。
- https://milestone-of-se.nesuke.com/nw-basic/routing/policy-based-routing/
- https://qiita.com/takc923/items/6b648a0e6c265658e581
- http://green-pen.jp/rule_table.html
入口が複数で、疎通可能な出口が複数あって、戻りパケットや転送を、いcずれから出すんだよ。みたいなときに使う設定だったと思う。
Table 設定=Off?
wg-quick でデフォルトは、Table=autoです。 rule テーブルは自動的に作成され、AllowIpSに記載された経路がmainより、高い優先度で作成されます。
Table — Controls the routing table to which routes are added. There are two special values: `off' disables the creation of routes altogether, and `auto' (the default) adds routes to the default table and enables special handling of default routes.
Table=auto のとき、
takuya@ubuntu01:~$ sudo wg-quick down wg0 takuya@ubuntu01:~$ sudo ip rule list 0: from all lookup local 32766: from all lookup main 32767: from all lookup default
起動後にrule table が追加さたのがわかる。
takuya@ubuntu01:~$ sudo wg-quick up wg0 takuya@ubuntu01:~$ sudo ip rule list 0: from all lookup local 32764: from all lookup main suppress_prefixlength 0 32765: not from all fwmark 0xca6c lookup 51820 32766: from all lookup main 32767: from all lookup default
wg-quick により、netfilterによるタグ付け(Fwmark) が有効になっている。
ここで main より先に、fwmark 0xca6c lookup 51820
にマッチするので wg0 が作成した 51820
テーブルへパケットが流される。
なので、ip route
で表示されないがパケットは wg0 へ流れるわけです。
一般ユーザーが、wg-quick 0.0.0.0/0許可設定するとき、default ルートを触らずにしておくなら Table=off
でも構わないと思われる。
また、経路設定時に余計なことが起きないように tableへのデフォルトルートをいったん削除するということもあり。
sudo ip route del table 51820 default
テーブルIDは、ENDPointのポート番号になっているらしい。
https://unix.stackexchange.com/questions/607313/wireguard-routing