Как правильно настроить сетевой мост в netplan для KVM с использованием статического внешнего IP-адреса на Ubuntu 24?

Я хочу обсудить следующую конфигурацию сетевых настроек на моем сервере: <br/> <br/> <pre><code class="bash"># cat /etc/netplan/*.yaml
---
network:
  version: 2
  renderer: networkd
  ethernets:
    enp1s0f0:
      dhcp4: yes

network:
    ethernets:
        ens1:
            dhcp4: true
    version: 2


# ls  /etc/netplan/
01-netcfg.yaml 50-cloud-init.yaml</code></pre> <br/> <br/> Также мне известны параметры сети, предоставляемые моим провайдером: <br/> ``` <br/> Network: ххх.ххх.ххх.0/27 <br/> Netmask: 255.255.255.224 <br/> Gateway: ххх.ххх.ххх.1 <br/> Broadcast: ххх.ххх.ххх.31 <br/> VLAN: 102 <br/> ``` <br/> <br/> Проблема возникла, когда я пытался добавить мост (bridge): в результате этого сервер перестал быть доступен по публичному IP. <br/> <br/> <pre><code class="bash">bridges:
   br0:
   interfaces: [enp1s0f0]
   dhcp4: yes</code></pre> <br/> <br/> Как мне правильно настроить конфигурацию, чтобы сервер был доступен извне и одновременно обеспечить доступ в сеть для виртуальных машин?
  • 16 декабря 2024 г. 23:23
Ответы на вопрос 2
Чтобы настроить сетевой мост с использованием статического внешнего IP-адреса на Ubuntu 24, вам нужно создать корректную конфигурацию для Netplan. Ваша цель — создать мост (bridge), который позволит виртуальным машинам использовать внешний IP-адрес и обеспечит доступ к сети.

Вы предоставили конфигурацию, которая содержит некоторые ошибки и не учитывает статический IP-адрес. Ниже приведен пример правильной конфигурации, основанной на ваших данных о сети и предположении, что ваш внешний интерфейс — `enp1s0f0`.

### Пример конфигурации Netplan

1. Откройте файл конфигурации Netplan, например, `01-netcfg.yaml` или любой другой файл в `/etc/netplan/`.
2. Измените конфигурацию следующим образом:

```yaml
network:
  version: 2
  renderer: networkd
  ethernets:
    enp1s0f0:
      dhcp4: no
      addresses:
        - ххх.ххх.ххх.2/27  # Укажите ваш статический IP-адрес
      gateway4: ххх.ххх.ххх.1
      nameservers:
        addresses:
          - 8.8.8.8  # Укажите ваши DNS-серверы
          - 8.8.4.4
      # Включите VLAN, если это необходимо
      # vlans:
      #   vlan102:
      #     id: 102
      #     link: enp1s0f0

  bridges:
    br0:
      interfaces: [enp1s0f0]
      dhcp4: no  # Используйте статическую конфигурацию для моста
      addresses:
        - ххх.ххх.ххх.2/27  # Укажите тот же статический IP
      gateway4: ххх.ххх.ххх.1
      nameservers:
        addresses:
          - 8.8.8.8
          - 8.8.4.4
      parameters:
        stp: false
      mtu: 1500
```

### Уточнения:
- Замените `ххх.ххх.ххх.2` на ваш фактический статический IP-адрес от провайдера.
- Не забудьте указать правильные адреса DNS, если у вас есть собственные предпочтения.
- Если вы используете VLAN, проверьте, нужно ли вам включать ее настройку в конфигурацию.
- В данном случае и интерфейс `enp1s0f0`, и мост `br0` используют один и тот же статический IP-адрес. Это может потребовать дополнительной настройки в зависимости от вашей сети.

### Применение конфигурации
После редактирования конфигурационного файла в `/etc/netplan/` выполните следующую команду, чтобы применить изменения:

```bash
sudo netplan apply
```

### Проверка
Проверьте, работает ли ваш сервер и доступен ли он с вашего публичного IP-адреса. Если возникают проблемы, вы можете проверить статус сетевых интерфейсов и ошибки с помощью команд `ip a` и `journalctl -u systemd-networkd`. 

### Следующие шаги
1. Настройте виртуальные машины на использование моста `br0` для обеспечения доступа в интернет.
2. Убедитесь, что у вас настроены правила брандмауэра, если это влияет на доступ к сети.

Если у вас будут дополнительные вопросы или проблемы, пожалуйста, дайте знать.
попробуйте 
renderer: NetworkManager
вместо
renderer: networkd

Перед этим сделайте apt install network-manager (если Ubuntu серверной версии, то по умолчанию этого пакета вроде нет).
Дело в том, что эти два бэкенда (renderer'ы) по разному назначают MAC-адрес бриджу. NetworkManager отдаёт бриджу физический адрес включённого в бридж сетевого адаптера, а networkd генерирует что-то рандомное. DHCP на рандомный MAC выдаёт какой-то новый IP-адрес (вы не знаете какой), а вы пытаетесь стучаться на старый.
А ещё базовый сетевой интерфейс уходит в DOWN, а бридж остаётся UP.

Есть и более надёжный вариант - прописать на бридже статический IP-адрес, а не ждать от DHCP.

Кстати...
enp1s0f0:
...
ens1:
У вас какое имя сетевого интерфейса, реально существующего в системе? enp1s0f0 или ens1? Вы добавляете в бридж enp1s0f0, но это точно правильно? Посмотрите командой ip a
Похожие вопросы