LINUX.ORG.RU
ФорумAdmin

LXC контейнер не полный

 , ,


1

2

Установил LXC на Debian, создвл контейнер, тоже Debian, установка проходит успешно. Логинюсь в контейнер, и что я вижу?

root@games:~# apt-get update
Err http://http.debian.net jessie InRelease
  
Err http://http.debian.net jessie Release.gpg
  Could not resolve 'http.debian.net'
Reading package lists... Done
W: Failed to fetch http://http.debian.net/debian/dists/jessie/InRelease  

W: Failed to fetch http://http.debian.net/debian/dists/jessie/Release.gpg  Could not resolve 'http.debian.net'

W: Some index files failed to download. They have been ignored, or old ones used instead.
более того, нет даже элементарных unix утилит, таких как ping
root@games:~# ping ya.ru
-bash: ping: command not found
Что же делать? мне нужна работоспособная ОС в контейнере. хост-система Debian 8.2 Устанавливал так: lxc-create -n games -t debian -- -r jessie



Последнее исправление: dargod (всего исправлений: 2)

Ответ на: комментарий от dargod

Сделай сетевой мост (bridge), чтобы контейнеры могли использовать сеть.

https://wiki.debian.org/LXC/SimpleBridge

Далее в /etc/lxc/default.conf впиши

lxc.network.type = veth                                                                                                                                                                                                                                                           
lxc.network.flags = up                                                                                                                                                                                                                                                            
lxc.network.link = br0 #имя моста на локальной машине                                                                                                                                                                                                                                                           
lxc.network.name = eth0 #имя интерфейса, который будет в контейнерах

roman77 ★★★★★
()
Последнее исправление: roman77 (всего исправлений: 2)

Что же делать?

Найти другой шаблон (-t) или написать свой.

tailgunner ★★★★★
()

более того, нет даже элементарных unix утилит, таких как ping

apt-get install tasksel

apt-get install `tasksel --task-packages standard`

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

более конкретно: после добавления auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_fd 0 bridge_maxwait 0

в /etc/network/interfaces и перезапуска /etc/init.d/networking restart интернет падает

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

Делаешь от рута

ifconfig eth0 down (имя интерфейса у тебя может быть другим)

brctl addbr br0

brctl addif br0 eth0

ifconfig eth0 up

После командой ifconfig проверь что поднят интерфейсы eth0 и br0

Если все ок, делаешь

dhclient br0

Инет должен работать.

И уже потом меняешь /etc/network/interfaces, сохраняешь, все.

И не забудь в /etc/network/interfaces для eth0 заменить конфигурацию на

iface eth0 inet manual

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

после подъема моста на хост системе рухнул интернет (( пришлось переустанавливать

ты уверен что тебе именно контейнер нужен? можт с vbox начать? там проще и интерфейс дружественней

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

Уверен. Мне нужна виртуализация на уровне ОС, без аппаратной эмуляции. У меня VPS на KVM - это уже виртуальная машина, нет смысла создавать внути ещё одну. Мне нужны контейнеры, чтобы отделить сайт и сервисы друг от друга и от хост системы, чтобы работать уже в них, а хост систему лишний раз не трогать.

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

мм... просто если встают вопросы по настройке бриджа - лучше начать постепенно и на локальной машине. Иначе тупым copy-paste не поймешь что сделал

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

да уже понял. Пока отложил создание моста в долгий ящик, создал контейнер средствами debootstrap+systemd-nspawn, работает без моста.

dargod
() автор топика
Ответ на: комментарий от roman77

int13h, roman77
Может быть сможете подсказать, как пустить контейнер через tun0(то есть vpn) интерфейс? Через eth0 работает. Как только поднимается tun0 интерфейс, сеть в контейнере пропадает.

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

Ну разумеется не работает инет в контейнере. Так все закрутил.

Можешь все упростить себе, убрав

iptables -t nat -A POSTROUTING -s 10.0.0.1/24 -j SNAT --to-source 192.168.1.3

и добавив

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Или же сделать все правильно (на мой взгляд)

### /etc/network/interfaces
iface eth0 inet manual

auto br0
iface br0 inet dhcp
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        post-up iptables-restore < /etc/iptables.up.rules

Пусть eth0 будет подключен в мост. Как минимум хуже от этого не станет, плюс будет удобнее.

Очистить правила iptables, после сделать

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables-save > /etc/iptables.up.rules

Т.к. eth0 уже будет в мосте, правило iptables для eth0 добавлять не надо. Контейнеры будут получать адрес по dhcp, как и локальная машина.

И не забудь поменять все секцию network в конфиге lxc на

lxc.network.type = veth                                                                                                                                                                                                                                                           
lxc.network.flags = up                                                                                                                                                                                                                                                            
lxc.network.link = br0                                                                                                                                                                                                                                                            
lxc.network.name = eth0
roman77 ★★★★★
()
Последнее исправление: roman77 (всего исправлений: 3)
Ответ на: комментарий от roman77

Вроде получилось. Заработало после:

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

В случае с первым вариантом, правильно ли я понимаю, что для каждого контейнера нужно будет прописывать отдельный интерфейс в конфиге? То есть, veth1, veth2 и тд.

Или же сделать все правильно (на мой взгляд)
...

Этот вариант я ещё не пробовал, если честно, но в процессе.

Пусть eth0 будет подключен в мост. Как минимум хуже от этого не станет, плюс будет удобнее.

В чём будет заключаться удобство?
Кстати, спасибо за помощь. :)

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

В случае с первым вариантом, правильно ли я понимаю, что для каждого контейнера нужно будет прописывать отдельный интерфейс в конфиге? То есть, veth1, veth2 и тд.

Нет.

В чём будет заключаться удобство?

Вместо 2х интерфейсов lxcbr0 и eth0 будет один br0, и меньше правил в iptables.

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

Нет.

Хм...если в каждом конфиге оставить veth1, например, то сеть работает только в одном контейнере.

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