web-dev-qa-db-ja.com

ICMPリダイレクトホストが発生するのはなぜですか?

私は4つのサブネットのルーターとしてDebianボックスを設定しています。そのため、NIC LANが接続されている場所に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 
27
El Barto

一見すると、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.1(上記のeth1: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/2210.1.0.110.1.3.254/24eth1)のインターフェイスエイリアスを使用する代わりに、eth1:0eth1:1-eth1:2のホストアドレス)のようなサブネットを作成することで、これを解決できる場合があります。これを行った場合、接続されているすべてのホストのネットマスクを変更する必要があり、/21に展開しない限り、10.1.4.xを使用できません。

[〜#〜]編集[〜#〜]

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

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

現在、1つのイーサネットブロードキャストドメインに4つのサブネットがあります。 1つのブロードキャストドメイン内のすべてのユーザーは、コメントで明記されたセキュリティ要件を満たしていません(すべてのマシンは他のマシンからのブロードキャストを参照し、デフォルトゲートウェイが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:あなたcouldユーザーを別のサブネット(VLANに対応)に配置し、iptablesルールを実装してセキュリティポリシーを展開する
  • VLANレベルでネットワークを保護したら、 ソースベースのルーティングポリシー を設定して、複数のアップリンクから異なるユーザーを送信します。

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

22
Mike Pennington

あなたが何をしようとしているのかははっきりしていませんが、以下のことが言えます。

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

3
Khaled

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
1
user352048

これを行うことは、物理的には簡単な解決策のように聞こえます。各LANを独自のスイッチに配置し、4ポートNICをそれらすべてに対応する1つのボックスにインストールします。

0
cnd