Важно: это заметка, а не how-to.
Попытаюсь поделиться опытом осиливания документации на libvirt, а именно управлением правилами iptables. Всю информацию вычитал на оффициальном сайте здесь и здесь. Документация написана самими разработчиками, потому является на мой взгляд сумбурной и поверхностной в одних местах и слишком углубленной в других.
Моя задача была на первый взгляд простая: разрешить форвардинг входящих ssh-соединений в режиме nat(чит. про nat, isolated, routed...). Но ручное добавление правил быстро ломалось.
Создаем директорию и скрипт /etc/libvirt/hooks/qemu
Расскажем демону о нашем злодействе (а жутко звучит, да?)
# killall -HUP libvirtd
???
PROFIT!!!111
UPD: Ниже неправильное решение(попробуйтеи и увидите интересные оговорки про интерфейсы в создаваемых правилах), хотя информация полезная. Решил всё же оставить здесь.
Все правила хранятся здесь: /etc/libvirt/nwfilter
Создаём файлик allow-forward.xml
Инициируем правило в libvirt
# virsh nwfilter-define allow-forward.xml
Команда добавит в xml ещё несколько сущностей и расскажет libvirt о новой политике.
Надо связать правило и виртуальную машину.
# virsh edit MyMachine
Сохраняем.
# iptables -nvL FORWARD
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
9409 570K libvirt-in all -- * * 0.0.0.0/0 0.0.0.0/0
9409 570K libvirt-out all -- * * 0.0.0.0/0 0.0.0.0/0
9409 570K libvirt-in-post all -- * * 0.0.0.0/0 0.0.0.0/0 154K 291M ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 state RELATED,ESTABLISHED
106K 5647K ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0
14 5378 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0
0 0 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
# iptables -nvL libvirt-out
Chain libvirt-out (1 references)
pkts bytes target prot opt in out source destination
0 0 FO-vnet0 all -- * * 0.0.0.0/0 0.0.0.0/0 [goto] PHYSDEV match --physdev-out vnet0
[ dedup02 /etc/libvirt/nwfilter ] # iptables -nvL FO-vnet0
Chain FO-vnet0 (1 references)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 state NEW,ESTABLISHED ctdir REPLY
Ну вот, задача решена. Хоть и не лёгкий путь, но nwfilter не отключаем в libvirt. Думаю это делается с оглядкой на большие инсталяции, так что пожалуй даже оправдано.
> Создаем директорию и скрипт /etc/libvirt/hooks/qemu
ОтветитьУдалитьНе раскрыта тема с каким правами и тп, да и не запускается он, не подхватывается. Версия может новая
история действительно древняя. Скорее всего там должно быть a+rx, не промахнёшься.
Удалить