Não é uma resposta, mas uma tentativa de restringir o problema:
Eu reproduzi uma configuração similar, um pouco simplificada, e o mascaramento funciona bem. Parece assim:
+-----------+ +----------+
| o--|--o o--ptya | ptyb--o |
| veth0b | veth0a ppp0 | ppp0 |
| 10.0.0.1 | 10.0.0.254 10.0.3.1 | 10.0.3.2 |
| | | |
| ns0 | | ns1 |
+-----------+ +----------+
onde a conexão ppp foi feita da seguinte maneira (o segundo pppd no namespace ns1, é claro):
socat PTY,link=/tmp/ptya PTY,link=/tmp/ptyb
sudo pppd 'readlink /tmp/ptya' noauth nocrtscts xonxoff local maxfail 0 10.0.3.1:10.0.3.2 persist
sudo pppd 'readlink /tmp/ptyb' noauth nocrtscts xonxoff local maxfail 0 10.0.3.2:10.0.3.1 persist
Mascaramento:
sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
De ns0, ping 10.0.3.2
aparece em tcpdump -i ppp0
no namespace principal como
IP 10.0.3.1 > 10.0.3.2: ICMP echo request, id 23836, seq 1, length 64
IP 10.0.3.2 > 10.0.3.1: ICMP echo reply, id 23836, seq 1, length 64
então o mascaramento claramente funciona, e não é a interface ppp que está de alguma forma agindo.
Coisas que eu tentaria em seguida:
-
Replique a configuração socat / ppp em seu servidor e veja se ele funciona ou se há algo diferente que o impeça de funcionar.
-
Eu originalmente tentei fazer uma conexão PPPoE com o espaço de usuário
pppoe
, mas isso é suficientemente complicado que o pppd gerado porpppoe-server
continuou morrendo em mim, e eu ainda não descobri o porquê. Então, se você pode reduzir sua configuração PPPoE para uma configuração similar (e talvez me diga o que você fez), pode-se descobrir se é PPPoE que estraga as coisas de alguma forma. -
Enquanto tentava isso, notei que os scripts fazem muita coisa nos bastidores, se você não for cuidadoso: rotas padrão, atribuições de endereço IP, entrada do iptables e outros itens. Então, eu checo duas vezes se não há regras, rotas ou o que quer que seja na sua configuração, mesmo que você não as tenha colocado lá.