Настройка мостовых контейнеров LXC со статическими IP-адресами
Я пытаюсь настроить несколько контейнеров LXC на хосте, каждый из которых имеет свои собственные статические IP-адреса.
На моем хосте установлена последняя версия Ubuntu. Он имеет единственный сетевой интерфейс с именем eth0. Статические IP-адреса доступны для пинга из Интернета и называются 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
[...]
До сих пор я использовал различные онлайн-источники, в том числе контейнеры Bridging 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 контейнера, соединяет меня с хостом.
РЕДАКТИРОВАТЬ: Удаление статического IP-адреса контейнера с хоста действительно помогло, но теперь я получаю новую ошибку. Попытка пропинговать контейнер с хоста приводит к перенаправлению HostFrom, New nexthop. Пакеты просто идут от шлюза к хосту, несколько раз. Запуск traceroute с хоста показывает, что первая остановка находится на шлюзе. Тогда все остальные маршруты * * *. Я получаю ту же проблему независимо от того, включен контейнер в сеть или нет.
5 ответов
Фактически вы можете установить адрес и шлюз изнутри хоста и настроить контейнер так, чтобы он не касался интерфейса, используя ключевое слово 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
,
Поскольку вы используете мост, вам нужно устанавливать IP-адреса только в контейнере, а не на хосте. Хост должен иметь только свой собственный IP-адрес (а).
Лучший способ, который я найду, и самый быстрый - это использовать профили lxc.
lxc profile list
- командуйте списком всех имеющихся у вас профилей.
lxc profile copy default minecraft
(это имя вашего нового профиля)
затем lxc profile edit minecraft
Это придет
devices:
eth0:
ipv4.address: 192.168.1.114/24 - add this line and enter any ip address you like
name: eth0
nictype: macvlan - this is my setting
parent: enp0s25
type: nic
root:
path: /
pool: lxc_zfs
type: disk
name: mine
used_by:
затем сохраните его
затем назначьте профиль вашему контейнеру LXC следующим образом
lxc profile assign YOUR_CONTAINER_NAME YOUR_NEW_PROFILE_NAME
затем просто перезапустите контейнер, и ваш новый IP-адрес будет установлен на этот контейнер
Я только что сделал это на днях с Ubuntu 14.04. Это просто. Вам просто нужно отредактировать /etc/network/interfaces
файл внутри вашего контейнера, и установите это:
auto eth0
iface eth0 inet static
address $IP
netmask $NETMASK
gateway $GW
dns-nameservers $DNS
Замените каждую переменную желаемым значением.
Вам не нужно больше ничего делать!
PS: обратите внимание на пробел перед некоторыми строками. Это обязательно.
Я мог бы правильно настроить свои контейнеры lxc после получения ответа @Enrique Moreno Tent, поэтому я объясню, что делать более подробно, если вы не знаете, как настроить другие элементы.
1. Получите доступ к контейнеру LXC через lxc-attach
команда
Команда:
$ lxc-attach -n YOUR-CONTAINER-NAME
2. Смотрите ваши текущие конфигурации с ifconfig
команда
root@mycontainer:~# 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, который 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