Назад | Перейти на главную страницу

Iptables на Centos 7 не работает после перезагрузки

Я использую Centos 7, удалил новый брандмауэр и установил классическую службу iptables. У меня есть гостевая машина с Debian 8.1 и статическим внешним ip.

Я делаю:

echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=1
iptables -P FORWARD ACCEPT

и:

iptables -t nat -I PREROUTING -d *external_ip* -i enp2s0 -j DNAT --to-destination 192.168.122.72
iptables -t nat -I POSTROUTING -s 192.168.122.72 -o enp2s0 -j SNAT --to-source *external_ip*
iptables -P FORWARD ACCEPT

И моя гостевая система начинает работать и становится доступной в Интернете.

Затем я выполняю сервис iptables save, перезапускаю хост-машину, и моя гостевая машина становится недоступной в сети. Но когда я проверяю правила iptables (iptables -t nat -L --line-numbers), я вижу, что все мои правила там. Когда я сбрасываю все правила iptables и снова вхожу в них - он снова начинает работать до новой перезагрузки.

Мой друг предложил написать сценарий sh с этими правилами и добавить его в rclocal, но, может быть, есть лучшее решение?

Если вы пишете свои собственные правила NAT для своих виртуальных машин, а не позволяете libvirt управлять ими, тогда виртуальная сеть, к которой подключены виртуальные машины, должна быть настроена как направлен сеть, а не сеть NAT.

Вы можете исправить это с помощью virsh net-edit <network> и измените:

  <forward mode='nat'/>

кому:

  <forward mode='route'/>

(И с firewalld это прекрасно; у меня уже есть одна такая машина.)

Если вы хотите использовать старые службы iptables, предназначенные для firewalld, вы можете сделать следующее

iptables-save > /etc/sysconfig/iptables

Таким образом, правила, которые вы вставили вручную, сохраняются и применяются во время загрузки, вам необходимо убедиться, что старые службы iptables включены во время загрузки.