LINUX.ORG.RU
ФорумAdmin

Firewall-cmd and KVM

 , , , ,


1

1

Всем доброго времени суток. Долго мучался с проблемой проброса портов host-kvm на виртуальную машину через firewall-cmd, и спустя много, очень много времени, я осилил данную задачу. Но, как всегда есть но.
Сами правила я прописываю через firewall-cmd --direct. Правила на FORWARD попадают автоматически в FORWARD_direct, в PREROUTING аналогично. FORWARD_direct записывается правилом в цепочке FORWARD, аналогично с PREROUTING. И вот тут образуется проблема.
Правило FORWARD_direct записывается далеко не первым в списке цепочки FORWARD, изменить положение можно с помощью --direct --passthrough, но после firewall-cmd --reload данная запись пропадает.
Как можно перманентно изменить положение правила в цепочке через firewall-cmd?


firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 1 -o virbr0 -d 192.168.122.100 -j ACCEPT


Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 247 62803 ACCEPT all  — any virbr0 anywhere 192.168.122.0/24 ctstate RELATED,ESTABLISHED
2 130M 10G ACCEPT all  — virbr0 any 192.168.122.0/24 anywhere
3 0 0 ACCEPT all  — virbr0 virbr0 anywhere anywhere
4 0 0 REJECT all  — any virbr0 anywhere anywhere reject-with icmp-port-unreachable
5 3 180 REJECT all  — virbr0 any anywhere anywhere reject-with icmp-port-unreachable
6 0 0 ACCEPT all  — any any anywhere anywhere ctstate RELATED,ESTABLISHED
7 0 0 ACCEPT all  — lo any anywhere anywhere
8 8 488 FORWARD_direct all  — any any anywhere anywhere


Chain FORWARD_direct (1 references)
num pkts bytes target prot opt in out source destination
1 83 9988 ACCEPT all  — any virbr0 anywhere 192.168.122.100

Ответ на: комментарий от infomeh

Используйте напрямую iptables, а не пойми что.

Firewall-cmd меня в принципе на данный момент устраивает, через iptables знаю как это сделать, но хочется всё таки через firewalld.

topotyn
() автор топика

У тебя тупо qemu+kvm, или используешь libvirt? ЕМНИП, libvirt сам добавляет какие-то правила для интерфейса virbr, когда создает его. Надо мануалы читать. Или вообще отказаться от него и настроить обычный, человеческий бридж.

Khnazile ★★★★★
()
Ответ на: комментарий от Khnazile

У тебя тупо qemu+kvm, или используешь libvirt? ЕМНИП, libvirt сам добавляет какие-то правила для интерфейса virbr, когда создает его. Надо мануалы читать. Или вообще отказаться от него и настроить обычный, человеческий бридж.

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

topotyn
() автор топика

Попробуй прочитать документацию к qemu-kvm, там проброс портов решается силами гипервизора. не стоит добавлять своих правил к системным.

Nurmukh ★★★
()

Можно попробовать подход из https://jamielinux.com/docs/libvirt-networking-handbook/index.html

ТЛДР: родные libvirt сети удаляются, как непредсказуемые, после этого руками поднимаются и гвоздями прибиваются бриджи. Имея стабильные бриджи, фаерволь чем хочешь как угодно (у автора чистый iptables, я использую shorewall по старой памяти)

pkuutn
()
Ответ на: комментарий от Nurmukh

Попробуй прочитать документацию к qemu-kvm, там проброс портов решается силами гипервизора. не стоит добавлять своих правил к системным.

Пните пожалуйста на ссылку, или поделитесь примерами команд, буду очень благодарен.

topotyn
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.