ルータでパケットをルータ自体に転送するのか、それとも直接転送するのかを決定するにはどうすればよいですか?

ルータでパケットをルータ自体に転送するのか、それとも直接転送するのかを決定するにはどうすればよいですか?

いくつかのプロジェクトをよりよく設定または学習するために、Linuxベースのルーター(私の場合はOpenWRT)でパケットルーティングがどのように機能するかを理解したいと思います。以下のチャートを参考にして2つの質問に分けてみました。

  1. iptablesの外部(プロセス、他の種類のルーティングテーブル、または編集可能なものなど)が、下のノードで「ルーティングの決定」を下げたり案内することを具体的に担当することが何であるか疑問に思います。以下の図では、iptablesではなく「Routing Decision」とマークされた実際のノードについて話していることに注意してください。 IEパケットがNAT PREROUTINGを経た後、次にローカルプロセスの入力フィルタチェーンまたは転送チェーンに移動するようにパケットの天気を知らせる何かが必要です。そうですか?この質問の両方で、サブノードにはより多くの可能性とプロセスが含まれていると思うので、最上位の「ルーティング決定」ノードに固執できると言いたいと思います。
  2. さらに、または代替として、決定はどのように行われますか?簡単ではないですか?着信パケットの宛先が着信インターフェイスIP(たとえば、LAN接続の192.168.1.1)の場合は、このシステム自体に入り、入力テーブルを介して送信する必要があります。それ以外の場合は、外部ネットワーク(この場合はインターネットのみ)にアクセスするために別のインターフェイスに転送する必要があるため、転送を許可する別のインターフェイスに転送してください。あるいは、インターネット接続のインターフェイスに直接転送する代わりに、DNSサーバーなどの一部のプロセスで処理されるようにパケットをルーターに送信する他の可能な方法はありますか?

ここに画像の説明を入力してください。

答え1

着信パケットをローカルシステムにルーティングする必要があるかどうかは、宛先IPアドレスがローカルシステムのインターフェイスにあるIPアドレスの1つであるかどうかによって異なります。パケットがどのインターフェイスに入るかは問題ではありません。eth0IPアドレスを持つインターフェイスとそのインターフェイスに追加のIPアドレスがある可能性があります192.168.1.1。宛先アドレスに到着するパケットはローカルで処理されます。192.168.1.2lo192.168.1.2eth0

ルーティング決定は、IPルーティングルールテーブルと組み合わせたIPルーティングテーブルに基づいて行われます。このテーブルは、インターフェイスで IP アドレスを設定すると自動的に入力されます。

ip rule showルーティングルールは、次のコマンド(省略可能)を使用して表示できます。

$ ip ru sh
    0:  from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default 

次のコマンドip route show table xxx(省略可能)を使用して、各ルーティングテーブルを確認できます。このlocal表は、ローカルシステムに送信する必要があるパケットを示しています。

$ ip ro sh table local
broadcast 127.0.0.0 dev lo  proto kernel  scope link  src 127.0.0.1 
local 127.0.0.0/8 dev lo  proto kernel  scope host  src 127.0.0.1 
local 127.0.0.1 dev lo  proto kernel  scope host  src 127.0.0.1 
broadcast 127.255.255.255 dev lo  proto kernel  scope link  src 127.0.0.1 
broadcast 192.168.1.0 dev eth0  proto kernel  scope link  src 192.168.1.1 
local 192.168.1.1 dev eth0  proto kernel  scope host  src 192.168.1.1 
broadcast 192.168.1.255 dev eth0  proto kernel  scope link  src 192.168.1.1 

テーブルはmain使用時に一般的に表示されるものなのでroute( のように廃止)、ifconfig名前を指定する必要はありません。

$ ip ro sh
default via 192.168.1.254 dev eth0 
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.1 

このdefaultテーブルは通常空ですが、たとえばゲートウェイが複数ある場合は、デフォルトのパスを格納するために使用できます。

もっと情報が欲しいなら読んでくださいポリシールーティングブック

関連情報