Ответы пользователя по тегу Iptables
  • Как и где правильно прописать свои правила iptables NAT в хост системе в KVM?

    @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...
    Ответ написан