LINUX.ORG.RU
ФорумAdmin

systemd-nspawn сломан в centos?

 , ,


0

1

Привет. В центоси, похоже, не работают контейнеры nspawn должным образом, а именно не маскарадятся пакеты, не прокидываются порты из контейнера на хост, не биндятся директории. На данный момент есть такие конфиги

# cat /etc/systemd/nspawn/ubuntu.nspawn
[Exec]
ResolvConf=off
Hostname=ubuntu

[Files]
BindReadOnly=/etc/somedir
TemporaryFileSystem=/tmp

[Network]
Private=yes
VirtualEthernet=yes
Port=51821

# cat /etc/systemd/network/80-container-ve.network 
[Match]
Name=ve-*
Driver=veth

[Network]
# Default to using a /28 prefix, giving up to 13 addresses per container.
Address=0.0.0.0/28
LinkLocalAddressing=yes
DHCPServer=ipv4
IPForward=ipv4
IPMasquerade=ipv4
LLDP=yes

Сеть между машинами поднимается через интерфейсы ve-ubuntu на хосте и host0 в контейнере, но нету интернета, пока я со стороны хоста руками не пропишу нужные правила маскарадинга и форвардинга. Проброс портов также приходится делать руками через DNAT. firewalld НЕ использую, стоит только iptables. На домашней машине (не центось) аналогичные настройки работают, правила добавляются автоматически при запуске контейнера.
-A PREROUTING -p tcp -m tcp --dport 51821 -m addrtype --dst-type LOCAL -j DNAT --to-destination 192.168.66.54:51821
-A OUTPUT ! -d 127.0.0.0/8 -p tcp -m tcp --dport 51821 -m addrtype --dst-type LOCAL -j DNAT --to-destination 192.168.66.54:51821
-A POSTROUTING -s 192.168.66.48/28 -j MASQUERADE


Я делаю что-то неправильно или это действительно в центе проблемы?



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

Потому что это дефолт конфиги из системд, которой в центе нету.
Я, кажется, нашёл в чем проблема.

Apr 23 15:16:37 vbox systemd-networkd[3591]: ve-ubuntu       : Could not enable IP masquerading: Operation not supported
Apr 23 15:16:37 vbox systemd-networkd[3591]: ve-ubuntu       : Could not enable IP masquerading: Operation not supported

Решение, как мне кажется, - пересобирать systemd-networkd с
--enable-libiptc. Что я уже и сделал и новый бинарник линкуется с libip4tc.so. Но пакет почему-то не ставится, получаю ошибку
# yum localinstall systemd-networkd-219-62.el7.5.x86_64.rpm 
Loaded plugins: fastestmirror, versionlock
Examining systemd-networkd-219-62.el7.5.x86_64.rpm: systemd-networkd-219-62.el7.5.x86_64
Marking systemd-networkd-219-62.el7.5.x86_64.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package systemd-networkd.x86_64 0:219-62.el7.5 will be installed
--> Processing Dependency: systemd = 219-62.el7.5 for package: systemd-networkd-219-62.el7.5.x86_64
Loading mirror speeds from cached hostfile
 * base: mirrors.bytes.ua
 * epel: fedora-mirror01.rbc.ru
 * extras: mirrors.bytes.ua
 * updates: mirrors.bytes.ua
--> Finished Dependency Resolution
Error: Package: systemd-networkd-219-62.el7.5.x86_64 (/systemd-networkd-219-62.el7.5.x86_64)
           Requires: systemd = 219-62.el7.5
           Installed: systemd-219-62.el7_6.5.x86_64 (@updates)
               systemd = 219-62.el7_6.5
           Available: systemd-219-62.el7.x86_64 (base)
               systemd = 219-62.el7
           Available: systemd-219-62.el7_6.2.x86_64 (updates)
               systemd = 219-62.el7_6.2
           Available: systemd-219-62.el7_6.3.x86_64 (updates)
               systemd = 219-62.el7_6.3
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

Хотя SRPM брал той же версии, что установлен (yumdownload --source systemd)

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

Хотя SRPM брал той же версии, что установлен (yumdownload --source systemd)

Из этого SRPM у тебя собралось несколько бинарных RPM, так? Причем версии того, что собралось, отличаются от того, что установлено (.el7.5 — не то же, что .el7_6.5). Соответственно, нужно заменить установленное на самособранное (rpm -Fhv * в каталоге с rpm'ками).

К тому же я бы либо прописал самособранному Epoch, либо добавил бы systemd* в исключения в yum.conf, иначе при дальнейших обновлениях могут быть чудеса. Впрочем, они так и так могут быть.

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

А по-хорошему хорошо бы понять, как достичь того, чего хочется, используя то, что имеется. Полагаю, @gasinvein своим вопросом намекал именно на это. Я бы подсказал что-нибудь, но увы, недостаточно хорошо знаком как с nspawn, так и с networkd.

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

Да, мне тоже кажется это более здравым. Надеюсь кто-нибудь подскажет рабочие варианты. Явно же не только я решил воспользоваться контейнерами в системд. Впрочем, оно и сейчас работает, то нужно прописывать руками правила iptables, что крайне неудобно.

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

Просто удивляет то, что эти же конфиги в домашнем арче работают отлично и ожидаемо, в отличие от центы. По этому поводу и пост.

veyayawet
() автор топика

Пересборка systemd-networkd решила проблему наполовину: маскарадинг включается вместе с контейнером, но игнорируется параметр Port из .nspawn. Также почему-то не биндятся директории из .nspawn. Если запускать машину руками через systemd-nspawn -b --bind-ro /etc/somedir, то бинд срабатывает. --port в этом случае также игнорируется и не работает проброс из контейнера на хост.

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

Не очень правильно полагаться на автоматизацию fw «от посторонних» , «я так думаю». Сначала один демон, потом второй, а потом кто-то накосячил, но netfilter же один. Вы сами написали что руками работает, значит знаете как и что прописать. Это имхо лучший вариант, во всяком случае вы будете уверены в результате.

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