Настройка двух сетевых карт с разными IP-адресами в Netplan – Ubuntu 22.04

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

Настройка двух сетевых карт для разных сетей на одной машине

Вопрос

Как правильно настроить две сетевые карты в разных сетях? Цель состоит в том, чтобы весь трафик возвращался с интерфейса, на котором он был получен. Если кто-то может предоставить пример того, как должна выглядеть таблица маршрутизации, я смогу создать конфигурацию Netplan на этой основе.

Обновление 1

  • Добавлена схема оборудования
  • Упрощена config.yaml, что решило проблему с ping из eno2
  • По-прежнему не возвращает трафик корректно с использованием iperf

Обновление #2

  • Небольшое уточнение в цели (две сетевые карты, две подсети)
  • Запрос примера вывода ip r s в качестве целевого.

Проблема

Обе сетевые карты доступны, однако возвращающий трафик маршрутизируется только через одну из них. Попытка указать таблицы в netplan не сработала, но, вероятно, я ошибаюсь в политике маршрутизации в конфигурации YAML.

Целевая конфигурация

Я хотел бы, чтобы весь трафик был разделен между сетевыми картами. Они не должны быть изолированными, но если трафик идет по сети LAB, он должен оставаться на объединенной сетевой карте, а если по сети MGMT, то оставаться на устройстве eno2.

┌─────────────────┐      ┌──────────────────────┐
│   y.y.y.0/24    │      │   x.x.x.0/24         │
│   mgmt network  │      │   lab network        │
└─┬───────────────┘      └─┬──┬─────────┬──┬────┘
  │                        │┼┼│         │┼┼│
  │                        │┼┼│         │┼┼│
  │                        │┼┼│      ┌─=┴==┴=─────┐ 
  │                        │┼┼│      | file server|
  │                        │┼┼│      └────────────┘
┌─=───────────────────────=┴==┴=─────────────────┐
│ y.y.y.105               x.x.x.71               │
│                                                │
│              GPU Server                        │
└────────────────────────────────────────────────┘

Схема оборудования

Это топология соответствующего оборудования в стеке.

Схема сетевой архитектуры

Конфигурация Netplan YAML

#50-netplan-config.yaml
network:
  version: 2
  ethernets:
    # сеть управления y.y.y.0/24
    eno2:
      dhcp4: no
      dhcp6: no
      addresses: [y.y.y.105/24]
      routes:
        - to: default
          via: y.y.y.1

      nameservers:
        addresses: [y.y.y.1, 1.1.1.1, 1.0.0.1]
        search: [local, lab]

  bridges:
    # сеть lab x.x.x.0/24
    br0:
      dhcp4: no
      dhcp6: no
      interfaces: [bond0]
      addresses: [x.x.x.71/24]

      nameservers:
        addresses: [x.x.x.1, 1.1.1.1, 1.0.0.1]
        search: [local, lab]

  bonds:
    bond0:
      interfaces: [enp129s0f0, enp129s0f1, enp129s0f2, enp129s0f3]
      parameters:
        lacp-rate: fast
        mode: 802.3ad
        transmit-hash-policy: layer3+4
        mii-monitor-interval: 100
        ad-select: bandwidth

    # интерфейсы для bond0
    enp129s0f0:
      dhcp4: no
      dhcp6: no

    enp129s0f1:
      dhcp4: no
      dhcp6: no

    enp129s0f2:
      dhcp4: no
      dhcp6: no

    enp129s0f3:
      dhcp4: no
      dhcp6: no

Тестирование

Попробуйте выполнить ping с сервера

Работает на eno2

PING 1.1.1.1 (1.1.1.1) from y.y.y.105 eno2: 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=52 time=10.3 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=52 time=10.4 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=52 time=10.3 ms

--- 1.1.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 10.309/10.324/10.353/0.020 ms

Работает на br0

$ ping -c 3 -I br0 1.1.1.1
PING 1.1.1.1 (1.1.1.1) from x.x.x.71 br0: 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=52 time=10.1 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=52 time=10.3 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=52 time=10.6 ms

--- 1.1.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 10.102/10.339/10.573/0.192 ms

Проверьте таблицу маршрутизации

$ ip route show
default via y.y.y.1 dev eno2 proto static
blackhole 10.1.228.192/26 proto 80
x.x.x.0/24 dev br0 proto kernel scope link src x.x.x.71
y.y.y.0/24 dev eno2 proto kernel scope link src y.y.y.105
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown

Тест сети MGMT

Тест интерфейса eno2 с iperf и nload. Результаты показывают, что трафик на сервер GPU принимается на правильном интерфейсе, но возвращающий трафик идет через bond0 (br0).

