TL; DR

Что я могу сделать, чтобы изменить iptables с ddclient (с пользователем ddclient)?

История позади

У меня есть компьютер, который использует dyndns для адресации извне. Всякий раз, когда провайдер выдает новый IP-адрес (что случается довольно часто в наши дни), ddclient обновляет запись DNS.

На компьютере есть некоторые правила iptables, основанные на его общедоступном IP-адресе, которые, конечно, будут работать только при правильном IP-адресе.

До сих пор у меня была почасовая работа cron, которая работала бы так, чтобы поддерживать iptables в актуальном состоянии:

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

Теперь почасовые обновления означают, что может быть часовая задержка, когда iptables настроен с неверным адресом. Я мог бы сделать работу более частой (до минуты), но я подумал, что делать подобные вещи с помощью опроса - пустая трата времени, особенно когда ddclient предлагает возможность выполнить скрипт после изменения ip.

Поэтому я вставил это в мой конфиг ddclient:

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

Я также добавил бит suid в change-iptables-public-ip.sh , но безрезультатно. Когда скрипт выполняется ddclient, это приводит к:

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.

Мне не нравится идея запуска ddclient от имени пользователя root.

До сих пор у меня была идея, что процесс, выполняющийся от имени пользователя root, прослушивает сокет для нового ip, а затем запускает изменения в iptables. Но прежде чем испачкать руки, я хочу услышать, есть ли там стандартные решения.

1 ответ1

2

Извините за задержку. Были заняты в другом месте ...

1) Войдите в систему как root и запустите visudo

2) Добавьте строку, которая выглядит следующим образом:

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

где "bob" - это учетная запись, с которой запускается ddclient (вам, вероятно, придется поэкспериментировать).

3) Измените строку в вашей конфигурации ddclient так, чтобы она выглядела следующим образом:

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

Скорее всего, вам нужно будет убить / перезапустить ddclient. Вам нужно будет поэкспериментировать с вышеизложенным, чтобы получить его там, где он будет работать так, как вы этого хотите. Возможно, лучше встроить команду sudo в свой сценарий (для определенных команд), а не запускать весь сценарий с правами доступа root.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .