Рейтинг:0

Не удается подключить контейнер с мостом к Интернету с помощью сети

флаг pm

у меня есть сервер под управлением Ubuntu 20.04 LTS, подключенный через один физический интерфейс Ethernet к Интернету. Мой prodiver назначил мне статический первичный IP4 (здесь я буду использовать A.A.A.A для этого IP), поэтому мой файл конфигурации systemd-networkd раньше выглядел так (отключил netplan для работы напрямую с systemd-networkd):

# /etc/systemd/сеть/20-enp7s0.сеть
[Соответствовать]
Имя=enp7s0

[Сеть]
LinkLocalAddressing=ipv6
Адрес=А.А.А.А./32
Шлюз=fe80::1
DNS=X.X.X.1
DNS=X.X.X.2

[Маршрут]
Пункт назначения=0.0.0.0/0
Шлюз=ГГГГГ
ШлюзОнлинк=истина

Мой провайдер предлагает добавить к моему серверу дополнительный IP-адрес, который маршрутизируется на тот же интерфейс, что и основной IP. При добавлении этого второго IP-адреса к моему интерфейсу я могу пропинговать его. Поскольку я использую контейнеры systemd-nspawn, я думал об использовании этого дополнительного IP-адреса для предоставления одному из моих контейнеров эксклюзивного статического IP4 (здесь будет использоваться BBB). Было бы здорово сопоставить записи DNS непосредственно с контейнером на моем сервере, в то время как все остальные приложения на сервере по-прежнему используют основной IP-адрес.

Итак, я начал следовать хорошим инструкциям из Arch wiki на systemd-nspawn и systemd-networkd. Я настроил бридж и перенес на него всю адресацию с физического интерфейса:

/etc/systemd/сеть/br0.netdev

[NetDev]
Имя=br0
Вид = мост
MACAddress=xx:xx:xx:xx:xx:xx # то же, что и мой физ. интерфейс

/etc/systemd/сеть/20-br0.сеть

[Соответствовать]
Имя=br0

[Сеть]
LinkLocalAddressing=ipv6
Адрес=А.А.А.А./32
Шлюз=fe80::1
DNS=X.X.X.1
DNS=X.X.X.2

[Маршрут]
Пункт назначения=0.0.0.0/0
Шлюз=ГГГГГ
ШлюзОнлинк=истина

/etc/systemd/сеть/20-enp7s0.сеть

[Соответствовать]
Имя=enp7s0

[Сеть]
Мост=br0

Переадресация IP4 включена:

$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

Я запускаю свой контейнер nspawn со следующей конфигурацией:

/etc/systemd/nspawn/mycontainer.nspawn

[Сеть]
Виртуальный Ethernet=да
Мост=br0

Внутри контейнера (Debian 11 Bullseye) я включил systemd-networkd и использовал следующую конфигурацию для сети:

# /etc/systemd/network/80-container-host0.network
[Соответствовать]
Имя=хост0

[Сеть]
Адрес=B.B.B.B/32
DNS=X.X.X.1
DNS=X.X.X.2

[Маршрут]
Пункт назначения=0.0.0.0/0
Шлюз=ГГГГГ
ШлюзОнлинк=истина

Это результат этой конфигурации. На хосте:

$ ip а

2: enp7s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 состояние UP группа по умолчанию qlen 1000
    ссылка/эфир xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    ссылка/эфир xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    глобальная область действия inet A.A.A.A/32 br0
       valid_lft навсегда
6: vb-mycontainer@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 состояние UP группа по умолчанию qlen 1000
    ссылка/эфир yy:yy:yy:yy:yy:yy brd ff:ff:ff:ff:ff:ff link-netnsid 0

$ networkctl статус -a
1: вот [...]                                  
2: enp7s0                                                            
             Файл ссылки: /usr/lib/systemd/network/99-default.link       
          Сетевой файл: /etc/systemd/network/20-enp7s0.network         
                  Тип: эфир                                          
                 Состояние: порабощено (настроено)
                  Путь: pci-0000:07:00.0                               
                Драйвер: igb                                            
                Поставщик: Корпорация Intel                              
                 Модель: I210 Gigabit Network Connection                
            Аппаратный адрес: хх:хх:хх:хх:хх:хх                              
                   MTU: 1500 (минимум: 68, максимум: 9216)                      
  Длина очереди (Tx/Rx): 8/8                                            
      Автосогласование: да                                            
                 Скорость: 1 Гбит/с                                          
                Дуплекс: полный                                           
                  Порт: тп                                             
     Политика активации: до                                             
   Требуется для онлайн: да                                            
3: бр0                                                                 
               Файл ссылки: /usr/lib/systemd/network/99-default.link       
            Сетевой файл: /etc/systemd/network/20-br0.network            
                    Тип: мост                                         
                   Состояние: маршрутизируемый (настроен)
                  Водитель: мост                                         
              Аппаратный адрес: хх:хх:хх:хх:хх:хх                              
                     MTU: 1500 (минимум: 68, максимум: 65535)                     
           Задержка вперед: 15 с                                            
              Привет Время: 2 с                                             
                 Максимальный возраст: 20 лет                                            
             Время старения: 5 минут                                           
                Приоритет: 32768                                          
                     СТП: нет                                             
  Версия многоадресного IGMP: 2                                              
    Длина очереди (Tx/Rx): 1/1                                            
                 Адрес: А.А.А.А.                                                  
                 Шлюз: ГГГГ (Juniper Networks)                  
                          fe80::1 (Juniper Networks)                     
                     DNS: X.X.X.1                                    
                          ХХХ2                                                           
       Политика активации: до                                             
     Требуется для онлайн: да                                            