❯ iperf -c y.y.y.105 -r -f G
------------------------------------------------------------
Client connecting to y.y.y.105, TCP port 5001
TCP window size:  128 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:  128 KByte (default)
------------------------------------------------------------
[  1] local 172.30.30.229 port 60716 connected with y.y.y.105 port 5001 (icwnd/mss/irtt=14/1448/5000)
[ ID] Interval       Transfer     Bandwidth
[  1] 0.00-10.31 sec  0.150 GBytes  0.015 GBytes/sec
[  2] local 172.30.30.229 port 5001 connected with x.x.x.71 port 53436
[ ID] Interval       Transfer     Bandwidth
[  2] 0.00-10.12 sec  0.171 GBytes  0.017 GBytes/sec
$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:  128 KByte (default)
------------------------------------------------------------
[  1] local y.y.y.105 port 5001 connected with 172.30.30.229 port 58370
[ ID] Interval       Transfer     Bandwidth
[  1] 0.0000-10.2382 sec   161 MBytes   132 Mbits/sec
------------------------------------------------------------
Client connecting to 172.30.30.229, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[ *2] local x.x.x.71 port 36346 connected with 172.30.30.229 port 5001 (reverse)
[ ID] Interval       Transfer     Bandwidth
[ *2] 0.0000-10.2344 sec   151 MBytes   124 Mbits/sec
$ nload eno2

Device eno2 [y.y.y.105] (1/1):
=============================================================================================================
Incoming:
                         ######################
                         ######################
                         ######################
                         ######################                           Curr: 1.49 kBit/s
                         ######################                           Avg: 20.73 MBit/s
                         ######################                           Min: 1.02 kBit/s
                         ######################                           Max: 190.57 MBit/s
                         ######################                           Ttl: 676.95 MByte
Outgoing:




                                                                          Curr: 0.00 Bit/s
                                                                          Avg: 0.00 Bit/s
                                                                          Min: 0.00 Bit/s
                                                                          Max: 0.00 Bit/s
                                                                          Ttl: 9.99 MByte

замечание: nload br0 и nload bond0 открывают одно и то же устройство в окне nload

$ nload br0

Device bond0 (1/15):
==============================================================================================================
Incoming:
                                                                           Curr: 3.84 kBit/s
                                                                           Avg: 192.22 kBit/s
                                                                           Min: 952.00 Bit/s
                                                 .|.                       Max: 1.81 MBit/s
                                            .###################|.         Ttl: 7.30 MByte
Outgoing:
                                            ######################
                                            ######################
                                            ######################
                                            ######################
                                            ######################
                                            ######################         Curr: 21.80 kBit/s
                                            ######################         Avg: 21.51 MBit/s
                                     .      ######################         Min: 4.16 kBit/s
                         |.|###||#####|.....######################         Max: 162.19 MBit/s
                        |#########################################         Ttl: 694.43 MByte

Тест сети Lab

Тем временем сетевой трафик идет, как и ожидалось, на интерфейсе br0.

❯ iperf -c x.x.x.71 -r -f G
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:  128 KByte (default)
------------------------------------------------------------
------------------------------------------------------------
Client connecting to x.x.x.71, TCP port 5001
TCP window size:  128 KByte (default)
------------------------------------------------------------
[  1] local 172.30.30.229 port 59950 connected with x.x.x.71 port 5001 (icwnd/mss/irtt=14/1448/3000)
[ ID] Interval       Transfer     Bandwidth
[  1] 0.00-10.12 sec  0.159 GBytes  0.016 GBytes/sec
[  2] local 172.30.30.229 port 5001 connected with x.x.x.71 port 33270
[ ID] Interval       Transfer     Bandwidth
[  2] 0.00-10.20 sec  0.167 GBytes  0.016 GBytes/sec
$ iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:  128 KByte (default)
------------------------------------------------------------
[  1] local x.x.x.71 port 5001 connected with 172.30.30.229 port 59950
[ ID] Interval       Transfer     Bandwidth
[  1] 0.0000-10.1135 sec   163 MBytes   135 Mbits/sec
------------------------------------------------------------
Client connecting to 172.30.30.229, TCP port 5001
TCP window size: 85.0 KByte (default)
------------------------------------------------------------
[ *2] local x.x.x.71 port 33270 connected with 172.30.30.229 port 5001 (reverse)
[ ID] Interval       Transfer     Bandwidth
[ *2] 0.0000-10.2124 sec   171 MBytes   140 Mbits/sec
$ nload br0

