Настройка мостовых контейнеров LXC со статическими IP-адресами

Я пытаюсь настроить несколько контейнеров LXC на хосте, каждый из которых имеет собственные статические IP-адреса.

Мой хост работает с последним Ubuntu. Он имеет один сетевой интерфейс с именем eth0. Статические IP-адреса являются pingable из Интернета и называются eth0: 210, eth0: 211 ... Числа после двоеточия являются наименее значимым байтом адресов. В дополнение к этим интерфейсам я устанавливаю br0 на общедоступный IP-адрес хоста. Существуют также интерфейсы lo, veth2LPP9A и lxcbr0. Lxcbr0 имеет адрес частного IP-адреса.

Хост /etc /network /interfaces выглядит так:

auto br0
iface br0 inet static
        bridge_ports eth0
        bridge_fd 0
        [...]

До сих пор я использовал различные онлайн-источники, в том числе Консолидация контейнеров LXC для размещения eth0, чтобы они могли публиковать IP , чтобы помочь мне настроить это.

Конфигурационный файл контейнера имеет:

lxc.network.type = veth
lxc.network.link = br0

Я удалил статическую конфигурацию lxc.network.ipv4 из этого файла, так как это вызвало проблемы. Когда я запустил lxc-ls -fancy с этой конфигурацией, я бы дважды увидел тот же публичный IP-адрес в выводе. Кроме того, это испортит конфигурацию подсети в каталоге /etc /network /interfaces.

Говоря о файле интерфейсов контейнера, он выглядит примерно так:

auto eth0
iface eth0 inet static
        address [...]
        netmask 255.255.255.255
        #gateway [...]
        dns-nameservers 8.8.8.8

        post-up route add [...] dev eth0
        post-up route add default gw [...]
        post-down route del [...] dev eth0
        post-down route del default gw [...]

Мне пришлось прокомментировать шлюз и добавить команды добавления маршрута в этот файл. В противном случае для загрузки потребуется около минуты.

Для файлов /proc /sys /net /bridge /bridge-nf- * на хосте установлено значение 0. Значение /proc /sys /net /ipv4 /ip_forward равно 1.

Проблема заключается в том, что «route -n» контейнера выглядит так, как должен, я не могу выскочить из контейнера. SSHing для того, что должно быть IP-адресом контейнера, соединяет меня с хостом.

EDIT: удаление статического IP-адреса контейнера из хоста сделало помощь, но теперь я получаю новую ошибку. Попытка выполнить ping контейнер с хоста приводит к переадресации HostFrom, New nexthop. Пакеты просто переходят от шлюза к хосту, неоднократно. Запуск traceroute от хоста показывает, что первая остановка находится у шлюза. Тогда все остальные маршруты: * * *. Я получаю ту же проблему, независимо от того, находится ли контейнер в сети или нет.

12 голосов | спросил EthernetCable 3 FebruaryEurope/MoscowbMon, 03 Feb 2014 02:40:53 +0400000000amMon, 03 Feb 2014 02:40:53 +040014 2014, 02:40:53

2 ответа


14

Фактически вы можете установить адрес и шлюз от внутри хоста и настроить контейнер, чтобы он вообще не касался интерфейса, используя ключевое слово manual

Поместите это в гости /etc/network/interfaces:

auto eth0
iface eth0 inet manual

Также оставьте его в файле конфигурации контейнера, чтобы настроить интерфейс:

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxc-bridge-nat
lxc.network.ipv4 = 192.168.100.16/24
lxc.network.ipv4.gateway = auto

Гость будет вести себя так, как будто BIOS уже настроил интерфейс и просто использовал его.

Специально исследуйте lxc.network.ipv4.gateway

ответил sebastianwagner 4 AMpFri, 04 Apr 2014 03:50:17 +040050Friday 2014, 03:50:17
1

Я мог правильно настроить мои контейнеры lxc после ответа @Enrique Moreno Tent, поэтому я объясню, что делать более подробно, если вы не знаете, как настроить другие элементы.

1. Получите доступ к контейнеру LXC с помощью команды lxc-attach

Команда:

$ lxc-attach -n YOUR-CONTAINER-NAME

2. См. Текущие конфигурации с помощью ifconfig

Команда

[email protected]:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.3.160  netmask 255.255.255.0  broadcast 10.0.3.255
        inet6 fe80::216:3eff:fec9:2fa0  prefixlen 64  scopeid 0x20<link>
        ether 00:16:3e:c9:2f:a0  txqueuelen 1000  (Ethernet)
        RX packets 62  bytes 7142 (7.1 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 60  bytes 9788 (9.7 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 1  (Local Loopback)
        RX packets 20285  bytes 175021803 (175.0 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 20285  bytes 175021803 (175.0 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

`` `

3. Получение адреса, сетевой маски и шлюза

Увидев результат команды ifconfig выше, мы видим:

Адрес - это адрес, который вы хотите, вы можете изменить его на 10.0.3.166.

Маска сети : 255.255.255.0

Шлюз . Для шлюза вы используете широковещательный адрес: 10.0.3.255

Как вы можете видеть выше, в настоящее время у вас есть вся информация, необходимая для заполнения вашего гостя (контейнера) /etc/network/interfaces.

4. Получение значения dns-nameservers.

Выполните команду:

cat /etc/resolv.conf

Но, возможно, лучше всего использовать Google DNS, который asre 8.8.8.8 и 8.8.4.4

5. Редактирование /etc/network/interfaces ВНУТРИ КОНТЕЙНЕРА

auto eth0 iface eth0 inet static address 10.0.3.166 netmask 255.255.255.0 gateway 10.0.3.255 dns-nameservers 8.8.8.8

ответил Iacchus 2 Jpm1000000pmMon, 02 Jan 2017 19:31:26 +030017 2017, 19:31:26

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132