Вопрос или проблема
Для моей сети я настроил два VLan (идентификаторы VLan: 1 и 2) на коммутаторе. Моя машина на ubuntu core 22.04.1 подключена к коммутатору через один тегированный порт, который позволяет проходить трафику VLan 1 и VLan 2. Эта машина позже будет хостить контейнеры docker, которые выполняют dhcp, dns, OpenLDAP и т.д. Я хотел бы использовать netplan на своей машине с ubuntu, так как это дает мне красивый обзор моей сетевой конфигурации.
Я хочу достичь:
- иметь IP-адрес 192.168.10.101/24 в VLan 1, который доступен с других хостов в VLan 1
- иметь IP-адрес 192.168.20.101/24 в VLan 2, который доступен с других хостов в VLan 2
- маршрутизация для машины ubuntu к другим хостам в обеих подсетях 192.168.10.0/24 и 192.168.20.0/24 через шлюзы 192.168.10.1 и 192.168.20.1 соответственно
- маршрутизация к шлюзу по умолчанию 192.168.10.1 для подключения машины ubuntu к интернету
Файл /etc/netplan/00-installer-config.yml
выглядит следующим образом:
network:
version: 2
ethernets:
enp5s0:
dhcp4: false
enp6s0:
dhcp4: false
optional: true
vlans:
vlan.1:
id: 1
link: enp5s0
addresses:
- 192.168.10.101/24
nameservers:
addresses:
- 192.168.10.116
routes:
- to: default
via: 192.168.10.1
metric: 100
vlans:
vlan.2:
id: 2
link: enp5s0
addresses:
- 192.168.20.101/32
Вывод ip route
является:
default via 192.168.10.1 dev vlan.1 proto static metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.10.0/24 dev vlan.1 proto kernel scope link src 192.168.10.101
Эта конфигурация (примененная с помощью sudo netplan apply
) дает мне уже очень близко к тому, что я хочу сделать:
- Из машины ubuntu я могу
- ssh в машину в подсети 192.168.10.0/24
- ssh в машину в подсети 192.168.20.0/24
- достигнуть интернета
- С хоста в подсети 192.168.10.0/24 я могу достичь машину ubuntu через 192.168.10.101
- С хоста в подсети 192.168.20.0/24 я могу достичь машину ubuntu через 192.168.10.101
Чего мне не хватает:
- С хоста в подсети 192.168.10.0/24 достичь 192.168.20.101
- С хоста в подсети 192.168.20.0/24 также достичь 192.168.20.101.
Смотря на конфигурацию netplan выше, я предполагаю, что это связано с 192.168.20.101/32
, который не позволяет достигать этот IP с других хостов в обеих подсетях. Я уже пробовал определить адрес с 192.168.20.101/24
, но это привело к тому, что нельзя было достичь ни одного другого хоста в подсети 192.168.20.0/24
из машины ubuntu.
Может кто-то помочь мне выяснить, что я сделал неправильно, что мешает машине ubuntu быть доступной через 192.168.20.101
?
Могу ли я даже сделать это с помощью netplan или мне нужно выполнила некоторые шаги вручную после применения конфигурации?
Я так рад, что нашел решение проблемы! Проблема была в том, что один и тот же MAC-адрес использовался для обоих VLan. Решение, которое сработало для меня, заключалось в создании мостов для VLan. Я раньше читал о (сетевых) мостах, но каждый раз, когда я видел пример, мост использовал только один интерфейс. Для меня это не имело смысла соединять только с одним интерфейсом, так как я ожидал, что у моста будет второй “столб”. В конце концов, оказалось, что это не обязательно, и достаточно определить только один интерфейс:
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: false
match:
macaddress: a8:5e:45:56:38:65
name: enp5s0
set-name: eth0
enp6s0:
dhcp4: false
optional: true
bridges:
br0:
interfaces: ["vlan.1"]
addresses:
- 192.168.10.101/24
nameservers:
addresses:
- 192.168.10.116
routes:
- to: default
via: 192.168.10.1
br1:
interfaces: ["vlan.2"]
addresses:
- 192.168.20.101/24
vlans:
vlan.1:
id: 1
link: eth0
accept-ra: no
vlan.2:
id: 2
link: eth0
accept-ra: no
Смотря на новую конфигурацию netplan, 192.168.20.101/32
можно вернуть обратно в 192.168.20.101/24
. Кроме того, я переименовал интерфейс enp5s0
в eth0
(потому что мне нравится старая номенклатура больше).
Теперь ip route
выводит следующее:
default via 192.168.10.1 dev br0 proto static
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.10.0/24 dev br0 proto kernel scope link src 192.168.10.101
192.168.20.0/24 dev br1 proto kernel scope link src 192.168.20.101
Я подтверждаю выводы @Marc P, хотя для меня это работало при удалении маршрутов и серверов имен в определениях мостов.
Ответ или решение
Настройка двух Тегированных VLAN с помощью Netplan на Ubuntu Core 22.04.1
Введение
Настройка VLAN (Virtual Local Area Network) в вашей сети помогает разделить трафик для различных сегментов, повышая безопасность и управляемость. В этой статье мы рассмотрим, как настроить две тегированные VLAN на системе Ubuntu Core 22.04.1 с использованием инструмента сетевой конфигурации Netplan.
Условия Задачи
Ваша задача заключается в следующем:
- Назначить IP-адрес 192.168.10.101/24 для VLAN 1, чтобы он был доступен для других устройств в этой подсети.
- Назначить IP-адрес 192.168.20.101/24 для VLAN 2, чтобы он был доступен для других устройств в соответствующей подсети.
- Обеспечить маршрутизацию Ubuntu-машины к другим устройствам в подсетях 192.168.10.0/24 и 192.168.20.0/24 через шлюзы 192.168.10.1 и 192.168.20.1 соответственно.
- Настроить маршрутизацию по умолчанию через шлюз 192.168.10.1 для доступа к интернету.
Начальная Настройка Netplan
Вы начали с файла конфигурации /etc/netplan/00-installer-config.yml
, соответствующего следующим параметрам:
network:
version: 2
ethernets:
enp5s0:
dhcp4: false
enp6s0:
dhcp4: false
optional: true
vlans:
vlan.1:
id: 1
link: enp5s0
addresses:
- 192.168.10.101/24
nameservers:
addresses:
- 192.168.10.116
routes:
- to: default
via: 192.168.10.1
metric: 100
vlan.2:
id: 2
link: enp5s0
addresses:
- 192.168.20.101/32
Проблема и Ее Решение
Проблемы в вашей начальной конфигурации заключались в следующем:
-
Неправильное назначение маски для VLAN 2: использование
/32
не позволяло другим устройствам в подсети 192.168.20.0/24 обращаться к услуге на 192.168.20.101. -
Наличие одного и того же MAC-адреса на двух VLAN затрудняло доступ.
Как вы обнаружили, использование мостов (bridge) решило эту проблему. Это позволяет VLAN-ам функционировать правильно, обеспечивая маршрутизацию между ними.
Обновленная Конфигурация с Использованием Мостов
После изменения конфигурации на использование мостов, ваш файл должен выглядеть следующим образом:
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: false
match:
macaddress: a8:5e:45:56:38:65
name: enp5s0
set-name: eth0
enp6s0:
dhcp4: false
optional: true
bridges:
br0:
interfaces: ["vlan.1"]
addresses:
- 192.168.10.101/24
nameservers:
addresses:
- 192.168.10.116
routes:
- to: default
via: 192.168.10.1
br1:
interfaces: ["vlan.2"]
addresses:
- 192.168.20.101/24
vlans:
vlan.1:
id: 1
link: eth0
accept-ra: no
vlan.2:
id: 2
link: eth0
accept-ra: no
Итоговая Проверка конфигурации
После применения настроек с помощью команды sudo netplan apply
, выполните команду ip route
для проверки:
ip route
Ожидаемый вывод:
default via 192.168.10.1 dev br0 proto static
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.10.0/24 dev br0 proto kernel scope link src 192.168.10.101
192.168.20.0/24 dev br1 proto kernel scope link src 192.168.20.101
После этих изменений ваша Ubuntu машина будет доступна как из подсети VLAN 1, так и из VLAN 2, а также сможет выходить в интернет.
Заключение
Использование мостов в сочетании с Netplan для настройки VLAN на Ubuntu обеспечивает более гибкую и продуктивную сетевую конфигурацию. Убедитесь, что все устройства в ваших подсетях правильно настроены для маршрутизации, и ваша сеть будет работать бесперебойно.