|||||||||||||||||||||

なんぶ電子

- 更新: 

Debianのルーティングポリシーについて

Debian

前回strongSwan(vici)でIPsecを構築しました。それを利用していると220というIDをもった通常とは違ったルーティングテーブルが作成されるようです。

基本的なルーティングについては過去に勉強しましたが、それだけでは不足なようです。そこで、今回はルーティングポリシーについて勉強して220というルーティングテーブルの謎を解明します。

複数のルーティングテーブル

Debianではルーティングテーブルが複数持てるようになっています。その確認方法は管理者権限で次のようにします。

# ip rule list
0: from all lookup local
220: from all lookup 220
32766: from all lookup main
32767: from all lookup default

この表のことを「ルーティングポリシー」と呼ぶようです。順に優先順位、セレクタ、アクションとなっています。これらの説明は後からしますので、まずはlookupのあとにある文字を拾ってみます。

local、220、mail、default。これらがテーブルIDになります。通常存在するのはlocal、main、defaultです。特に指示せずにルールを書き込んだ場合はmainテーブルに書き込まれます。今まで「ip route add」コマンドを入力していた時、実はmainテーブルを指定して設定を書き込んでいたという事になります。

localテーブルはカーネルが管理するテーブルでlocalアドレスとbroadcastアドレスで構成されます。また、defaultテーブルは通常空の予備テーブルです。

ルーティングをする際、ルーティングポリシーを参照し、優先順位の若いものから判定していき、ルート情報を得られた段階で処理終了します。

それぞれのテーブルを指定して、ルーティングテーブルを表示するには「ip route show table テーブル名」とします。テーブル名をmainとした時は「ip route」コマンドと同じ結果が得られると思います。

このコマンドで表示されるリストの見方ですが、まず対象となるネットワークが入ります。defaultはデフォルトルートを示します。それ以降は接頭に応じた情報が次の項目に入ります。

各接頭が意味するものは次の通りです。

  • via

    NEXT HOP値

  • dev

    送信されるイーサネットアダプタ名

  • proto

    staticだと静的ルーティング、kernelだとカーネルによるルーティングです。

  • scope

    linkの場合は直接接続、hostの場合は自身への接続

  • src

    送信元となるIPアドレス

これらの情報は、Qiita:「ip routeコマンドの出力結果の意味」を参考にさせていただきました。ありがとうございました。

セレクタには通常「from all」が入っています。これはすべての通信を対象にするものです。allの代わりに「IPアドレス/マスク長」として送信元による条件を加えたり、fromをtoにして宛先アドレス毎に変更したり、先頭に「not」を付けて反転させたりできます。詳しくは「man ip route」で表示されます。

アクションには通常「lookup テーブルID」が入っています。これは指定されたルーティングテーブルを参照します。通常はテーブルを参照するにとどまると思いますが、テーブルのほかプロトコルを指定したりもできるようです。

ルーティングポリシーへの追加

ルーティングポリシーを追加削除するには次のようにします。ここでは優先順位=50、テーブルID=110のテーブルを追加し、使われていないdefaultテーブルを削除してみたいと思います。ポリシーから削除しても各テーブルに設定済みのルールは消えません。

# ip rule add table 100 pri 50
# ip rule del teble default

テーブルIDを指定してルート情報を追加するにはtableの後にIDを入力します。

# ip route add table 100 192.168.1.0/24 via 192.168.1.253

ルーティングの確認

任意のIPアドレスに対してどのテーブルのルールが適用されているかを調べるには次のようにします。

# ip route get 192.168.1.1
192.168.1.1 via 123.456.789.9 dev ens3 table 220 src 123.456.789.1 uid 0

この例では、172.168.1.1への経路はテーブルID=220に記述されているものが利用されます。また送信の際は、ens3インターフェースの先にある123.456.789.9のゲートウェイが利用され、送信元は123.456.789.1となります。

ルーティング情報の永続化

基本的にOSに設定した、ルーティングポリシーや、ルート情報は再起動で消えてしまいます。そこでスクリプトを使って、設定を復元させます。

Debianにおいいては「/etc/network/if-up.d」のインターフェース稼働時のにshスクリプトを保存するか、/etc/network/interfacesの対象インターフェースのエントリーにpost-up の行を追加し後に実行したいコマンドを記述するかになります。

筆者が前回設定したstrongSwanにはupdown用にスクリプトがあります。接続時と切断時で処理を分ける場合は呼び出したスクリプト内で「$PLUTO_VERB」という変数を使います。この値には接続時は「up-host」切断時は「down-host」という文字列が入っています。

筆者紹介


自分の写真
がーふぁ、とか、ふぃんてっく、とか世の中すっかりハイテクになってしまいました。プログラムのコーディングに触れることもある筆者ですが、自分の作業は硯と筆で文字をかいているみたいな古臭いものだと思っています。 今やこんな風にブログを書くことすらAIにとって代わられそうなほど技術は進んでいます。 生活やビジネスでPCを活用しようとするとき、そんな第一線の技術と比べてしまうとやる気が失せてしまいがちですが、おいしいお惣菜をネットで注文できる時代でも、手作りの味はすたれていません。 提示されたもの(アプリ)に自分を合わせるのでなく、自分の活動にあったアプリを作る。それがPC活用の基本なんじゃなかと思います。 そんな意見に同調していただける方向けにLinuxのDebianOSをはじめとした基本無料のアプリの使い方を紹介できたらなと考えています。

広告