Eu tenho um servidor Ubuntu 16.04 que está atuando como um roteador com várias interfaces (VLAN). Por padrão, rp_filter
(filtro de caminho reverso) está ativado para todas as interfaces. Quero mantê-lo assim, mas faça uma exceção para exatamente uma interface. (Os pacotes desta interface devem ter um endereço IP de origem que não corresponda a nenhum endereço de destino de roteamento dessa interface.)
Digamos que essa interface tenha o nome ens20.4
, seu dispositivo vlan-raw- ens20
e a interface de destino (para testar o fluxo de pacotes) seja nomeada ens20.2
(embora deva funcionar para qualquer interface de destino).
Tentei definir a rp_filter
propriedade ens20.4
apenas, sem sucesso:
echo 0 > /proc/sys/net/ipv4/conf/ens20.4/rp_filter
Portanto, para fins de teste, eu também desabilitei rp_filter
o dispositivo vlan-raw-e a interface de destino do teste:
echo 0 > /proc/sys/net/ipv4/conf/ens20/rp_filter
echo 0 > /proc/sys/net/ipv4/conf/ens20.2/rp_filter
Ainda sem sucesso, os pacotes com um endereço IP de origem "falsificado" ainda são descartados. Somente se eu desativar rp_filter
para todas as interfaces, os pacotes passarão:
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
No entanto, ainda quero manter o caminho inverso filtrando para todas as outras interfaces - o que estou perdendo?
Respostas:
Informações aqui: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/tree/Documentation/networking/ip-sysctl.txt?h=v4.9#n1090
Observe a última frase que explicaria suas tentativas:
Portanto, isso deve funcionar:
Agora max (conf / {all, ens20.4} / rp_filter == 0: sem validação de fonte. Verifique novamente se as outras interfaces ainda estão protegidas.
Você também pode verificar o rpf "loose" com o valor 2. Caso o pacote deva ser roteado normalmente por outra interface, isso seria melhor do que nenhuma validação.
fonte