O kernel do Linux me permitiria adicionar rotas com gateways que eram meramente acessíveis, já que não há problema com eles na prática. Mas hoje em dia recebo "Erro: Nexthop tem gateway inválido", o que é bom para seguir as especificações e tornar os testes ad hoc uma dor de cabeça.
Existe alguma maneira de ignorar essa verificação e forçar minha rota?
E sim, eu quero disparar meus pacotes roteados de LAN privada através de uma interface pública, os motivos são válidos, de baixo volume e inofensivos :)
Para usar um gateway que esteja na mesma rede local (por exemplo, a mesma Ethernet que você), mas apenas fora do seu intervalo de endereços IP, para que o sistema operacional não perceba que é acessível localmente:
Com kernels recentes: Especifique o
onlink
parâmetro do comando.Com kernels mais antigos a opção só era aceita para uma única versão de IP (não me lembro qual). A alternativa é primeiro adicionar uma rota de 'dispositivo' para o gateway como /32 ou /128, o que fará com que o sistema operacional o considere acessível:
Isso é funcionalmente idêntico à rota de "sub-rede local" adicionada automaticamente que você já possui a partir do seu próprio endereço IP. Na verdade, você pode definir todo um intervalo/sub-rede de endereços como 'local' desta forma, se desejar.
Freqüentemente, mesmo que a Ethernet use várias sub-redes IPv4 separadas, é provável que todos os dispositivos estejam em uma única sub-rede IPv6; portanto, se você souber o endereço IPv6 do gateway (global ou link local), poderá rotear o IPv4 por meio disso:
(Isso não usa tunelamento ou tradução de endereços – apenas uma maneira diferente de resolver o endereço MAC do gateway.)
Observe que os ISPs podem facilmente evitar tudo isso bloqueando o ARP direto entre os clientes e fazendo proxy ARP para que todos os pacotes acabem passando pelo gateway, mesmo que o destino pareça ser uma sub-rede local.
A maioria dos gateways domésticos hoje em dia também vem com regras de firewall predefinidas que bloqueiam pacotes da WAN para sua rede interna, especificamente para evitar tais hacks.
Para usar um gateway que não esteja fisicamente na mesma rede local (Ethernet, etc.) que você:
Não pode ser feito. O endereço IP do gateway é realmente um substituto para o endereço MAC da rede local do gateway (ou seja, não é um campo de cabeçalho IP, mas uma coisa de camada inferior), portanto, se o gateway não estiver na mesma rede local que você, então você pode ' t enviar pacotes para seu endereço MAC, portanto você não pode rotear através dele.
O IPv4 costumava suportar um cabeçalho 'Rota de origem' em algum ponto (da mesma forma 'RH0' no IPv6), que poderia ser usado para solicitar ao gateway A que roteasse através do gateway B em seguida, mas foi universalmente obsoleto e removido décadas atrás.
Isso pode ser interpretado de duas maneiras, mas realmente só funciona se o sistema operacional realmente ignorar a parte "acessível pela rota 0.0.0.0" e tratar o gateway como acessível diretamente no link (como na primeira parte da resposta).
A outra interpretação do sistema operacional seguindo a rota 0.0.0.0 (ou seja, tratar sua rota como "recursiva") não funcionaria, conforme a segunda parte da resposta - resultaria apenas na passagem dos pacotes pelo seu gateway normal, que você não pode controlar mais.
(Na verdade, o Linux tem um
pervasive
sinalizador para rotas que parece ter sido criado para realizar pesquisas recursivas de gateway, mas não é funcional e parece ter tido seu código de suporte (no valor de duas linhas) removido em 2010. Na prática, geralmente pesquisas recursivas seriam feito por um daemon de roteamento de qualquer maneira.)