iptables - adiciona regra para interface antes de aparecer

2

Neste momento estou usando o /etc/rc.local para adicionar algumas regras do iptables no meu roteador Linux na inicialização, mas algumas das regras não são adicionadas. Presumo que isso seja porque a interface ainda não surgiu.

Isto é o que eu tenho lá:

sudo /sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sudo /sbin/iptables -A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo /sbin/iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT

Eu acho que a interface ppp0 deve demorar um pouco para aparecer na inicialização e o iptables pode se recusar a adicionar a regra, já que a interface ppp0 não existe. Existe uma maneira de forçar o iptables a adicionar a regra? Eu pensei em verificar isso antes de introduzir um loop no script para esperar que a interface existisse antes de adicionar as regras.

Eu também observei que o iptables não remove a regra quando a interface desaparece e volta depois que a regra já foi adicionada (o que é um bom comportamento no meu caso).

    
por CallumA 05.06.2014 / 18:51

1 resposta

2

Use post-up em /etc/network/interfaces em qualquer distro baseada no Debian. Isso permite que você execute o script logo após ter sido criado por ifup . Mais no página man para interfaces .

Nota: post-down pode ser usado para remover as regras, é claro.

E se isso não funcionar, porque o seu sistema exibe o ppp0 por meio de algum script, é possível usar os scripts de gancho nas subpastas *.d de /etc/network correspondentes às ações mencionadas anteriormente. Várias variáveis serão fornecidas a você no script, como IFACE , ADDRFAM etc. As páginas do manual são realmente detalhadas.

Em outra observação, internamente up == post-up e down == post-down , as subpastas corretas seriam if-down.d e if-up.d , respectivamente.

E se você quiser "depurar" esse processo de exibir uma interface declarada em /etc/network/interfaces (ou source d de lá), ifup(8) tem os detalhes. Em particular, você vai querer ifup -nvl (e talvez o nome da interface). Também pode ser executado sem privilégios, porque não faz nada, apenas imita o processo.

Possível ressalva

Isso não funcionará em configurações baseadas no Debian, mas no Network-Manager-driven. Mas com você mencionando um roteador, acho que é improvável que ele seja conduzido pelo Network Manager.

    
por 05.06.2014 / 18:55