6: vb-мойконтейнер                                              
             Файл ссылки: /usr/lib/systemd/network/99-default.link
          Сетевой файл: н/д                                     
                  Тип: эфир                                   
                 Состояние: деградированное (неуправляемое) 
                Водитель: вет                                    
            Аппаратный адрес: гг:гг:гг:гг:гг:гг                       
                   MTU: 1500 (минимум: 68, максимум: 65535)              
  Длина очереди (Tx/Rx): 1/1                                     
      Автосогласование: нет                                      
                 Скорость: 10 Гбит/с                                  
                Дуплекс: полный                                    
                  Порт: тп                                      
               Адрес: fe80::xxxx:xxxx:xxxx:xxxx               
     Политика активации: до                                      
   Требуется для онлайн: да

$ IP-маршрут
по умолчанию через Y.Y.Y.Y dev br0 proto static onlink

И внутри моего контейнера:

# ip а
1: вот: [...]
2: host0@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    ссылка/эфир yy:yy:yy:yy:yy:yy brd ff:ff:ff:ff:ff:ff link-netnsid 0
    область inet B.B.B.B/32 глобальный host0
       valid_lft навсегда
    inet6 fe80::xxxx:xxxx:xxxx:xxxx/64 ссылка на область действия 
       valid_lft навсегда

# статус networkctl -a
1: вот [...]
2: host0                                                                     
                     Файл ссылки: н/д
                  Сетевой файл: /etc/systemd/network/80-container-host0.network
                          Тип: эфир
                         Состояние: маршрутизируемый (настроен)
                    Аппаратный адрес: zz:zz:zz:zz:zz:zz
                           MTU: 1500 (минимум: 68, максимум: 65535)
                         QDisc: нет очереди
  Режим генерации адреса IPv6: eui64
          Длина очереди (Tx/Rx): 1/1
              Автосогласование: нет
                         Скорость: 10 Гбит/с
                        Дуплекс: полный
                          Порт: тп
                       Адрес: B.B.B.B.
                                fe80::хххх:хххх:хххх:хххх
                       Шлюз: ГГГГ
                           DNS: X.X.X.1
                                ХХХ2
             DUID клиента DHCP6: DUID-EN/Vendor: 0000ab117511f183668420370000

17 февраля 19:45:26 mycontainer systemd-networkd[25]: host0: Link UP
17 февраля, 19:45:26 mycontainer systemd-networkd[25]: host0: Получен оператор
17 февраля 19:45:27 mycontainer systemd-networkd[25]: host0: получен IPv6LL

# ip маршрут
по умолчанию через Y.Y.Y.Y dev host0 proto static onlink

Что касается всех других настроек, я придерживаюсь системных значений по умолчанию. Но это не работает, я не могу пинговать от хоста к гостю, а также от гостя к хосту, Интернету или шлюзу, просто получаю Хост назначения недоступен. Так я что-то пропустил здесь? Я не особо разбираюсь в сетях и уже потратил много времени на это, но уже извиняюсь за некоторые глупые ошибки, которые мог допустить. Любая подсказка приветствуется. Спасибо!

РЕДАКТИРОВАТЬ:

Я заглянул в таблицу соседей:

Хозяин:

$ IP-адрес соседа
Y.Y.Y.Y dev br0 lladdr 84:c1:c1:76:ae:9b ДОСТУПНО <- шлюз
fe80::f80b:aff:fe80:d92 dev vb-mycontainer ОШИБКА
fe80::6c91:a7ff:fe1f:19a2 dev br0 НЕУДАЧА
fe80::1 dev br0 lladdr 84:c1:c1:76:ae:9b маршрутизатор УСТАРЕВШИЙ
fe80::f80b:aff:fe80:d92 dev br0 lladdr fa:0b:0a:80:0d:92 УСТАРЕВШИЙ

Гость:

$ IP-адрес соседа
fe80::7e10:c9ff:fe21:ed87 dev host0 lladdr 7c:10:c9:21:ed:87 маршрутизатор STALE
fe80::6c91:a7ff:fe1f:19a2 dev host0 НЕУДАЧА
fe80::1 dev host0 lladdr 84:c1:c1:76:ae:9b маршрутизатор STALE

fe80::6c91:a7ff:fe1f:19a2 — это адрес локали ссылки виртуального интерфейса vb-mycontainer на хосте. Итак, я предполагаю, что есть проблема с соединением между гостем и хостом?

Рейтинг:0
флаг pm

Хорошо, я решил проблему самостоятельно. Мне не хватало IP-маршрута в конфигурации моста на хосте для моего контейнера:

# /etc/systemd/сеть/20-br0.сеть
[Соответствовать]
Имя=br0

[Сеть]
LinkLocalAddressing=ipv6
Адрес=А.А.А.А./32
Шлюз=fe80::1
DNS=X.X.X.1
DNS=X.X.X.2

[Маршрут]
Пункт назначения=0.0.0.0/0
Шлюз=ГГГГГ
ШлюзОнлинк=истина

[Маршрут]
Пункт назначения=B.B.B.B/32

А в гостевой системе шлюз — это основной IPv4-адрес хоста (A.A.A.A/32):

# /etc/systemd/network/80-container-host0.network
[Соответствовать]
Имя=хост0

[Сеть]
Адрес=B.B.B.B/32
DNS=X.X.X.1
DNS=X.X.X.2

[Маршрут]
Пункт назначения=0.0.0.0/0
Шлюз=А.А.А.А.
ШлюзОнлинк=истина

Кроме того, для разрешения DNS необходимо более активное разрешение systemd.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.