Eu testei a seguinte configuração com dois namespaces de rede e dois pares de veth:
+-- Main --+
| | 192.168.2.21/24
| wlan0 | ------------------- ...
| |
| | 10.0.0.254/24 10.0.0.1/24 +-- NS0 --+
| veth0a | --------------------------- | veth0b |
| | +---------+
| |
| | 10.0.1.254/24 10.0.1.1/24 +-- NS1 --+
| veth1a | --------------------------- | veth1b |
| | +---------+
+----------+
O objetivo é rotear todo o tráfego de Main
para wlan0
(rede C), enquanto direciona tudo de veth0
(rede A) a veth1
(rede B).
Há uma rota padrão normal em wlan0
, adquirida via DHCP:
$ ip route
default via 192.168.2.1 dev wlan0
...
O encaminhamento está ativado:
echo "1" | sudo tee /proc/sys/net/ipv4/ip_forward
Adicionamos uma rota padrão para veth1a
em uma nova tabela, assumindo que 10.0.1.1
é o gateway:
sudo ip route add 10.0.1.0/24 table 250 dev veth1a src 10.0.1.254
sudo ip route add default table 250 dev veth1a via 10.0.1.1
Todo o tráfego de e para veth0a
(10.0.0.0/24) usa esta tabela:
sudo ip rule add from 10.0.0.0/24 table 250
sudo ip rule add to 10.0.0.0/24 table 250
Se alguém atrás de veth1b
(10.0.1.0/24) tiver a ideia estúpida de tentar nos usar como gateway, evite encaminhar para wlan0
e voltar direto usando a mesma tabela. Isso geralmente gera pacotes de erro ICMP:
sudo ip rule add from 10.0.1.0/24 table 250
sudo ip rule add to 10.0.1.0/24 table 250
Adapte-se à sua configuração conforme necessário.
Nenhum localhost
foi sequer remotamente mencionado em qualquer lugar.