Как и где правильно прописать свои правила iptables NAT в хост системе в KVM?

Добрый день,

есть сервер Centos 6.6, на нём установлена KVM/libvirt, есть гостевые системы.
По привычке прописываю свои нужные правила для NAT в /etc/sysconfig/iptables.

Но при перезагрузке сервера добавляются автоматически правила
MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24,
которые перезаписывают мои.

Пожскажите пожалуйста как можно прописать свои правила и чтобы только они работали
при перезагрузке системы?
  • Вопрос задан
  • 3324 просмотра
Пригласить эксперта
Ответы на вопрос 4
@ZoomZoom
Ответ написан
Комментировать
@mureevms
Не работал с KVM, но логика подсказывает, что надо найти скрипты, которые перезатирают кастомные правила. Если найти не получается или сделать надо быстро, то надо написать свой скрипт, который будет пере-перезаписывать правила.
Осуществить можно написав скрипт, в котором сначала скидываются все правила и затем загружаются нужные. Вставить данный скрипт в автозагрузку после старта KVM.
Ответ написан
Комментировать
Используете nat для доступа гостей к сети?
https://libvirt.org/firewall.html
Ответ написан
Комментировать
@TSerge Автор вопроса
Решение вопроса заключается в этом:

Libvirtd hook для применения правил iptables

При установке виртуализации KVM/qemu и использовании NAT существует проблема применения правил /etc/sysconfig/iptables. При загрузке системы на ранней стадии стартует сервис iptables: /etc/rc3.d/S08iptables -> ../init.d/iptables

Далее в конце загрузки стартует libvirtd: /etc/rc3.d/S08iptables -> ../init.d/iptables который применяет свои default правила, если используется NAT для гостевых ОС.

Выглядеть это может так:
MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24

В итоге правила NAT не работают так, как это применялось в /etc/sysconfig/iptables.

Ниже указано решение использования hooks в libvirtd для перезапуска сервиса iptables после старта libvirtd:

1. mkdir /etc/libvirt/hooks
2. vi /etc/libvirt/hooks/network

#!/bin/bash

# Libvirt hook, see: https://www.libvirt.org/hooks.html
# for iptables reloading after host booted

if [ "$2" = "started" ]; then

/etc/init.d/iptables restart

fi;

exit 0;

3. chmod 755 /etc/libvirt/hooks/network

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

Описание libvirt hooks:

www.libvirt.org/hooks.html
libvirt.org/formatnwfilter.html
wiki.libvirt.org/page/Networking#NAT_forwarding_.2...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы