LINUX.ORG.RU
ФорумAdmin

Помогите настроить public bridge

 , , , ,


0

1

Доброго времени суток!

Свежий Debian 10. Поставил kvm, libvirt и ravada в качестве веб морды. Нужна помощь в настройке public bridge. Все что делается по мануалам (в основном, англоязычным) - не работает. Что конкретно делалось в подробностях описывать не имеет смысла, главное текущее состояние и вопрос «что делать».

На физическом сервере 2 сетевых, обе смотрят в один LAN 192.168.1.0/24 (адреса .2 и .200 соответственно, статические). На вторую сетевуху приклеен br0. Задача сделать так чтобы виртуалки могли получать IP адрес напрямую от DHCP 192.168.1.1 и быть полноценными компьютерами локальной сети.

Предпринятые действия: br0 создан по мануалам. Смена сетевому интерфейсу «nat» на «bridge» редактированием виртуалки через ravada ничего не дает (хотя в VirtualBox на винде это всегда работало), в результате получилось 2 интерфейса с адресами от виртуального NAT (192.168.122.19 и еще какой-то). Пробовал ставить

<forward mode='bridge'/>

в virsh net-edit default, результата не видел. Последнее что сделано - virsh edit TestVM1, где одну из виртуальных сетевух переделал на согласно https://wiki.libvirt.org/page/Networking#Debian.2FUbuntu_Bridging, но тоже толку 0.

Текущее состояние. В виртуальной машине 2 интерфейса - ens3 (NAT, пусть будет, подключаюсь по SSH) и ens9 в идеале - DHCP. В реале DHCP уходил в таймаут и адрес не назначался, я переделал в статику (192.168.1.201). Теперь пинг с виртуальной машины на 192.168.1.1 не идет, интернет на виртуалке через NAT есть.

interfaces хоста

auto lo br0 enp4s0 enp10s0
iface lo inet loopback

allow-hotplug enp4s0
iface enp4s0 inet static
        address 192.168.1.2
        netmask 255.255.255.0
        broadcast 192.168.1.255
        network 192.168.1.0
        gateway 192.168.1.1

iface enp4s0 inet6 manual
        pre-up /sbin/modprobe -q ipv6 ; /bin/true

iface br0 inet static
        address 192.168.1.200
        netmask 255.255.255.0
        broadcast 192.168.1.255
        network 192.168.1.0
        bridge_ports enp10s0
        bridge_stp off
        bridge_maxwait 0

iface enp10s0 inet manual

ifconfig хоста

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp10s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
    link/ether XX:XX:XX:XX:XX:f3 brd ff:ff:ff:ff:ff:ff
3: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether XX:XX:XX:XX:XX:a3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.2/24 brd 192.168.1.255 scope global enp4s0
       valid_lft forever preferred_lft forever
    inet6 XXXX::XXX:XXXX:XXXX:23a3/64 scope link
       valid_lft forever preferred_lft forever
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether XX:XX:XX:XX:XX:71 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.200/24 brd 192.168.1.255 scope global br0
       valid_lft forever preferred_lft forever
5: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether XX:XX:XX:XX:59:b3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
6: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
    link/ether XX:XX:XX:XX:59:b3 brd ff:ff:ff:ff:ff:ff
17: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr0 state UNKNOWN group default qlen 1000
    link/ether fe:54:00:41:81:36 brd ff:ff:ff:ff:ff:ff
    inet6 XXXX::XXXX:XX:XXXX:8136/64 scope link
       valid_lft forever preferred_lft forever
18: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UNKNOWN group default qlen 1000
    link/ether XX:XX:XX:XX:49:71 brd ff:ff:ff:ff:ff:ff
    inet6 XXXX::XXXX:XX:XXXX:4971/64 scope link
       valid_lft forever preferred_lft forever

interfaces хоста

auto lo
iface lo inet loopback

auto ens3
allow-hotplug ens3
iface ens3 inet dhcp

auto ens9
#в идеале DHCP но не работает
#allow-hotplug ens9
iface ens9 inet static
        address 192.168.1.201
        netmask 255.255.255.0
        broadcast 192.168.1.255
        network 192.168.1.0
#        gateway 192.168.1.1

ifconfig хоста

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether XX:XX:XX:XX:81:36 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.19/24 brd 192.168.122.255 scope global dynamic ens3
       valid_lft 2047sec preferred_lft 2047sec
    inet6 XXXX::XXXX:ff:fe41:8136/64 scope link
       valid_lft forever preferred_lft forever
3: ens9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether XX:XX:XX:XX:49:71 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.201/24 brd 192.168.1.255 scope global ens9
       valid_lft forever preferred_lft forever
    inet6 XXXX::XXXX:XX:fea7:4971/64 scope link
       valid_lft forever preferred_lft forever

Нужна помощь.

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

brctl show br0

bridge name     bridge id               STP enabled     interfaces
br0             8000.fe5400a74971       no              vnet1

вроде как vnet1 это оно, второй интерфейс виртуалки Про networks, пардон, не понял. virsh net-edit default стандартный

  <name>default</name>
  <uuid>390e8e23-d751-4dbd-92fc-2f17ff0f6a22</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:ab:59:b3'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>```

**virsh edit TestVM1**
```    <interface type='network'>
      <mac address='XX:XX:00:41:81:36'/>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <interface type='bridge'>
      <mac address='XX:XX:00:a7:49:71'/>
      <source bridge='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
    </interface>```
Dima_228 ()
Ответ на: комментарий от Dima_228

Я конечно могу врать, но имхо в рамках libvirt все делается по отдельности. Отдельные networks и их добавляем в VM. Во всяком случае мне этого хватает. Хз что делает libvirt. Правда, не изучал. Предпочитаю следовать её идеи.
А если просто qemu-kvm запускаем, то тут ручками в коммандпромпт прописываем параметры для запуска.

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

То есть то что в interfaces в br0 прописано bridge_ports enp10s0 , но при этом его нет в brctl show br0 это не есть нормально?

Да, ручками можно, но я хочу GUI по образу и подобию Oracle Virtualbox к которому я привык, но с нормальной виртуализацией (KVM) и в консольном Linux сервере без иксов. Ravada немного глючная, собираюсь параллельно еще пару аналогов поставить и испытать.

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

То есть то что в interfaces в br0 прописано bridge_ports enp10s0 , но при этом его нет в brctl show br0 это не есть нормально?

Абсолютно верно. Но с учетом deb10 простите не помогу. Может это уже не правильно и надо как-то по другому делать. Не смотря ни на что не хочу 10-ку пока. Даже на поддиванном и то не хочу.

anc ★★★★★ ()
Последнее исправление: anc (всего исправлений: 2)
Ответ на: комментарий от anc

Вот почему и обращаюсь за помощью, потому что судя по мануалам в интернете все обязано работать.

Да, десятка непривычная, iptraf переименован в iptraf-ng, ifconfig и ifup / ifdown удалили, приходится привыкать к новым командам или ставить алиасы, но тут я повелся на тех кто молится на обновления, хотя я спокойно старые debian’ы юзаю до тех пор пока не сталкиваюсь с тем что кто-то решил удалить репозитории и надо танцевать с бубном чтобы доставить или обновить какой-то софт…

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

Ну в конце концов вам ничего не мешает настроить «по старинке» и проверить что работает. Это так лирика. Тот же libvirt так же можно считать «гуйней». А собственно чем оно и является хоть даже и из консоли, отдельной прослойкой. Насколько правильно это? Скорее нет, чем да. Но приходиться иногда и всякой фигней обмазываться. Плакали кололись, кушаем кактус. Но в проде лучше так не делать. Это удобно для десктопа.

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

Ну опять же ставил когда-то на VPS под Linux VirtualBox + веб морду к нему (название не помню) чисто ради эксперимента, винду на гостевую ОС, работало более-менее, лагов не было но я не никогда не настраивал public bridge, там обычный nat по дефолту был… С Ravada уже вижу пару багов понимая что так оно работать не должно.

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

Не поверите, но слово Ravada я первый раз в этой теме увидел. :) Но общая проблема не в этом, а в том что у вас физический интерфейс в бридж «не собирается». Вот это проблема которая не связана ни с libvirt ни с Ravada. Чистая физика хоста без всяких извращений.
Должно быть как-то так:

brctl show
bridge name	bridge id		STP enabled	interfaces
br0		8000.52540054258d	no		eth0

Это без поднятия доп интерфейсов. eth0 обычная физика (не совсем физика это с виртуалки, но суть одна).

anc ★★★★★ ()
Последнее исправление: anc (всего исправлений: 2)
Ответ на: комментарий от anc

Абсолютно верно. Но с учетом deb10 простите не помогу. Может это уже не правильно и надо как-то по другому делать

сиране systemd, всё гребёт под себя, но не очень умеет

в случае сложных конфигов приходится переходить на systemd-networkd или network-manager

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

попробуй убрать iface enp10s0 inet manual вдруг поможет

если нет, вот пример твоего моста для network-manager

 nmcli con add type bridge con-name br0 ifname br0
 nmcli con mod br0 connection.autoconnect yes ipv4.method manual ipv4.addresses 192.168.1.200/24 ipv6.method ignore

 nmcli con add type bridge-slave con-name br0-enp10s0 ifname enp10s0 master br0
 nmcli con mod br0-enp10s0 connection.autoconnect yes
router ★★★★★ ()
Ответ на: комментарий от router

На физическом сервере 2 сетевых, обе смотрят в один LAN 192.168.1.0/24 (адреса .2 и .200 соответственно, статические)

