TL; DR
¿Hay algo que pueda hacer para cambiar iptables de ddclient (con el usuario ddclient)?
La historia detras
Tengo una computadora que usa dyndns para ser direccionable desde afuera. Cada vez que el proveedor emite una nueva dirección IP (lo que sucede con frecuencia en estos días) ddclient actualiza la entrada dns.
La computadora tiene algunas reglas de iptables basadas en su IP pública que, por supuesto, solo funcionará mientras la IP sea correcta.
Hasta ahora tenía un trabajo cron por hora que funcionaría así para mantener actualizadas las iptables:
./change-iptables-public-ip.sh `curl ifconfig.me/ip`
Ahora, las actualizaciones por hora significaban que podría haber un retraso de una hora cuando iptables se configura con la dirección incorrecta. Podría haber hecho el trabajo más frecuente (hasta un minuto), pero pensé que hacer este tipo de cosas a través del sondeo es un desperdicio, especialmente cuando ddclient ofrece la posibilidad de ejecutar un script después de que se haya cambiado la ip.
Así que inserté esto en mi configuración de ddclient:
postscript=/etc/ddclient/change-iptables-public-ip.sh
También agregué el bit suid a change-iptables-public-ip.sh
, pero fue en vano. Cuando el script es ejecutado por ddclient, resulta en:
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.
No me gusta la idea de ejecutar ddclient como root.
Una idea que tenía hasta ahora era un proceso que se ejecutaba como root, que escucha en un socket la nueva ip y luego desencadena los cambios en iptables. Pero antes de ensuciarme las manos quiero saber si hay soluciones estándar por ahí.
fuente
Respuestas:
Perdón por el retraso. He estado ocupado en otro lugar ...
1) Inicie sesión como root y ejecute visudo
2) Agregue una línea que se vea así:
bob ALL = (ALL) NOPASSWD: /etc/ddclient/change-iptables-public-ip.sh
donde "bob" es la cuenta desde la que se ejecuta ddclient (es probable que tengas que experimentar).
3) Edite la línea en su configuración de ddclient para que se vea así:
postscript = sudo /etc/ddclient/change-iptables-public-ip.sh
Es probable que necesite matar / reiniciar ddclient. Tendrá que experimentar con lo anterior para llevarlo a donde funcione de la manera que lo desee. Puede ser mejor incrustar el comando sudo en su script (para comandos específicos) en lugar de ejecutar el script completo con acceso de nivel raíz.
fuente