- Вопрос или проблема
- Ситуация
- Возможное решение
- Возможность №1
- Возможность №2
- Ответ или решение
- Введение в VLAN и MAC-адреса
- Пошаговая конфигурация
- 1. Подготовка
- 2. Настройка Netplan
- 3. Применение конфигурации Netplan
- 4. Проверка состояния интерфейсов
- 5. Решение проблем с DHCP
- 6. Использование системного журнала для диагностики
- Заключение
Вопрос или проблема
У меня запущена виртуальная машина Ubuntu 20.04 на OpenStack с одним транковым портом, имеющим несколько подпортов из одной сети, который сопоставляется с одним родительским интерфейсом с несколькими подсетями. Например, если подсеть 192.168.64.0/24
, у меня есть IP-адрес родительского интерфейса (IP VM) 192.168.64.100
и несколько подпортов, таких как 192.168.64.101, 192.168.64.102
с разными VLAN ID. Сначала я попытался вручную настроить подсети с помощью следующей команды:
ubuntu@kp-proxy:~$ sudo ip link add link ens3 name ens3.101 type vlan id 101
ubuntu@kp-proxy:~$ sudo ip link set dev ens3.101 address fa:16:3e:ac:11:40
ubuntu@kp-proxy:~$ sudo ip link set ens3.101 up
ubuntu@kp-proxy:~$ sudo dhclient ens3.101
Однако в приведенном выше случае dhclient застревал навсегда, поэтому я вручную изменил /etc/netplan/50-cloud-init.yaml
, чтобы использовать MAC-адрес в качестве идентификатора для DHCP. Обновленный файл выглядит следующим образом. Теперь, когда я применяю Netplan, хотя команда не кажется застрявшей в команде dhclient, я вижу, что у подсети также есть тот же MAC-адрес, что и у родительского интерфейса, поэтому IP-адрес не получает от DHCP-сервера OpenStack.
Файл 50-cloud-init.yaml
network:
version: 2
renderer: networkd
ethernets:
ens3:
dhcp4: true
macaddress: fa:16:3e:b1:2b:16
mtu: 1450
vlans:
ens3.101:
link: ens3
id: 101
macaddress: fa:16:3e:ac:11:40
dhcp4: yes
dhcp-identifier: mac
Вывод ip addr:
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast state UP group default qlen 1000
link/ether fa:16:3e:b1:2b:16 brd ff:ff:ff:ff:ff:ff
inet 192.168.64.100/24 brd 192.168.64.255 scope global dynamic ens3
valid_lft 85261sec preferred_lft 85261sec
inet6 fe80::f816:3eff:feb1:2b16/64 scope link
valid_lft forever preferred_lft forever
3: ens3.101@ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000
link/ether fa:16:3e:b1:2b:16 brd ff:ff:ff:ff:ff:ff
inet6 fe80::f816:3eff:feb1:2b16/64 scope link
valid_lft forever preferred_lft forever
Как правильно настроить VLAN для Ubuntu 20.04, я проверял на centos-8.4
с помощью приведенной выше команды, и это, похоже, сработало, и я смог получить подсеть с IP-адресом и смог пинговать с других машин к обоим интерфейсам.
Пожалуйста, объясните, почему вам нужно больше MAC-адресов на одном устройстве. Если вам нужно несколько динамически назначенных IP-адресов для нескольких интерфейсов одного устройства, используйте решение №2 ниже. Но IP-адрес каждого интерфейса должен находиться в раздельной IP-сети, а не в одной и той же сети, как вы предложили (192.168.64.0/24). Достаточно одного DHCP-сервера с несколькими DHCP-областями, назначенными на более чем одну IP-сеть, в решении №2, одна область для одной IP-сети.
Специальные настройки IP для каждого узла в одной и той же IP-сети могут быть решены с помощью резервирования IP на DHCP-сервере.
Ситуация
Может быть, я не прав, пожалуйста, исправьте меня. Но я думаю, что это ваше недоразумение, касающееся VLAN и IP-интерфейсов.
VLAN – это настройка, относящаяся к уровню 2 (L2) модели OSI. Она работает с кадрами данных, тегированием 802.1Q и MAC-адресами. Тегирование VLAN разделяет одну плоскую L2 сеть на несколько L2 сетей, которые могут работать независимо на одной и той же физической инфраструктуре. Это как разделить один сетевой коммутатор на несколько отдельных коммутаторов. Коммутаторы могут быть соединены через L3 маршрутизатор. В этом случае L2 разделение (вещательные домены и т.д.) сохраняется, но сети могут общаться через маршрутизатор. Маршрутизатор может фильтровать IP-коммуникацию, блокировать вещи и выполнять другие полезные действия.
Вы написали:
Например, если подсеть 192.168.64.0/24, у меня есть IP-адрес родительского интерфейса (IP VM) 192.168.64.100 и несколько подпортов, таких как 192.168.64.101, 192.168.64.102 с разными VLAN ID.
VLAN обычно используются для разделения целых IP-сетей друг от друга, но не для разделения отдельных IP-адресов в одной (той же) IP-сети!!! Это означает, что один VLAN должен быть подключен к одной IP-сети следующим образом (пример):
- VLAN 10 <–> 192.198.110.0/24
- VLAN 20 <–> 192.198.120.0/24
- VLAN 300 <–> 192.198.5.0/24
- и т.д.
IP-сети и адреса находятся на уровне 3 модели OSI. Это более высокий уровень, и в большинстве концепций IP-сеть находится “внутри” L2 сети, т.е. внутри VLAN.
В этой концепции обычно требуется создать маршрутизатор для меж-VLAN маршрутизации с несколькими интерфейсами, каждый из которых находится в одном VLAN. Пример:
- eth0.10, VLAN 10, IP 192.168.110.1
- eth0.20, VLAN 20, IP 192.168.120.1
- eth0.300, VLAN 300, IP 192.168.5.1
Подпорты, о которых вы упомянули (192.168.64.101, 192.168.64.102 …), не могут находиться в отдельных VLAN, если они находятся в одной IP-сети. Это перевернутая концепция VLAN. Я упоминал пример о разделенных коммутаторах. Если вы разделяете один коммутатор на несколько виртуальных коммутаторов, а затем подключаете все эти коммутаторы к одной IP-сети, вы теряете разделение. Нет смысла в разделении коммутаторов, если они взаимосвязаны через одну и ту же IP-сеть и один и тот же вещательный домен.
Любой сетевой узел, включая ПК, виртуальную машину или маршрутизатор меж-VLAN, не может иметь более одного IP-интерфейса в одной и той же IP-сети или подсети, потому что в этом случае не существует правила, чтобы сообщить узлу, какой из интерфейсов одного уровня одной сети должен использоваться для общения с узлом-соседом в той же сети.
Возможное решение
Возможность №1
Вообще не используйте VLAN. Используйте одну IP-сеть с несколькими IP-узлами. Один узел – это ваш хост, второй узел – это ваша первая виртуальная машина, третий узел – ваша вторая VM и т.д. Точный один IP-интерфейс на вашем хосте нужен, чтобы иметь возможность общаться со всеми виртуальными машинами.
Возможность №2
- Создайте несколько (L2) VLAN. Создайте несколько (L3) IP-сетей и назначьте одну на одну: VLAN на IP-сеть.
- Создайте маршрутизатор меж-VLAN на вашем хосте. Создайте больше IP-интерфейсов и настройте каждый из них на один VLAN. Смотрите выше на мой список с интерфейсами eth0.10, eth.20…
- Включите маршрутизацию IP на вашем хосте.
- Назначьте один IP-интерфейс каждой из ваших VM. Каждая VM будет находиться в отдельной IP-сети и отдельном VLAN. ВМ смогут общаться друг с другом, только если маршрутизатор на вашем хосте это разрешит.
Ответ или решение
Для настройки VLAN на Ubuntu 20.04 с использованию разных MAC-адресов для одной сети, необходимо учитывать несколько аспектов, касающихся конфигурации сетевых интерфейсов и работы с VLAN. Рассмотрим, как правильно установить и настроить VLAN с разными MAC-адресами, используя вашу текущую ситуацию как пример.
Введение в VLAN и MAC-адреса
VLAN (Virtual Local Area Network) позволяет разделить одну физическую сеть на несколько виртуальных, что может повысить безопасность и управляемость сети. Как правило, один VLAN соответствует одной подсети IP. Важно помнить, что использование нескольких MAC-адресов на одном устройстве в одной и той же подсети может привести к конфликтам и проблемам с DHCP.
Пошаговая конфигурация
1. Подготовка
Убедитесь, что у вас установлены необходимые пакеты. Используйте следующую команду для установки пакетов для управления сетевыми интерфейсами:
sudo apt update
sudo apt install vlan
2. Настройка Netplan
Исходя из вашей конфигурации, вам необходимо изменить файл Netplan, чтобы правильно настроить VLAN и уникальные MAC-адреса. Вот правильная конфигурация:
network:
version: 2
renderer: networkd
ethernets:
ens3:
dhcp4: true
macaddress: fa:16:3e:b1:2b:16
mtu: 1450
vlans:
ens3.101:
link: ens3
id: 101
dhcp4: yes
dhcp-identifier: mac
macaddress: fa:16:3e:ac:11:40
В данном примере мы настроили базовый интерфейс ens3
и добавили VLAN с идентификатором 101
с уникальным MAC-адресом.
3. Применение конфигурации Netplan
После внесения изменений в файл конфигурации, примените настройки с помощью:
sudo netplan apply
4. Проверка состояния интерфейсов
Используйте команду для проверки состояния интерфейсов:
ip addr
Убедитесь, что интерфейс ens3.101
отображается с правильным MAC-адресом и статусом UP.
5. Решение проблем с DHCP
Если интерфейс не получает IP-адрес через DHCP, это может быть связано с настройками DHCP-сервера. Убедитесь, что сервер DHCP настроен для обслуживания VLAN и позволяет наличие нескольких MAC-адресов. Если DHCP-сервер не поддерживает это, вам следует обратиться к администратору сети для получения IP-адресов по резервированию, если это возможно.
6. Использование системного журнала для диагностики
Если проблемы продолжаются, проверьте системный журнал, чтобы получить более детальную информацию о том, что происходит:
sudo journalctl -u systemd-networkd
Это поможет вам определить потенциальные ошибки или проблемы с конфигурацией.
Заключение
Настройка VLAN в Ubuntu 20.04 требует внимательности и точности. При использовании нескольких MAC-адресов в одной сети важно правильно настраивать DHCP и физические интерфейсы. Следуя указанным шагам, вы сможете успешно настроить несколько VLAN с уникальными MAC-адресами и избежать проблем с сетевым взаимодействием. Помните, что для надежной работы с VLAN желательно иметь разные подсети для каждого VLAN, что облегчит управление и разграничение трафика.