Linux como um roteador: Enviando mensagens ICMPv4 “net inacessível” e “host inacessível”

1

Eu quero que os roteadores baseados no GNU / Linux enviem pelo menos as mensagens ICMPv4: net unreachable , host unreachable . Especialmente a mensagem não-pesquisável do host é importante para mim: Se um roteador reside na mesma rede que o host de destino, mas não consegue resolver o IP, o roteador deve enviar uma mensagem de host inacessível.

Atualmente, preciso configurar as regras iptables . Mas eu gostaria de enviar essas mensagens como definido por RFC , ou seja, automaticamente: Se, de acordo com Para a informação nas tabelas de roteamento do gateway, a rede especificada no campo de destino da Internet de um datagrama é inacessível, por exemplo, a distância para a rede é infinito, o gateway pode enviar uma mensagem de destino inacessível para o host de origem da Internet do datagrama. Além disso, em algumas redes, o gateway pode determinar se o host de destino da Internet está inacessível. Gateways nessas redes podem enviar mensagens de destino inacessíveis para o host de origem quando o host de destino estiver inacessível. A propósito, não há protocolos de roteamento envolvidos. Basicamente, cada roteador é o gateway para até três sub-redes.

O que tenho que fazer?

    
por user2964971 10.02.2015 / 09:12

1 resposta

1

Ok, você continua editando sua pergunta e alterando o escopo. Embora não tenha certeza do que você quer dizer com:

If a router resides in the same network as the destination host, but cannot resolve the IP, meaning it cannot reach the host itself, then the router should send a host unreachable message.

Eu tenho um palpite. Se o roteador estiver no mesmo segmento de rede, o destino poderá ser potencialmente atingido por definição. O que você entende por "não pode resolver o IP" também não está claro.

No entanto, se o host de destino estiver inativo, o roteador se comportará exatamente da maneira que você descreveu, conforme o padrão. Então eu não tenho certeza do que é que você quer que difere do comportamento padrão ...

Como o seu software de camada superior atua nessa resposta do roteador é outra história. Mas de acordo com o padrão, você deve obter exatamente o comportamento que parece estar pedindo.

Resposta original

Se você quer trabalhar em torno de iptables (o que eu não tenho certeza da sua pergunta), então você terá que definir um rota nula (também rota blackhole ). Você provavelmente desejará o primeiro, já que ele retornará as mensagens ICMP desejadas.

Com iptables , o truque é usar um dos valores permitidos para:

... -j REJECT --reject-with ...

Citando o HOWTO :

 REJECT
    This module has the same effect as 'DROP', except that the
    sender is sent an ICMP 'port unreachable' error message.  Note
    that the ICMP error message is not sent if (see RFC 1122):


    o  The packet being filtered was an ICMP error message in the
       first place, or some unknown ICMP type.

    o  The packet being filtered was a non-head fragment.

    o  We've sent too many ICMP error messages to that destination
       recently (see /proc/sys/net/ipv4/icmp_ratelimit).

    REJECT also takes a '--reject-with' optional argument which
    alters the reply packet used: see the manual page.

Consequentemente, na página de manual , obtemos (pesquise "REJECT (específico do IPv6)" e "REJEITAR (específico do IPv4)"):

  • IPv6: icmp6 sem rota, sem rota, icmp6-adm-proibido, adm-proibido, icmp6-addr-inacessível, addr-unreach, icmp6-port-inacessível ou port-unreach (ou tcp-reset)
  • IPv4: icmp-net-inacessível, icmp-host-inacessível, icmp-port-inacessível, icmp-proto-inacessível, icmp-net-proibido, icmp-host-proibido ou icmp-admin-proibido (ou tcp- redefinir)

Para o IPv4, você está procurando icmp-net-unreachable e icmp-host-unreachable , respectivamente, de acordo com sua pergunta.

    
por 10.02.2015 / 10:17

Tags