ICMP Redirect Hostが発生するのはなぜですか?


25

Debianボックスを4つのサブネットのルーターとして設定しています。そのために、LANが接続されているNICに4つの仮想インターフェイスを定義しました(eth1)。

eth1      Link encap:Ethernet  HWaddr 94:0c:6d:82:0d:98  
          inet addr:10.1.1.1  Bcast:10.1.1.255  Mask:255.255.255.0
          inet6 addr: fe80::960c:6dff:fe82:d98/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:6026521 errors:0 dropped:0 overruns:0 frame:0
          TX packets:35331299 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:673201397 (642.0 MiB)  TX bytes:177276932 (169.0 MiB)
          Interrupt:19 Base address:0x6000 

eth1:0    Link encap:Ethernet  HWaddr 94:0c:6d:82:0d:98  
          inet addr:10.1.2.1  Bcast:10.1.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:19 Base address:0x6000 

eth1:1    Link encap:Ethernet  HWaddr 94:0c:6d:82:0d:98  
          inet addr:10.1.3.1  Bcast:10.1.3.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:19 Base address:0x6000 

eth1:2    Link encap:Ethernet  HWaddr 94:0c:6d:82:0d:98  
          inet addr:10.1.4.1  Bcast:10.1.4.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:19 Base address:0x6000 

eth2      Link encap:Ethernet  HWaddr 6c:f0:49:a4:47:38  
          inet addr:192.168.1.10  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::6ef0:49ff:fea4:4738/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:199809345 errors:0 dropped:0 overruns:0 frame:0
          TX packets:158362936 errors:0 dropped:0 overruns:0 carrier:1
          collisions:0 txqueuelen:1000 
          RX bytes:3656983762 (3.4 GiB)  TX bytes:1715848473 (1.5 GiB)
          Interrupt:27 