Device bond0 (1/12):
=============================================================================================================
Incoming:
                        ######################
                        ######################
                        ######################
                        ######################                            Curr: 3.85 kBit/s
                        ######################                            Avg: 44.04 MBit/s
                        ######################                            Min: 3.85 kBit/s
                        ######################     .                      Max: 174.40 MBit/s
                        ######################.|#||##.|###|||||||.        Ttl: 3.35 GByte
Outgoing:
                                            ######################
                                            ######################
                                            ######################
                                            ######################
                                            ######################        Curr: 13.89 kBit/s
                                            ######################        Avg: 47.11 MBit/s
                          .  ....  .   ..   ######################        Min: 4.16 kBit/s
                         .##########||####||######################.       Max: 165.06 MBit/s
                        .##########################################       Ttl: 2.86 GByte

Если я правильно прочитал вашу схему, GPU и файловый сервер находятся в одной L2 сети, поэтому маршрутизация на самом деле не требуется.

Политика LACP на коммутаторе должна быть настроена с учетом L4 для хеширования, чтобы различные потоки передачи нацеливались на различных участников объединения. Я предполагаю, что у вас есть несколько TCP/UDP сеансов, иначе нагрузка не будет вообще распределяться.

Ответ или решение

Конфигурация двух сетевых интерфейсов (NIC) с различными IP-адресами в Netplan на Ubuntu 22.04

Введение

Настройка двух сетевых интерфейсов на одном сервере является частой задачей для системных администраторов. В контексте вашего вопроса настроим два интерфейса для работы в разных сетях, обеспечив при этом возвращение всего входящего трафика через тот же интерфейс, через который он был получен. В данной статье будет представлен сценарий конфигурации и пример routing table (маршрутизационной таблицы), а также рассмотрение соответствующего файла конфигурации Netplan.

Описание проблемы

Ваша цель – настроить NIC eno2 для управления (MGMT) сетью с адресом y.y.y.105/24, а также создать мост br0 для подключения к лабораторной сети с адресом x.x.x.71/24. Каждое устройство должно обрабатывать трафик по своему интерфейсу, а не использовать общий. Это требует настройки правильных маршрутов и таблиц маршрутизации.

Конфигурация Netplan

Файл конфигурации Netplan должен находиться по пути /etc/netplan/50-netplan-config.yaml. Вот как может выглядеть ваш файл:

network:
  version: 2
  ethernets:
    # Управляющая сеть
    eno2:
      dhcp4: no
      dhcp6: no
      addresses: [y.y.y.105/24]
      gateway4: y.y.y.1
      nameservers:
        addresses: [y.y.y.1, 1.1.1.1, 1.0.0.1]
        search: [local, lab]

  bridges:
    br0:
      dhcp4: no
      dhcp6: no
      interfaces: [bond0]
      addresses: [x.x.x.71/24]
      nameservers:
        addresses: [x.x.x.1, 1.1.1.1, 1.0.0.1]
        search: [local, lab]

  bonds:
    bond0:
      interfaces: [enp129s0f0, enp129s0f1, enp129s0f2, enp129s0f3]
      parameters:
        mode: 802.3ad
        mii-monitor-interval: 100

Структура маршрутизации

После настройки сетевых интерфейсов и перезагрузки службы Netplan, вы можете проверить маршрутизацию с помощью команды:

ip route show

Ожидаемый вывод должен быть следующим:

default via y.y.y.1 dev eno2 proto static
x.x.x.0/24 dev br0 proto kernel scope link src x.x.x.71
y.y.y.0/24 dev eno2 proto kernel scope link src y.y.y.105
  • default via y.y.y.1 dev eno2 — маршрут по умолчанию для трафика управления.
  • x.x.x.0/24 dev br0 — локальный маршрут для лабораторной сети через мост.

Тестирование конфигурации

  1. Пингование: Проверьте, что вы можете пинговать устройства в обеих сетях с помощью команды:

    ping -c 3 -I eno2 1.1.1.1  # для управленческой сети
    ping -c 3 -I br0 1.1.1.1  # для лабораторной сети
  2. Использование iperf: Проверьте скорость соединений, запустив сервер и клиент:

    • На стороне сервера:
      iperf -s
    • На стороне клиента:
      iperf -c y.y.y.105 -r

Это должно показать, что трафик обрабатывается через соответствующие интерфейсы.

Заключение

Настройка двух сетевых интерфейсов с различными IP-адресами в Ubuntu 22.04 требует точного определения конфигурации в файле Netplan и корректного маршрута. Следуя представленному примеру и инструкциям, вы сможете обеспечить правильное разделение трафика между двумя сетями, что позволит избежать возможных проблем с маршрутизацией.

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

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