LINUX.ORG.RU
ФорумAdmin

Проблемы с настройкой сети для LXC

 , , ,


0

2

Всех приветствую! Имеется сервер (Debian 9), созданный на нём LXC-контейнер, 2 белых адреса. Уже вторые сутки все никак не могу настроить сеть в контейнере, нужно сделать так, чтоб второй адрес принадлежал контейнеру (static адрес). Что у меня получается в итоге: оба адреса принадлежат хост-машине, в контейнере нет инета, хотя все настроено по мануалам из сети. Прилагаю свои конфиги: /etc/network/interfaces

auto lo
	iface lo inet loopback
auto eth0
	iface eth0 inet manual
auto eth0:0
		 iface eth0:0 inet static
			address 145.239.227.60
			netmask 255.255.255.255
auto vmbr0
	 iface vmbr0 inet static
			bridge_ports eth0
			bridge_stp off
			bridge_fd 0
			address 54.36.18.234
			broadcast 54.36.18.255
			netmask 255.255.255.0
			gateway 54.36.18.254

Конфиг контейнера (/var/lib/lxc/test/config)
lxc.include = /usr/share/lxc/config/debian.common.conf
lxc.arch = linux64
lxc.rootfs = /var/lib/lxc/test/rootfs
lxc.rootfs.backend = dir
lxc.utsname = test
lxc.network.type = veth
lxc.network.flags = up
lxc.network.name = eth1
lxc.network.link = vmbr0
lxc.network.veth.pair = veth-01
lxc.network.ipv4 = 145.239.227.60
lxc.network.hwaddr = 52:54:00:a6:cf:12
lxc.network.ipv4.gateway = 145.239.227.255
Вывод команды ifconfig (хост-сервер)
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 52:54:00:a6:cf:12  txqueuelen 1000  (Ethernet)
        RX packets 16474  bytes 1022626 (998.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1502  bytes 147956 (144.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 145.239.227.60  netmask 255.255.255.255  broadcast 145.239.227.60
        ether 52:54:00:a6:cf:12  txqueuelen 1000  (Ethernet)

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 51  bytes 8315 (8.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 51  bytes 8315 (8.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth-01: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::fc8c:10ff:feb9:a1f7  prefixlen 64  scopeid 0x20<link>
        ether fe:8c:10:b9:a1:f7  txqueuelen 1000  (Ethernet)
        RX packets 8  bytes 558 (558.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 10266  bytes 616224 (601.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vmbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 54.36.18.234  netmask 255.255.255.0  broadcast 54.36.18.255
        inet6 fe80::5054:ff:fea6:cf12  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:a6:cf:12  txqueuelen 1000  (Ethernet)
        RX packets 16346  bytes 786104 (767.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1495  bytes 147500 (144.0 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
Вывод ifconfig (контейнер)
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 145.239.227.60  netmask 255.0.0.0  broadcast 145.255.255.255
        inet6 fe80::5054:ff:fea6:cf12  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:a6:cf:12  txqueuelen 1000  (Ethernet)
        RX packets 11066  bytes 664224 (648.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 558 (558.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 3  bytes 198 (198.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3  bytes 198 (198.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
Прошу помощи! Буду очень признателен, если поможете разобраться. Всем добра!


По-опыту лора, тут единицы шарят серьезно в виртуализации, т.к. ручками ниче не крутят. Все ставят панельки, даже дистрибы для виртуализации, через браузер тыкая, немного подправив конфиги, запускают всё это «в продакшен» и забывают лет на 5 че там к чему.

menangen ★★★★★ ()
Ответ на: комментарий от menangen

Я понимаю, но все же хочется разобраться с этим) До этого использовал OVZ, там автоматически все настраивалось, достаточно просто было заполнить конфиг. А тут уже вторые сутки не могу понять, что ему не нравится...

SeecH ()

я очень давно не использовал lxc но выглядит как месиво. Если у тебя сетка бридж то и конфигури как бридж. А так у тебя просто локальный интерфейс сделан и понятно что снаружи не виден. Пробрось порты, будет работать. Мож я и гоню но почитай доку по настройке бриджей с lxc. Может поможет. В докере в этом плане все проще, я обленился и все про lxc забыл.

slapin ★★★★★ ()

Похоже проблема вовсе не в LXC. ^^

Самым очевидным способом доставить внутрь контейнера необходимый адрес, это убрать алиас eth0:0 и выдать его «внутреннему» интерфейсу контейнера. Не забыв указать маску.

inet 145.239.227.60 netmask 255.0.0.0 broadcast 145.255.255.255

выглядит пугающе!

Вот кусок реально работающего конфига lxc-контейнера:

## Networking
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br100
lxc.network.name = eth0
lxc.network.ipv4 = 188.XXX.XXX.XXX/24
lxc.network.ipv4.gateway = 188.XXX.XXX.1

В /etc/network/interfaces br100 выглядит так:

iface eth1 inet static
    address 0.0.0.0
    netmask 0.0.0.0

iface vlan100 inet manual
    vlan-raw-device eth1

iface br100 inet static
    bridge_ports vlan100
    bridge_fd 0
    address 188.XXX.XXX.XXX
    netmask 255.255.255.0
    dns-nameservers 188.XXX.XXX.XXX 188.XXX.XXX.XXX
    up /etc/network/if-up.d/br100.sh

Разница лишь в том, что вместо выделенного интерфейса я использую eth-vlan.

ssh2 ★★★ ()
Последнее исправление: ssh2 (всего исправлений: 1)
Ответ на: комментарий от Einstok_Fair

Принципиально картины это не меняет. Алиас eth0:0 выдан на тот же интерфейс, что включен в бридж

auto vmbr0
	 iface vmbr0 inet static
			bridge_ports eth0

В случае, если для хоста это не работает, то и в контейнере работать не будет. И lxc тут снова не виновен.

ssh2 ★★★ ()
Ответ на: комментарий от Einstok_Fair

- для бриджа алиас?
- или алиас для интерфейса включить в бридж?

Для начала я получил бы больше подробностей от топик-стартера. Например для меня всё еще тайна, который из адресов он считает вторым.

нужно сделать так, чтоб второй адрес принадлежал контейнеру (static адрес)

Если действовать в рамках этой задачи, то достаточно абстрагироваться от адреса бридж-интерфейса и использовать пример из приведённой мной конфигурации. Т.е. убрать алиас, перенеся его адрес на eth0 контейнера. Указать умолчательный маршрут. Всё.

ssh2 ★★★ ()
Последнее исправление: ssh2 (всего исправлений: 2)
Ответ на: комментарий от menangen

Лучше рули в сторону Docker или на крайняк LXD.

Реально самый плохой совет в этом топике. :D

ssh2 ★★★ ()

Что у меня получается в итоге: оба адреса принадлежат хост-машине

Ну правильно, ты же их оба и присвоил хосту: один на бридже, второй на алиасе.

Убирай алиас, его адрес назначай контейнеру.

gasinvein ★★★ ()
Последнее исправление: gasinvein (всего исправлений: 1)
Ответ на: комментарий от gasinvein

Убирай алиас, его адрес назначай контейнеру.

Да, только сомнительно что у него два разных адреса в одной сетке. Это оператор так дал?

Turbid ★★★★★ ()
Ответ на: комментарий от Turbid

Да, только сомнительно что у него два разных адреса в одной сетке. Это оператор так дал?

Почему нет, почти всегда так и происходит. ;)

ssh2 ★★★ ()
Ответ на: комментарий от Turbid

Какая разница-то? Если у него адреса неправильные - это отдельная проблема.

gasinvein ★★★ ()
Ответ на: комментарий от ssh2

Спасибо за ответ! Но у меня сразу появился вопрос: какой тип сети тогда выбрать на самом контейнере? Сделал рекомендации (inet 145.239.227.60 netmask 255.0.0.0 broadcast 145.255.255.255) выше, привязал их к veth, который в своё время был создан при запуске контейнера. Пинг с хост-ноды на этот адрес пошел, однако в самом контейнере по-прежнему нет сети. Уже не знаю что делать...

ifconfig контейнера:

eth0      Link encap:Ethernet  HWaddr 52:54:00:a6:cf:12  
          inet addr:145.239.227.60  Bcast:145.239.227.255  Mask:255.255.255.0
          inet6 addr: fe80::5054:ff:fea6:cf12/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4699 errors:0 dropped:0 overruns:0 frame:0
          TX packets:31 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:281968 (275.3 KiB)  TX bytes:4742 (4.6 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:532 (532.0 B)  TX bytes:532 (532.0 B)

ifconfig хост-ноды:

ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::5054:ff:fea6:cf12  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:a6:cf:12  txqueuelen 1000  (Ethernet)
        RX packets 14190  bytes 927596 (927.5 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1522  bytes 153899 (153.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 156  bytes 12160 (12.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 156  bytes 12160 (12.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vethM49MMS: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 145.239.227.60  netmask 255.0.0.0  broadcast 145.255.255.255
        inet6 fe80::fc6c:86ff:fe46:18a8  prefixlen 64  scopeid 0x20<link>
        ether fe:6c:86:46:18:a8  txqueuelen 1000  (Ethernet)
        RX packets 33  bytes 4826 (4.8 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 5708  bytes 342472 (342.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

vmbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 54.36.18.234  netmask 255.255.255.0  broadcast 54.36.18.255
        inet6 fe80::5054:ff:fea6:cf12  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:a6:cf:12  txqueuelen 1000  (Ethernet)
        RX packets 14006  bytes 725664 (725.6 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1456  bytes 145047 (145.0 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

P.S. ОС сменил уже на Ubuntu 18.04, убрал алиас адреса, но к удовлетворяющему результату не пришел. Спасибо!

SeecH ()
Ответ на: комментарий от ssh2

Также хочу спросить. Могут ли все эти проблемы у меня возникнуть из-за того, что я пытаюсь поднять LXC-контейнеры с VDS на KVM? Быть может на физическом железе все заработает нормально?

SeecH ()
Ответ на: комментарий от SeecH

Если речь о том, чтобы lxc работал внутри KVM не вижу этому преград, но сам я так не делал. )

Вы избегайте радикальных шагов, разделите проблему на несколько более мелких.

Например если, остановить контейнер, выдать адрес 145.239.227.60 алиасом к vmbr0 и «попингать» с ключем -I адрес который для этого 227.60 будет шлюзом. Ходят пакеты?

ssh2 ★★★ ()
Последнее исправление: ssh2 (всего исправлений: 1)
Ответ на: комментарий от ssh2

Этот интерфейс создаётся автоматически при запуске контейнера. Адрес он обрел после моих настроек на основе Ваших рекомендаций выше :D Прошу прощения за тупость, с настройкой сетей работаю редко.

SeecH ()
Ответ на: комментарий от SeecH

У парных интерфейсов со стороны хоста адресов обычно не бывает.

Уберите с него адрес, пропишите маршрут по умолчанию и в теории всё должно работать.

ssh2 ★★★ ()
Ответ на: комментарий от system-root

ты так говоришь, будто от кол-ва контейнеров выбирают эти инструменты.

Именно так я и поступаю. Городить лишний слой только потому, что лень руками поправить пару конфигурационных файлов.

ssh2 ★★★ ()
Последнее исправление: ssh2 (всего исправлений: 1)
Ответ на: комментарий от SeecH

А теперь попробуй на VDS с KVM поставить докер с реп докера и крутить контейнер в докере. Удивишься, как там всё просто и удобно. И безопасно, не менее, чем с lxc. Lxc - это херня, по сравнению с докером, он - стандарт уже года 4 как.

menangen ★★★★★ ()
Ответ на: комментарий от system-root

за правку конфигов руками следует удалять по статье

Пока есть такие как вы, умеющие читать и редактировать файлы конфигурации всегда смогут заработать на жизнь. ;)

ssh2 ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.