eth3      Link encap:Ethernet  HWaddr 94:0c:6d:82:c8:72  
          inet addr:192.168.2.5  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::960c:6dff:fe82:c872/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:110814 errors:0 dropped:0 overruns:0 frame:0
          TX packets:73386 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:16044901 (15.3 MiB)  TX bytes:42125647 (40.1 MiB)
          Interrupt:20 Base address:0x2000 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:22351 errors:0 dropped:0 overruns:0 frame:0
          TX packets:22351 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2625143 (2.5 MiB)  TX bytes:2625143 (2.5 MiB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:41358924 errors:0 dropped:0 overruns:0 frame:0
          TX packets:23116350 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:3065505744 (2.8 GiB)  TX bytes:1324358330 (1.2 GiB)

このネットワークに接続されている他の2台のコンピューターがあります。1つにはIP 10.1.1.12(サブネットマスク255.255.255.0)があり、もう1つには10.1.2.20(サブネットマスク255.255.255.0)があります。10.1.2.20から10.1.1.12に到達できるようにしたい。

パケット転送はルーターで有効になっており、FORWARDチェーンのポリシーはACCEPT(および他のルールはありません)であるため、10.1.2.20からルーターを通過する10.1.1.12にpingしても問題はないはずです。

しかし、これは私が得るものです:

$ ping -c15 10.1.1.12
PING 10.1.1.12 (10.1.1.12): 56 data bytes
Request timeout for icmp_seq 0
92 bytes from router2.mydomain.com (10.1.2.1): Redirect Host(New addr: 10.1.1.12)
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 0054 81d4   0 0000  3f  01 e2b3 10.1.2.20  10.1.1.12 

Request timeout for icmp_seq 1
92 bytes from router2.mydomain.com (10.1.2.1): Redirect Host(New addr: 10.1.1.12)
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 0054 899b   0 0000  3f  01 daec 10.1.2.20  10.1.1.12 

Request timeout for icmp_seq 2
92 bytes from router2.mydomain.com (10.1.2.1): Redirect Host(New addr: 10.1.1.12)
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 0054 78fe   0 0000  3f  01 eb89 10.1.2.20  10.1.1.12 

Request timeout for icmp_seq 3
92 bytes from router2.mydomain.com (10.1.2.1): Redirect Host(New addr: 10.1.1.12)
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 0054 14b8   0 0000  3f  01 4fd0 10.1.2.20  10.1.1.12 

Request timeout for icmp_seq 4
92 bytes from router2.mydomain.com (10.1.2.1): Redirect Host(New addr: 10.1.1.12)
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 0054 8ef7   0 0000  3f  01 d590 10.1.2.20  10.1.1.12 

Request timeout for icmp_seq 5
92 bytes from router2.mydomain.com (10.1.2.1): Redirect Host(New addr: 10.1.1.12)
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 0054 ec9d   0 0000  3f  01 77ea 10.1.2.20  10.1.1.12 

Request timeout for icmp_seq 6
92 bytes from router2.mydomain.com (10.1.2.1): Redirect Host(New addr: 10.1.1.12)
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 0054 70e6   0 0000  3f  01 f3a1 10.1.2.20  10.1.1.12 

Request timeout for icmp_seq 7
92 bytes from router2.mydomain.com (10.1.2.1): Redirect Host(New addr: 10.1.1.12)
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 0054 b0d2   0 0000  3f  01 b3b5 10.1.2.20  10.1.1.12 

Request timeout for icmp_seq 8
92 bytes from router2.mydomain.com (10.1.2.1): Redirect Host(New addr: 10.1.1.12)
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 0054 f8b4   0 0000  3f  01 6bd3 10.1.2.20  10.1.1.12 

Request timeout for icmp_seq 9
Request timeout for icmp_seq 10
92 bytes from router2.mydomain.com (10.1.2.1): Redirect Host(New addr: 10.1.1.12)
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 0054 1c95   0 0000  3f  01 47f3 10.1.2.20  10.1.1.12 

Request timeout for icmp_seq 11
Request timeout for icmp_seq 12
Request timeout for icmp_seq 13
92 bytes from router2.mydomain.com (10.1.2.1): Redirect Host(New addr: 10.1.1.12)
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 0054 62bc   0 0000  3f  01 01cc 10.1.2.20  10.1.1.12 

なぜこれが起こるのですか?

私が読んだRedirect Hostことから、応答は2つのホストが同じネットワークにあり、より短いルートがあるという事実と関係があります(または私は理解しました)。実際、それらは同じ物理ネットワーク内にありますが、同じサブネット上にない場合(お互いを見ることができない場合)、なぜより良いルートがあるのでしょうか?

私は何が欠けていますか?

あなたが見たいかもしれないいくつかの追加情報:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.8.0.2        0.0.0.0         255.255.255.255 UH    0      0        0 tun0
127.0.0.1       0.0.0.0         255.255.255.255 UH    0      0        0 lo
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth3
10.8.0.0        10.8.0.2        255.255.255.0   UG    0      0        0 tun0
192.168.1.0     0.0.0.0         255.255.255.0   U     1      0        0 eth2
10.1.4.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1
10.1.1.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1
10.1.2.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1
10.1.3.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth2
0.0.0.0         192.168.2.1     0.0.0.0         UG    100    0        0 eth3

# iptables -L -n
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   

# iptables -L -n -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  -- !10.0.0.0/8           10.0.0.0/8          
MASQUERADE  all  --  10.0.0.0/8          !10.0.0.0/8          

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 

回答:


22

一見、DebianはICMPリダイレクトを送信するための境界を広げているようです。RFC 792(インターネットプロトコル)を引用しています

  The gateway sends a redirect message to a host in the following
  situation.  A gateway, G1, receives an internet datagram from a
  host on a network to which the gateway is attached.  The gateway,
  G1, checks its routing table and obtains the address of the next
  gateway, G2, on the route to the datagram's internet destination
  network, X.  If G2 and the host identified by the internet source
  address of the datagram are on the same network, a redirect
  message is sent to the host.  The redirect message advises the
  host to send its traffic for network X directly to gateway G2 as
  this is a shorter path to the destination.  The gateway forwards
  the original datagram's data to its internet destination.

この場合、G1は10.1.2.1eth1:0上記)、Xは10.1.1.0/24、G2はで10.1.1.12、ソースは10.1.2.20(つまりG2 and the host identified by the internet source address of the datagram are **NOT** on the same network)です。たぶん、これは同じインターフェース上のインターフェースエイリアス(またはセカンダリアドレス)の場合、歴史的に異なって解釈されてきたかもしれませんが、厳密に言えば、Debianがそのリダイレクトを送信するかどうかわかりません。

