Eu meio que presumi que se um IP de origem de um pacote correspondesse ao de uma interface, ele usaria a referida interface. E se isso não fosse um comportamento de IP inerente, então minha segunda rota teria feito isso acontecer: a parte src
da rota era um arenque vermelho para mim.
Então, meus programas se ligam ao endereço ppp0, que define seu IP de origem, certo? Eu fiz o que @davidgo disse e fiz uma tabela de roteamento separada ...
echo 200 custom | sudo tee -a /etc/iproute2/rt_tables
... então adicionamos uma regra para usar a tabela personalizada para pacotes que possuem esse IP de origem ...
sudo ip rule add from 10.10.1.2 lookup custom
... e adicionou uma regra à tabela personalizada para usar o ppp0 para qualquer tráfego, passando pelo gateway do ppp0.
sudo ip route add default via 10.10.1.1 dev ppp0 table custom
curl ip.bsd-unix.net
me dá o IP da minha casa e curl --interface ppp0 ip.bsd-unix.net
me fornece o IP remoto da minha VPN. Funciona!
Ainda assim, estou interessado em saber porque o ping passou pelo ppp0 corretamente o tempo todo.