Вопрос или проблема
Я совершенно новичок в сетях Linux и все еще пытаюсь это понять. Извините, если ответ на проблему прост.
У меня есть доступ по SSH к двум физическим узлам, которые находятся в одной сети, давайте назовем их node1 и node2. Сетевое взаимодействие для них настроено с помощью netplan
, и они могут пинговать друг друга.
Конфигурация netplan
для них выглядит следующим образом:
network:
ethernets:
switchports:
match:
name: eno*
bonds:
bond0:
interfaces: [switchports]
mtu: 8900
parameters:
down-delay: 0
lacp-rate: fast
mii-monitor-interval: 100
mode: 802.3ad
transmit-hash-policy: layer2+3
up-delay: 0
vlans:
bond0.12:
id: 12
link: bond0
mtu: 8900
addresses: [10.12.14.12/28]
gateway4: 10.12.14.1
nameservers:
addresses:
- 8.8.8.8
Обратите внимание, что имена bond
и vlan
различны для обоих физических узлов. Я создаю несколько виртуальных машин на каждом физическом узле и хочу, чтобы они могли подключаться друг к другу.
Для этого я попытался создать VLAN и мост с одинаковыми именами на обоих физических узлах и подключить мост к этим виртуальным машинам. После этих изменений netplan
выглядит примерно следующим образом для обоих физических узлов. Обратите внимание, что имена ранее определенных bond
и vlan
все еще различны на обоих физических узлах.
network:
ethernets:
switchports:
match:
name: eno*
bonds:
bond0:
interfaces: [switchports]
mtu: 8900
parameters:
down-delay: 0
lacp-rate: fast
mii-monitor-interval: 100
mode: 802.3ad
transmit-hash-policy: layer2+3
up-delay: 0
vlans:
bond0.12:
id: 12
link: bond0
mtu: 8900
addresses: [10.12.14.12/28]
gateway4: 10.12.14.1
nameservers:
addresses:
- 8.8.8.8
bond0.15:
id: 15
link: bond0
addresses:
- 192.168.10.1/24
routes:
- to: default
via: 192.168.10.1
metric: 100
on-link: true
bridges:
vmbr1:
interfaces: [ bond0.15 ]
parameters:
forward-delay: 0
stp: false
После этого я добавил правило маршрутизации, чтобы разрешить маршрутизацию из нового интерфейса vlan
, но это не сработало.
sudo iptables -A FORWARD -i bond0.15 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -o bond0.15 -j MASQUERADE
Я не уверен, что мне нужно сделать, чтобы виртуальные машины на разных физических узлах могли пинговать друг друга.
Ответ или решение
Понимание подключения виртуальных машин через VLAN между физическими узлами
Создание связи между виртуальными машинами на разных физических узлах с использованием VLAN может показаться сложной задачей, особенно для начинающих администраторов Linux. Однако, с правильным подходом и пониманием настройки сети с использованием Netplan, это можно сделать эффективно. В данном ответе мы обсудим, как правильно настроить VLAN и мосты на ваших физических узлах для достижения этой цели.
1. Обзор конфигурации
У вас уже настроены два физических узла — node1
и node2
. Оба узла могут пинговать друг друга, что указывает на корректную настройку основной сети. Ниже приведены ключевые моменты вашей сети:
- Оба узла используют bonded интерфейс
bond0
на основе нескольких физических интерфейсов. - VLAN с идентификатором
12
и15
настроены на каждом узле. - Для виртуальных машин вы создаете мост
vmbr1
, который использует VLAN15
.
2. Настройка VLAN
Чтобы виртуальные машины на разных физических узлах могли видеть друг друга, необходимо убедиться, что конфигурация VLAN согласована. Следует использовать один и тот же идентификатор VLAN (15
) на обоих узлах. Убедитесь, что вы используете одинаковые IP-адресации, чтобы минимизировать проблемы с маршрутизацией.
Пример конфигурации для обоих узлов:
vlans:
bond0.15:
id: 15
link: bond0
addresses:
- 192.168.10.1/24 # Для node1
# - 192.168.10.2/24 # Для node2
На node2
вы можете назначить IP-адрес 192.168.10.2/24. Это обеспечит, что оба узла находятся в одной подсети, что является обязательным для сетевого взаимодействия.
3. Настройка моста
Убедитесь, что мост vmbr1
корректно настроен на обоих узлах. Он должен быть привязан к VLAN 15
, что обеспечит доступ виртуальным машинам к сети.
Пример конфигурации моста:
bridges:
vmbr1:
interfaces: [bond0.15]
parameters:
forward-delay: 0
stp: false
4. Настройка виртуальных машин
Теперь, когда ви настроили мосты и VLAN, необходимо настроить ваши виртуальные машины. Каждая из них должна быть подключена к мосту vmbr1
. Виртуальные машины должны получать IP-адреса из одной и той же подсети (например, 192.168.10.3 для VM на node1
и 192.168.10.4 для VM на node2
).
5. Проверка маршрутов и IPTables
После того как все настройки завершены, следует убедиться, что правила маршрутизации настроены для разрешения трафика.
- Проверьте, что IPTables настроены на обоих узлах. Убедитесь, что нет блокировок для трафика между VLAN:
sudo iptables -A FORWARD -i bond0.15 -j ACCEPT
sudo iptables -A FORWARD -o bond0.15 -j ACCEPT
- Убедитесь, что включен IPv4-Forwarding:
sudo sysctl -w net.ipv4.ip_forward=1
6. Тестирование соединения
После всех вышеперечисленных шагов, вы можете протестировать соединение между виртуальными машинами:
- Используйте команду
ping
из одной виртуальной машины в другую. - Убедитесь, что файерволы на виртуальных машинах также не блокируют трафик.
Заключение
Настройка VLAN для соединения виртуальных машин на разных физических узлах требует тщательного подхода и понимания сетевой архитектуры. Убедившись, что все VLAN настроены согласованно, и что IPTables не блокирует трафик, вы сможете добиться стабильного и надежного соединения между вашими виртуальными машинами.
Этот процесс может показаться сложным, но четкое понимание каждого шага значительно упрощает работу с сетями Linux. Если возникнут дополнительные вопросы, не стесняйтесь их задавать!