これはなに?
Ubuntu24.04のネットワークのルーティングの設定において新しいテーブルの追加方法を紹介する.
日本語の資料ではルーティングテーブルにルートを追加する方法を紹介してるものがあってもテーブルの追加は全く見つけられない.
新しいテーブルの追加が何に使えるかというと, 自分は2つのVPN(NordVPN, WireGuard)を共存させるために必要だった.
ルーティングテーブルの編集や追加と聞けば
ip route add 192.0.2.1 via 10.0.0.1 eth0
というコマンドしか思いつかない人は少なくないだろう. 実際, 私も数週間前までそうだった.
しかし, 多くの人は意識していないが, 上記のコマンドはmainというルーティングテーブルにルートを追加しろというコマンドなのだ. これは 他にもテーブルが存在している ことを暗示している.
NordVPNは自動的にテーブルを作成する. そのためNordVPNを利用してるPCでテーブルも含めてルーティングを確認すると
# ip route show table all
default dev nordlynx table 111 scope link
999.99.0.0/99 dev nordlynx table 111 scope link
default via 888.888.888.1 dev ens1 proto static
999.99.0.0/99 dev nordlynx proto kernel scope link src 999.99.0.66
(以下略)
のような出力を得られる. この出力にテーブルの番号が含まれているのがわかる. オプションの show table all を書かずに ip route で表示されるのはmainテーブルだけのため, 知らないと怪我をすることもある.
またルートの追加だけでなくテーブルの追加ができるようになると, fwmarkを用いてより高度なルーティングを行えるようになる.
ルーティングテーブルの追加方法
参考元はRed hat Enterprise Linuxのネットワークガイドのポリシールティングについて.
Ubuntu24.04ではルーティングの設定をiproute2で行っている. iproute2のルーティングテーブルの設定は /etc/iproute2/rt_tables に書かれている.
# cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
この内容から「番号が255, 名前がlocal」のテーブルが用意されることがわかる. 新しくテーブルを追加したいときはこのファイルを編集すればよい. ちなみにこの番号はルーティングのルールで使用する.
今, 100番でhogeというテーブルを作るなら
$ cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
100 hoge
0 unspec
#
# local
#
#1 inr.ruhep
となるように編集する. 追記して保存するだけでテーブルを利用できるようになる. 実際, この状態で
# ip route add 0.0.0.0/0 dev ens1 table 100
を実行するとルートが正常に追加できる. 確認してみると
# ip route show table 100
default dev ens1 scope link
のようにちゃんとユーザが独自に追加したルーティングテーブルにルートが追加されているのがわかる. 素晴らしい.
以上.