あなたの要件に応じて、あなたがのためにサブネットを作ることによってこの問題を解決することができるかもしれないeth1ような何か10.1.0.0/22(からホスト・アドレス10.1.0.1- 10.1.3.254)の代わりに、個々のインターフェイスエイリアスを使用する/24(ブロックeth1eth1:0eth1:1eth1:2); これを行った場合、接続されているすべてのホストのネットマスクを変更する必要があり、に展開しない限り10.1.4.xを使用することはできません/21

編集

元の質問の範囲を少し超えていますが、コメントに記載されている設計/セキュリティの問題を解決するお手伝いをします。

オフィス内のユーザーを互いに分離したい場合は、少し戻って、現在のセキュリティ問題を見てみましょう。

現在、1つのイーサネットブロードキャストドメインに4つのサブネットがあります。1つのブロードキャストドメイン内のすべてのユーザーは、あなたがコメントでの関節セキュリティ要件を満たしていない(すべてのマシンが他のマシンからの放送を見て、自然にレイヤ2で相互にトラフィックを送信することができ、関係なく、デフォルトゲートウェイの存在のeth1eth1:0eth1:1またはeth1:2)。あなたのDebianファイアウォールはこれを変更する(または多分私はあなたのDebianのファイアウォールが何もないと言うべきでできることは何もありません必要があり、これを変更するために行うが:-)。

  • コメントに記載されているセキュリティポリシーに基づいて、ユーザーをVLANに割り当てる必要があります。適切に構成されたVLANは、上記の問題を修正するのに大いに役立ちます。イーサネットスイッチがVLANをサポートしていない場合は、サポートしているものを入手する必要があります。
  • 複数のセキュリティドメインへのアクセスに関して10.1.1.12は、いくつかのオプションがあります。
    • オプション1:すべてのユーザーがサービスにアクセスする必要がある場合、10.1.1.12すべてのユーザーを1つのIPサブネットに入れ、プライベートVLAN(RFC 5517)でセキュリティポリシーを実装できますイーサネットスイッチがこれをサポートしている場合)。このオプションでは、iptablesオフィス内のトラフィックがセキュリティ境界を越えることを制限するルールは必要ありません(プライベートVLANで実現されます)。
    • オプション2:あなたは可能性が異なるサブネット(VLANに相当)にユーザーを入れて、実装するiptablesセキュリティポリシーを展開するためのルールを
  • Vlanレベルでネットワークを保護したら、ソースベースのルーティングポリシーを設定して、複数のアップリンクから異なるユーザーを送信します。

参考までに、VRFをサポートするルーターをお持ちの場合は、さらに簡単になります。IIRC、オンサイトにCisco IOSマシンがあります。すでにお持ちのモデルとソフトウェアイメージに応じて、シスコはユーザーを互いに分離し、ソースベースのルーティングポリシー実装するという素晴らしい仕事をすることができます。


基本的に私が必要とするのは、オフィスのさまざまなエリアに4つのサブネットを持つことです。あるISPを使用してインターネットに出て行くサブネットもあれば、別のISPを使用するサブネットもあります。異なるサブネットのマシンは、相互に参照したり接続したりすることはできません。ホスト10.1.1.12を除きます。ホスト10.1.1.12は、すべてのユーザーが利用できるサービスを提供します。現在、このための適切なFORWARDルールを設定していません。ただし、すべての転送が受け入れられるため、10.1.2.20から10.1.1.12にpingできるはずだと考えました。
エルバート氏

