Perché succede ICMP Redirect Host?

Sto impostando una casella Debian come router per 4 sottoreti. Per questo ho definito 4 interfacce virtuali nella NIC in cui è collegata la LAN ( 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 PtP: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) 

Ho due altri computer collegati a questa networking. Uno ha IP 10.1.1.12 (subnet mask 255.255.255.0) e l'altra 10.1.2.20 (subnet mask 255.255.255.0). Voglio essere in grado di raggiungere 10.1.1.12 da 10.1.2.20.

Dal momento che l'inoltro di pacchetti è abilitato nel router e la politica della catena FORWARD è ACCEPT (e non ci sono altre regole), capisco che non ci dovrebbe essere alcun problema per ping da 10.1.2.20 a 10.1.1.12 passando attraverso il router.

Tuttavia, questo è quello che ottengo:

 $ 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 

Perché questo accade?

Da quello che ho letto la risposta di Redirect Host ha qualcosa a che fare con il fatto che i due host si trovano nella stessa networking e che ci sia un path più breve (o così ho capito). Essi sono infatti nella stessa networking fisica, ma perché ci sarebbe un path migliore se non fossero sulla stessa substring (non si vedono l'un l'altro)?

Che cosa mi manca?

Alcune informazioni extra potreste voler vedere:

 # 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 

  • Come configurare l'accesso remoto a più sottoreti dietro un SonicWALL NSA 2400
  • Utilizzo di IP interni o esterni per il trasferimento di file in Data Center?
  • Utilizzare il server DHCP / DHCPv6 di Windows senza impostare un indirizzo statico
  • Debian / IPv6: Il path predefinito scade dopo 1800 secondi, perdendo la connettività
  • Posso aggiungere una route statica a una networking VPN se l'IP gateway predefinito è dinamico? (Windows 7)
  • Modifica di pool openvpn dhcp
  • Cisco Network Object NAT per get Internet?
  • Come aggiungere il path ip per indirizzare il traffico attraverso l'interface quando la destinazione è anche quella interface
  • 3 Solutions collect form web for “Perché succede ICMP Redirect Host?”

    Al primo rumore, sembra che Debian stia stretching i confini per l'invio di un reindirizzamento ICMP; citando RFC 792 (Internet Protocol) .

      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. 

    In questo caso, G1 è 10.1.2.1 ( eth1:0 sopra), X è 10.1.1.0/24 e G2 è 10.1.1.0/24 e la sorgente è 10.1.2.20 (cioè G2 and the host identified by the internet source address of the datagram are **NOT** on the same network ). Forse questo è stato storicamente interpretato in modo diverso nel caso di alias di interface (o indirizzi secondari) sulla stessa interface, ma in senso stretto non sono sicuro che dovremmo vedere Debian submit tale reindirizzamento.

    A seconda delle tue esigenze, potresti risolvere questo problema rendendo la subnet per eth1 qualcosa come 10.1.0.0/22 (indirizzi host da 10.1.0.110.1.3.254 ) invece di utilizzare alias di interface per singoli /24 blocchi ( eth1 , eth1:0 , eth1:1 , eth1:2 ); se hai fatto questo, dovrai cambiare la maschera di networking di tutti gli host collegati e non sarai in grado di utilizzare 10.1.4.x a less che non si espandi a /21 .

    EDIT

    Stiamo avventurando un po 'fuori dalla portta della domanda originale, ma aiuterò a lavorare attraverso i problemi di progettazione / sicurezza menzionati nel tuo commento.

    Se si desidera isolare gli utenti in un altro ufficio, passiamo indietro per un secondo e esaminiamo alcuni problemi di sicurezza con quello che hai adesso:

    Attualmente disponete di quattro sottoreti in un dominio di trasmissione ethernet. Tutti gli utenti di un dominio di trasmissione non soddisfano i requisiti di sicurezza elencati nei commenti (tutte le macchine visualizzeranno trasmissioni da altre macchine e potrebbero spontaneamente submit traffico tra loro allo Layer2, indipendentemente dal loro gateway predefinito essendo eth1 , eth1:0 , eth1:1 o eth1:2 ). Non c'è niente che il tuo firewall Debian possa fare per cambiare questo (o forse dovrei dire che non c'è niente che il tuo firewall Debian dovrebbe fare per cambiare questo :-).

    • Devi assegnare gli utenti a Vlans, in base alla politica di sicurezza indicata nei commenti. Un Vlan configurato correttamente andrà a lungo per risolvere i problemi sopra citati. Se l'interruttore ethernet non support Vlans, si dovrebbe get quello che fa.
    • Per quanto riguarda i domini di sicurezza multipli che accedono a 10.1.1.12 , hai un paio di opzioni:
      • Opzione 1 : Data l'obbligo per tutti gli utenti di accedere ai servizi a 10.1.1.12 , è ansible mettere tutti gli utenti in una substring IP e implementare criteri di protezione con Private Vlans (RFC 5517) , supponendo che l'interruttore ethernet lo support. Questa opzione non richiede regole iptables per limitare il traffico intracomunitario dall'incrocio dei confini di sicurezza (che si ottiene con i Vlans privati).
      • Opzione 2 : puoi mettere gli utenti in sottoreti differenti (corrispondenti a Vlls) e implementare le regole iptables per implementare le tue policy di sicurezza
    • Dopo aver assicurato la tua networking a livello di Vlan, impostare le politiche di routing basate su fonti per submit utenti diversi agli outlinks multipli.

    FYI, se si dispone di un router che support VRF , alcuni di questi sono ancora più semplici; IIRC, hai una macchina Cisco IOS in loco. A seconda del model e dell'image software che hai già fatto, Cisco potrebbe fare un ottimo lavoro per isolare gli utenti gli uni dagli altri e implementare le politiche di routing basate su fonti.

    Non è veramente chiaro cosa stai cercando di fare, ma posso dire quanto segue.

    Queste sottoreti sono collegate alla stessa interface fisica. Il router Linux restituirà il messaggio di reindirizzamento ICMP quando il pacchetto ricevuto deve essere inoltrato sulla stessa interface fisica.

    Sono d'accordo con i commenti di Khaled e avrei anche aggiunto alla fine della sua frase:

    "Queste sottoreti sono collegate alla stessa interface fisica: il router Linux restituirà il messaggio di reindirizzamento ICMP quando il pacchetto ricevuto deve essere inoltrato sulla stessa interface fisica" alla stessa substring di destinazione e poi redirect la richiesta al prossimo hop. Questo mi succede oggi utilizzando un router Mikrotik linux e un dispositivo 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 
    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.