Я пытаюсь вызвать iptables-restore в сценарии systemd.service. У меня есть несколько правил, которые требуют поиска DNS. Я включил After = bind9.service в раздел Unit для брандмауэра. Однако systemd считает, что bind9 запускается, когда он разветвляется, а не когда named готов к обслуживанию запросов. Он запускает iptables-restore до того, как сможет разрешить имя хоста, и поэтому завершается неудачно. Вот соответствующий раздел системного журнала:
Dec 13 21:29:02 fw systemd[1]: Started BIND Domain Name Server. Dec 13 21:29:02 fw systemd[1]: Reached target Host and Network Name Lookups. Dec 13 21:29:02 fw systemd[1]: Starting Load iptables Rules... Dec 13 21:29:02 fw systemd[1]: Started Homebridge HomeKit bridge. Dec 13 21:29:02 fw systemd[1]: Starting OpenBSD Secure Shell server... Dec 13 21:29:02 fw sh[1841]: iptables-restore v1.6.0: host/network `example.com' not found Dec 13 21:29:02 fw sh[1841]: Error occurred at line: 24 Dec 13 21:29:02 fw sh[1841]: Try `iptables-restore -h' or 'iptables-restore --help' for more information. Dec 13 21:29:02 fw named[1838]: starting BIND 9.10.3-P4-Ubuntu <id:ebd72b3> -f -4 -u bind
Вот служебный файл:
[Unit] Description=Load iptables Rules After=bind9.service [Install] WantedBy=multi-user.target WantedBy=network-online.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/sh -c "/sbin/iptables-restore < /etc/iptables.up.rules"
Как лучше всего выполнить команду iptables-restore при загрузке, но подождать, пока named будет активным?