うーん...マイク、ありがとう。VLANをさらに詳しく調べます。これをすべて始める前に考えていたので、必要ないと思いました。私たちが持っているスイッチは管理されていないスイッチですが、VLANをサポートしているので、私が間違っていなければ、Debianルーターでタグ付けをしなければならないでしょう。サブネットの分離は、実際にはこのオフィスでは重要な問題ではありませんが、余分な作業をあまり必要としないのであれば良いと思います。私はそれに見て、私が何ができるかがわかります:)
エルバート氏

@ElBarto、スイッチがVlanのタグ付けをサポートしていない場合(管理されていない場合はほとんどありません)、Debianのタグ付けだけでは役に立ちません。オフィス内サブネットの分離が重要な問題でない場合は、2つの異なるサブネットに全員を配置し、物事を簡単にします(2つのサブネットにより、Debianでポリシールートを確保できます)。4つのDebianインターフェースエイリアスを使用する現在のスキームでは、実際のサブネット分離は提供されず、さらに複雑になります。
マイクペニントン

そうです、ユーザーマニュアルから理解したとおり、スイッチは「タグの保持」をサポートしていますが、「実際のタグ付けの実行」はサポートしていません。Debianに関する説明をありがとう。問題は、2つのサブネットを保持していても、10.1.1.12にアクセスするには、サブネット10.1.2.0/24のマシンが必要だということです。
エルバート氏

異なるサブネットのマシンは、まだアクセスできるはずです10.1.1.12。LinuxでICMP到達不能を送信しないようにブロックiptablesすると、ICMPメッセージを送信することでCPUを消費しますが、少なくともホストテーブルにはインストールされません。ただし、Debianに別のイーサネットインターフェースを追加する(つまり、ユーザー「クラス」ごとに1つのインターフェースを専用にする)場合、Debian ICMP到達不能を送信しなくなります。これは、2つの異なるイーサネットスイッチがあることを意味します。各ユーザー「クラス」に1つです。あなたのケーブル技術者はそれを嫌いますが、それは仕事を
成し遂げ

3

何をしようとしているのかは明確ではありませんが、次のように言えます。

これらのサブネットは、同じ物理インターフェースに接続されています。Linuxルーターは、受信したパケットを同じ物理インターフェースで転送する必要がある場合、ICMPリダイレクトメッセージを返します。


すべて同じNICで接続されているこれらの4つのサブネットを処理する必要があります。考え方は、すべてのホストで使用できるホスト10.1.1.12を除き、異なるサブネットのホストが相互に接続できないようにすることです。この転送ルールはまだ定義していないので、これらのサブネットのホストはすべて10.1.1.12に到達できるはずだと考えました。ICMPリダイレクトを回避する方法はありますか?
エルバート氏

1
@ ElBarto、1つの方法は、iptables外に向かうリダイレクトをドロップするルールを追加することですeth1
マイクペニントン

1

私はKhaledのコメントに同意し、彼のフレーズの最後にも追加します。

「これらのサブネットは同じ物理インターフェースに接続されています。Linuxルーターは、受信パケットを同じ物理インターフェースを介して転送する必要がある場合、ICMPリダイレクトメッセージを返します」同じ宛先サブネットに要求をネクストホップにリダイレクトします。Mikrotik LinuxルーターとF5 bigip LTMデバイスを使用して、今日私にそれが起こりました。

root@(primaryadc)(cfg-sync In Sync)(Standby)(/Common)(tmos)# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 192.168.153.20: icmp_seq=1 Redirect Host(New nexthop: 192.168.153.2)
64 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=82.8 ms
From 192.168.153.20: icmp_seq=2 Redirect Host(New nexthop: 192.168.153.2)
64 bytes from 8.8.8.8: icmp_seq=2 ttl=128 time=123 ms
**routing table**
0.0.0.0  192.168.153.20  0.0.0.0         UG        0 0          0 external
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.