так, стоп, это не круто. я не уверен, как это может работать. зачем тебе на хосте 2 интерфейса в одну и ту же сеть? либо объединяй их в bonding/teaming и уже его в бридж, либо на бридже тебе адрес не нужен.

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

Свершилось

bridge name     bridge id               STP enabled     interfaces
br0             8000.000475e42ff3       yes             enp10s0
                                                        vnet1
virbr0          8000.525400ab59b3       yes             virbr0-nic
                                                        vnet0

Проблема действительно была в том что физический интерфейс не висел в строчке br0. Почему - не знаю, но путем шаманства в interfaces переставил enp10s0 выше br0, до этого он был ниже а его туда запхал webmin, через который я собственно и создавал мост. Из виртуалки появился доступ в LAN, второй итерацией в госте сменил статику на DHCP и адрес действительно был выдан главным роутером сети. Сейчас еще уберу из виртуалки первый интерфейс, он не нужен, и посмотрю как оно в реале будет работать включая после перезагрузки.

попробуй убрать а кто бы его тогда инициализировал?

Что такое nmcli я никогда не слышал и слышать как-то желания нет когда работают другие варианты по которым в сети больше инфы.

Dima_228 ()
Ответ на: комментарий от router

Ну работает, и веб сервер на обоих адресах отвечает. 2 интерфейса потому что:

  1. в серве 2 сетевухи, лень вынимать вторую
  2. если из-за ковыряний с мостами что-то ёкнется то главный интерфейс останется жить через который я смогу зайти по SSH и посмотреть что почём.
  3. этот сервак сейчас стоит за NAT’ом (за главным роутером) но по хорошему для того чтобы не пробрасывать порты и иметь реальные IP адреса в логах, а не 192.168.1.1 в будущем он той сетевухой будет воткнут в провайдерскую сеть, а второй - в LAN, но для этого на нем еще надо будет настроить DHCP сервер.
Dima_228 ()
Ответ на: комментарий от router

Тут не теплее не холоднее (относительно конечно). Локалка пойдет с первого интерфейса. Второй при обращении может создать много неудобств, а может и не создаст если это только для локального общения. Это уже отдельный разговор зачем мосту назначили адрес.

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

2. Для ыкспрементов. Старое доброе, крон ребут, с возвратом оригинального конфига. В киске это лучше из каробки сделано, но в онтопике как-то так удобнее всего получаеться, хоть и костыльно, зато надежно. Вы и так правили один! конфиг, хз что после ребута будет. Ваша идея с двумя интерфейсами не имеет смысла.

anc ★★★★★ ()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от Dima_228

этот сервак сейчас стоит за NAT’ом (за главным роутером) но по хорошему для того чтобы не пробрасывать порты и иметь реальные IP адреса в логах, а не 192.168.1.1

Может не надо дурью маяться с snat на роутере? С какого фига у вас адреса 192.168.1.1 а не реальные? Или у вас все в разы сложнее ? Вроде по тому что распарсил, такой фигни быть не должно. Не вы первый, не вы последний, использующий dnat в бытовом понятии. dnat меняет только dst адрес в пакете, но не src.

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

Роутер имеет IP адрес от провайдера, если сервер стоит за роутером - «снаружи» его видно будет только проброской портов, а при проброске на сервере будет логгироваться IP роутера вместо IP пользователя. Пока экспериментирую, о том чтобы сервер втыкать в сеть провайдера и ставить заодно роутером локальной сети уже сейчас - речь пока не идет, пока не уверен в стабильности.

Потому 2 интерфейса, первому будет изменен адрес на внешний (статика) и в него будет воткнут кабель от провайдера. Пока эти 2 локальных адреса никакую проблему не создают.

Меня пока бесит другая мелочь. На гостевой машине (Debian 10 из коробки, только базовые пакеты + sshd) ssh стартует с сильным опозданием, пара минут.

ssh: connect to host 192.168.1.102 port 22: Connection refused

Сейчас с этим пытаюсь разобраться.

P.S. а откуда хостинг-провайдеры берут готовые образы, чистая ось, с LAMP’ом и так далее? Предустановка 1 раз + создание образа из диска виртуалки? Лень же клацать всю установку заново если надо создать пустую виртуалку для теста чего-нибудь.

P.S.2. кто такая киска? сиська (Cisco) чтоли?

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

В логе нифига нет кроме десятков рестартов sshd Это, конечно, оффтоп в этой теме но может кто подскажет

