Debian 8 – Обновление Iptables при загрузке

Я в процессе переноса моего «configure openvpn server» с ubuntu 14 на debian 8. До сих пор он хорошо работает, за исключением этого раздела:

# Set up iptables to forward packets for vpn and do this upon startup. echo 'iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT iptables -A FORWARD -j REJECT iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE exit 0' > /etc/rc.local 

Похоже, что debian 8 не использует этот /etc/rc.local поэтому мой сервер vpn не будет правильно перенаправлять трафик после перезагрузки. Мне нужно вручную вызвать этот скрипт или выполнить команды.

Что такое «debian 8 way» для обновления iptables при загрузке?


Обновить

После чтения того, что /etc/rc.local должно работать, я убедился, что разрешения установлены на 755 и обновили сценарий следующим образом:

 /bin/echo "starting..." > /root/rc.local.log /sbin/iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT /sbin/iptables -A FORWARD -j REJECT /sbin/iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE /bin/echo "completed successfully" >> /root/rc.local.log exit 0 

Затем я создал пустой /root/rc.local.log и дал ему 777 разрешений перед перезагрузкой. Файл остался пустым, что заставило меня подумать, что сценарий /etc/rc.local вообще не выполняется.

Способ установки iptables при загрузке Debian используется с помощью пакета iptables-persistent .

Просто установите пакет iptables-persistent , настройте правила iptables, как вы того захотите, а затем запустите netfilter-persistent save . (Обратите внимание, что команда начинается с netfilter а не iptables .)

Для получения дополнительной информации см. Справочную страницу для netfilter-persistent .

Метод сохранения таблиц имеет изменения после Debian 7 (Wheezy). В Wheezy можно сделать что-то вроде: invoke-rc.d iptables-persistent save .

У меня нет окончательного ответа на вопрос, как настроить iptables при загрузке, но rc.local должен работать.

С systemd rc.local обрабатывается /lib/systemd/system/rc-local.service , который автоматически запускается после сети и запускает /etc/rc.local start . Единственным требованием является выполнение исполняемого файла /etc/rc.local :

 chmod 755 /etc/rc.local 

Вам также нужно иметь #!/bin/sh Bin #!/bin/sh в верхней части файла rc.local, чтобы он выполнялся с помощью systemd, иначе вы получите ошибки, например Failed at step EXEC spawning /etc/rc.local: Exec format error в красном при запуске sudo journalctl