
Eu tenho um PC com duas interfaces: eth0
(endereço IP 192.168.1.16
) e eth2
(endereço IP 10.10.10.73
). Além disso, tenho uma rota de host neste PC na main
tabela que diz que se o endereço de destino for 172.16.1.1
, use eth0
a interface.
Agora, quando eu envio a "solicitação de eco" do ICMP de 172.16.1.1
para 10.10.10.73
( eth2
interface), a "resposta de eco" do ICMP é enviada eth0
(tenho o RPF desabilitado) usando 192.168.1.16
como IP de origem. Tudo isso é esperado por causa desta rota de host.
No entanto, quando adiciono um ip rule
seletor from 10.10.10.73
e uma ação lookup test
logo após o número da regra 0
e a tabela test
conter simplesmente uma rota padrão usando eth2
a interface, a "resposta de eco" do ICMP é enviada da eth2
interface.
Estou confuso como esse from 10.10.10.73
seletor pode corresponder. Quando, no dia da vida de uma mensagem de "resposta de eco" ICMP, o IP de origem era 10.10.10.73
para que a correspondência ocorresse?
Responder1
De acordo comLivro Roteamento de políticas usando Linux, os pacotes provenientes da máquina local destinados a sistemas externos entrarão no banco de dados de política de roteamento após passarem pelas cadeias de saída, e é aqui que seu from 10.10.10.73
seletor corresponderá ao pacote de resposta de eco de saída 10.10.10.73
destinado a 172.16.1.1
.
Dehttp://www.policyrouting.org/PolicyRoutingBook/ONLINE/CH03.web.html:
Considere o caminho para um pacote de origem externa destinado a um serviço interno. Ele entra no sistema e é processado pelo estágio de manipulação e marcação de pacotes de entrada, Pré-Rota(1). Este estágio é onde você aplicaria operações de manipulação de pacotes, como fwmark e marcação TOS/QoS ou talvez o NetFilter NAT. O pacote então entra no RPDB para obter roteamento e é roteado para a cadeia Input(2). A cadeia de entrada fornece funções de firewall para pacotes destinados aos serviços da Máquina Local.
O cenário inverso é o caminho do pacote para um pacote de origem de serviço interno destinado a um sistema externo, tal como o pacote de resposta ao descrito no parágrafo anterior. Ele sai da Máquina Local e entra nas cadeias Output(4), que fornecem as funções de firewall. Em seguida, ele entra no RPDB para processamento de rota e sai do sistema através do estágio de manipulação e marcação de pacotes de saída, Post-Route(5).
Responder2
O seletor from 10.10.10.73
corresponde porque a resposta de eco é emitida a partir deste endereço. No entanto, nesse caso, não é a maneira recomendada de proceder. Porque from 10.10.10.73
pode se aplicar a tudo o que vai para outra interface que não a eth0, fazendo uma rota incorreta nesse caso. Você deve usar to 172.16.1.1
em sua regra de IP.
A coisa que corresponde ao endereço de origem está relacionada ao fato de que usar ip rule
a decisão de roteamento relacionada a uma tabela de pesquisa dedicada faz com que o pacote ignore o src
endereço padrão especificado pela rota desta interface, como o que você verá emip route list table local
O que acontece está na parte vermelha deste diagrama:diagrama de viagem de pacotes do kernel
Sem ip rule
o pacote chegar na sua máquina para o processo local, e por causa da rota padrão a resposta vem da eth0 (obviamente com o endereço IP eth0). Por causa do ip rule add from 10.10.10.73 table test
processo de roteamento, altere a tabela de pesquisa e não use o endereço IP padrão da interface que mantém a rota para o destino, agora ele usa o endereço IP da interface de resposta.