Как настроить VLAN одной сети с разными MAC-адресами в Ubuntu 20.04.

Вопрос или проблема

У меня запущена виртуальная машина 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, что облегчит управление и разграничение трафика.

Оцените материал
Добавить комментарий

Капча загружается...