Eu tenho a seguinte situação:
- - - - - - -
| namespace |-------o o------
- - - - - - - vethY ppp0
vethX
onde:
ppp0
é uma interface PPP e seu endereço IP é 192.168.100.169/24vethX
é uma interface Ethernet virtual dentro do namespace e seu endereço IP é 10.0.0.3/24vethY
é outra interface Ethernet virtual, seu endereço IP é 10.0.0.5/24 e também é o gateway padrão para o namespace
Na verdade, a tabela de roteamento no namespace é a seguinte:
$ sudo ip netns exec my_namespace ip route
default via 10.0.0.5 dev vethX
10.0.0.0/24 dev vethX proto kernel scope link src 10.0.0.3
Quero usar roteamento baseado em políticas neste cenário; em particular, quero usar uma tabela de roteamento personalizada quando a interface de entrada de pacotes de rede for vethY
ou a ppp0
interface.
Eu criei a tabela de roteamento personalizada com o nome 'T1'adicionando a entrada "T1" no arquivo /etc/iproute2/rt_tables
.
Em seguida, adicionei a regra de roteamento de política que informará ao sistema quando usar essa nova tabela de roteamento.
Então agora as regras de roteamento da política são:
$ ip rule
0: from all lookup local
32764: from all iif ppp0 lookup T1
32765: from all iif vethY lookup T1
32766: from all lookup main
32767: form all lookup default
Então adicionei as seguintes regras à minha tabela personalizada
$ ip route show table T1
default via 192.168.100.169 dev ppp0
10.0.0.0/24 dev vethY scope link
192.168.100.180 dev ppp0 scope link
A última linha mostra qual é o outro ponto final do link ponto a ponto.
Além disso, a tabela de roteamento principal está vazia.
Com esta configuração, se eu estiver no namespace e executar ping em 10.0.0.5, não recebo respostas (nem a resposta ARP).
Os pacotes de solicitação chegam à interface vethY (vi isso usando o wireshark), mas nenhuma resposta é gerada.
Se meu cache arp estiver vazio, quando uma solicitação arp for enviada, nenhuma resposta arp será enviada de volta.
Em vez disso, se eu adicionar a regra
10.0.0.0/24 dev vethY scope link
também na tabela principal, todos os pacotes fluirão da maneira correta.
Por que não recebo respostas se não adiciono esta regra na tabela principal?
Por que a tabela principal está envolvida, já que configurei o roteamento para usar T1 para todos os pacotes vindos de vethY ou ppp0?