Atualizando iptables via ddclient

0

TL; DR

Existe algo que eu possa fazer para alterar o iptables do ddclient (com o usuário ddclient)?

A história por trás

Eu tenho um computador que usa dyndns para ser endereçável de fora. Sempre que o provedor emite um novo endereço IP (o que acontece com bastante frequência hoje em dia), o ddclient atualiza a entrada do DNS.

O computador tem algumas regras do iptables baseadas em seu IP público, que obviamente só funcionam enquanto o IP está correto.

Até agora eu tinha um cron job de hora em hora que funcionava assim para manter o iptables atualizado:

./change-iptables-public-ip.sh 'curl ifconfig.me/ip'

Agora as atualizações por hora significam que pode haver um atraso de hora em que o iptables está configurado com o endereço errado. Eu poderia ter feito o trabalho mais frequente (até um minuto), mas eu pensei, que fazer esse tipo de coisa via polling é um desperdício, especialmente, quando o ddclient oferece a possibilidade de executar um script após o ip ter sido alterado. / p>

Então eu inseri isso na minha configuração do ddclient:

postscript=/etc/ddclient/change-iptables-public-ip.sh

Eu também adicionei o bit suid a change-iptables-public-ip.sh , mas sem sucesso. Quando o script é executado pelo ddclient, resulta em:

iptables v1.4.18: can't initialize iptables table 'nat': Permission denied (you must be root)
Perhaps iptables or your kernel needs to be upgraded.

Eu não gosto da idéia de executar o ddclient como root.

Uma idéia que tive até agora foi um processo rodando como root, que escuta em um socket para o novo ip e então dispara as mudanças no iptables. Mas antes de sujar as mãos, quero saber se existem soluções padrão por aí.

    
por Nobody 09.05.2013 / 18:51

1 resposta

2

Desculpe pelo atraso. Estiveram ocupados em outro lugar ...

1) Entre como root e execute visudo

2) Adicione uma linha que se pareça com:

bob ALL = (TODOS) NOPASSWD: /etc/ddclient/change-iptables-public-ip.sh

onde "bob" é a conta da qual o ddclient é executado (você provavelmente precisará experimentar).

3) Edite a linha na sua configuração ddclient para que pareça:

postscript = sudo /etc/ddclient/change-iptables-public-ip.sh

Você provavelmente precisará matar / reiniciar o ddclient. Você precisará experimentar os itens acima para chegar onde funcionará como quiser. Pode ser melhor incorporar o comando sudo em seu script (para comandos específicos) em vez de executar o script inteiro com acesso em nível de raiz.

    
por 11.11.2013 / 14:15