Nov 11 02:10:09 debian systemd[1]: Startup finished in 4.015s (kernel) + 1min 37.847s (userspace) = 1min 41.862s.
Nov 11 02:10:09 debian systemd[1]: ssh.service: Service RestartSec=100ms expired, scheduling restart.
Nov 11 02:10:09 debian systemd[1]: ssh.service: Scheduled restart job, restart counter is at 1.
Nov 11 02:10:09 debian systemd[1]: Stopped OpenBSD Secure Shell server.
Nov 11 02:10:09 debian systemd[1]: Starting OpenBSD Secure Shell server...
Nov 11 02:11:39 debian systemd[1]: ssh.service: Start-pre operation timed out. Terminating.
Nov 11 02:11:39 debian systemd[1]: ssh.service: Control process exited, code=killed, status=15/TERM
Nov 11 02:11:39 debian systemd[1]: ssh.service: Failed with result 'timeout'.
Nov 11 02:11:39 debian systemd[1]: Failed to start OpenBSD Secure Shell server.
Nov 11 02:11:39 debian systemd[1]: ssh.service: Service RestartSec=100ms expired, scheduling restart.
Nov 11 02:11:39 debian systemd[1]: ssh.service: Scheduled restart job, restart counter is at 2.
Nov 11 02:11:39 debian systemd[1]: Stopped OpenBSD Secure Shell server.
Nov 11 02:11:39 debian systemd[1]: Starting OpenBSD Secure Shell server...
Nov 11 02:12:25 debian kernel: [  238.446582] random: crng init done
Nov 11 02:12:25 debian kernel: [  238.446593] random: 7 urandom warning(s) missed due to ratelimiting
Nov 11 02:12:25 debian systemd[1]: Started OpenBSD Secure Shell server.

Это установка из коробки, я толком на госте ничего не делал.

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

Меня пока бесит другая мелочь. На гостевой машине (Debian 10 из коробки, только базовые пакеты + sshd) ssh стартует с сильным опозданием, пара минут.

на любой тащем-то. это особенность новых версий openssh, они хотят слишком много энтропии, в результате взлетает несколько минут

как workaround, ставь haveged или другой генератор энтропии. на хосте скорее всего не происходит, т.к. ядро автоматом подхватило аппаратный генератор из процессора

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

Роутер имеет IP адрес от провайдера, если сервер стоит за роутером - «снаружи» его видно будет только проброской портов

Не портов, а dnat, где меняется ip и порт назначения. Но src остается тем же. Прилетело src 1.1.1.1:1234 dst 2.2.2.2:5678, dnat меняет сокет назначения на 192.168.1.201:9012
Итого что у наc изменилось? Было:
src 1.1.1.1:1234 dst 2.2.2.2:5678
стало
src 1.1.1.1:1234 dst 192.168.1.201:9012
Ответ благодаря записям в conntrack улетит
dst 1.1.1.1:1234 src 2.2.2.2:5678

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

P.S. а откуда хостинг-провайдеры берут готовые образы, чистая ось, с LAMP’ом и так далее? Предустановка 1 раз + создание образа из диска виртуалки? Лень же клацать всю установку заново если надо создать пустую виртуалку для теста чего-нибудь

либо шаблоны, либо installation server ( например, cobbler ) с конфигом для ответов для инсталлятора

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

Потому 2 интерфейса, первому будет изменен адрес на внешний (статика) и в него будет воткнут кабель от провайдера. Пока эти 2 локальных адреса никакую проблему не создают.

или ты её не видишь, т.к. роутер умеет в stp

когда ты подключишь кабель от другого провайдера, трафик будет идти не через bridge ( ebtables ), а через форвардинг ( iptables ). его придётся в явном виде разрешать и настраивать

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

а откуда хостинг-провайдеры берут готовые образы, чистая ось, с LAMP’ом и так далее?

Готовят для себя любимых. Разве не понятно? Вы ещё спросите откуда поставщики мобил берут готовые образы для установки на смартафоны. Или поставщики ноутов с шиндой, почему она именно в такой сборке?

ssh стартует с сильным опозданием, пара минут.

Энтропия. Впрочем вам уже выше ответили. Есть ещё старый не секьюрный вариант, только я вам не говорил, использовать /dev/urandom именно натуральный urandom а не линки на него с random

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

это особенность новых версий openssh И снова 2 рационализатора заменили одного диверсанта? Есть такой принцип «не трогай то что работает». Только недавно ругался с одними [ч]удаками, которые умудрились отключить на стороне сервера поддержку старых версий клиента, не убедившись что новые версии клиента работают на всех версиях Android…

Да, на хосте все в порядке.

Не портов, а dnat Проверил сниффером, действительно сохраняется IP отправителя. А я всегда думал что там маппинг портов. Окей, концепция меняется, можно пробросить 22, 80, 443 и что еще надо и забыть

haveged Поставил на гостя, ребут - порядок

его придётся в явном виде разрешать и настраивать Не проблема, iptables нормально управляется большинством панелек, и скорее всего webmin тоже умеет. Хотя я с iptables обычно имею дело через vestacp.

Dima_228 ()