Комментарии 40
Чтобы введённая команда не сохранилась в history, достаточно перед ней поставить пробел.
Спасибо, довольно интересно.
Надо почитать что он вообще поддерживает.
Надо почитать что он вообще поддерживает.
В первом же абзаце написано, что systemd-networkd требует всего 2 МБ памяти (против 20 у NetworkManager).
это надуманное преимущество. Они сравнивают десткопный NetworkManager с systemd, в то время как NetworkManager не используется на серверах. Нет никакого преимущества. Давайте все запихнем в наш «прекрасный» systemd комбаин, потому что просто так. Вот и все. Дай им волю, они и реестр сделают в linux.
Да такими темпами, systemd скоро научится писать болванки и перегонит Nero по функционалу )))
Есть один нюанс — в RH-based дистрибутивах systemd — by default. Т.е. он из системы не вырезается никак. Прибито гвоздями.
И NM — by default. Однако не прибито.
Автор рисует путь вырезать бОльшее зло (NM) в пользу меньшего зла (systemd).
Если Вы хотите совсем без зла — RTFM «Linux From Scratch».
(как Вы будете поддерживать в одно лицо пару-тройку LFS-серверов — это второй вопрос).
И NM — by default. Однако не прибито.
Автор рисует путь вырезать бОльшее зло (NM) в пользу меньшего зла (systemd).
Если Вы хотите совсем без зла — RTFM «Linux From Scratch».
(как Вы будете поддерживать в одно лицо пару-тройку LFS-серверов — это второй вопрос).
Автор ничего не рисует, автор рекламирует свой хостинг. И он не предлагает вырезать NM, он ссылается на то, что он есть в десктопных версиях, а потом вообще без логики перескакивает на systemd network на серверах. Выглядит это так: смотрите, у верблюдов есть горб, поэтому предлагаю отрезать у лошади хвост и посадить вместо него куст черной смородины.
мне так и не удалось подружить на малине systemd-networkd с WiFi с WPA2. Интересно было бы почитать, как умные люди systemd c wpa_supplicant подружили.
На вопрос о дружбе, думаю, уместнее всего ответить скриптом.
Тестировал на Debian 8.
Тестировал на Debian 8.
DHCP wireless configuration script
#!/bin/bash
TARGET_DEVICE=wlan0
WIFI_ESSID='<ESSID>'
WIFI_PASSF='<wpapassphrase>'
systemctl disable networking
systemctl disable wpa_supplicant.service
systemctl disable NetworkManager
cat > /etc/systemd/network/21-dhcp-wireless.network << EOF
[Match]
Name=TARGET_DEVICE
[Network]
DHCP=yes
EOF
# Если вдруг отсутствует
cat > /etc/systemd/system/wpa_supplicant@.service << EOF
[Unit]
Description=Interface-specific version of WPA supplicant daemon
Requires=sys-subsystem-net-devices-%i.device
After=sys-subsystem-net-devices-%i.device
Before=network.target
Wants=network.target
[Service]
Type=simple
ExecStart=/sbin/wpa_supplicant -c/etc/wpa_supplicant/wpa_supplicant-%I.conf -i%I
[Install]
Alias=multi-user.target.wants/wpa_supplicant@%i.service
EOF
cat > /etc/wpa_supplicant/wpa_supplicant-TARGET_DEVICE.conf << EOF
update_config=1
eapol_version=1
ap_scan=1
fast_reauth=1
EOF
# passphrase будет записан в файле, в том числе, открытым текстом!
wpa_passphrase WIFI_ESSID WIFI_PASSF >> /etc/wpa_supplicant/wpa_supplicant-TARGET_DEVICE.conf
chmod go-rwx /etc/wpa_supplicant/wpa_supplicant-TARGET_DEVICE.conf
rm /etc/resolv.conf
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
systemctl enable wpa_supplicant@TARGET_DEVICE.service
systemctl enable systemd-networkd.service
systemctl enable systemd-resolved.service
systemctl start wpa_supplicant@TARGET_DEVICE.service
systemctl start systemd-networkd.service
systemctl start systemd-resolved.service
Автору — +100500. Век живи — век учись — так придурком и помрешь :-)
Это я о себе.
От себя добавлю (Fedora/CentOS7 (версия CentOS — важно)):
* NetworkManager в CentOS7 реально бесит. Лечится (пока) установкой пакета initscripts, зачисткой пакетов rpmreaper'ом, после чего включаются олдскульные «chkconfig network on» и «service network restart». NM можно удалять. И без всяких systemd (без которого — никак, поэтому Ваш вариант лучше).
* не развернута тема конфликта /etc/rc.d/network и systemd-networkd. Надо будет потыкать палочкой.
Это я о себе.
От себя добавлю (Fedora/CentOS7 (версия CentOS — важно)):
* NetworkManager в CentOS7 реально бесит. Лечится (пока) установкой пакета initscripts, зачисткой пакетов rpmreaper'ом, после чего включаются олдскульные «chkconfig network on» и «service network restart». NM можно удалять. И без всяких systemd (без которого — никак, поэтому Ваш вариант лучше).
* не развернута тема конфликта /etc/rc.d/network и systemd-networkd. Надо будет потыкать палочкой.
У меня на не особо нагруженном CentOS 7 NetworkManager занимает 3.6 МБ
А если сеть не заведется, то что делать, не имея доступа к серверу? Делать бекапы?
А если сеть не заведется, то что делать, не имея доступа к серверу? Делать бекапы?
del
А что насчет примеров настроек 802.1q, qiniq, LAG, route?
LACP+802.1q
Сетевые интерфейсы называются eno{1,2,3,4}
==> eno.network <==
[Match]
Name=eno*
[Link]
MTUBytes=9000
[Network]
Bond=bond1
==> bond1.netdev <==
[NetDev]
Name=bond1
Kind=bond
[Bond]
Mode=802.3ad
LACPTransmitRate=slow
TransmitHashPolicy=layer3+4
MinLinks=1
MIIMonitorSec=1s
UpDelaySec=2s
DownDelaySec=8s
==> bond1.network <==
[Match]
Name=bond1
[Link]
MTUBytes=9000
[Network]
VLAN=l2domru
VLAN=megafon
==> l2domru.netdev <==
[NetDev]
Name=l2domru
Kind=vlan
[VLAN]
Id=900
==> l2domru.network <==
[Match]
Name=l2domru
[Link]
MTUBytes=9000
[Network]
IPForward=yes
[Address]
Address=192.168.170.4/29
[Route]
Destination=172.16.253.0/30
Gateway=192.168.170.2
[Route]
Destination=172.16.254.0/30
Gateway=192.168.170.3
==> megafon.netdev <==
[NetDev]
Name=megafon
Kind=vlan
[VLAN]
Id=910
==> megafon.network <==
[Match]
Name=megafon
[Link]
MTUBytes=1500
[Network]
DNS=4.2.2.4
DNS=77.88.8.8
DNS=8.8.4.4
IPForward=yes
[Address]
Address=x.x.x.x/27
Хотелось бы информацию о том как отлаживать это хозяйство, наверно это сложнее чем классические bash-скрипты.
1. Куда заносится информация о DNS-серверах, автоматически перезаписывается /etc/resolv.conf?
2. DHCP-клиент тянет за собой isc-dhcp-client или используется свой велосипед?
3. Как добавить несколько IP-адресов на один интерфейс, типа как раньше eth0:0 и т.п.?
4. Как добавлять разные VLANы на физический интерфейс?
5. Можно ли в случае проблем просто выключить systemd-networkd и поднять интерфейс руками? (ip addr add и т.д...)
1. Куда заносится информация о DNS-серверах, автоматически перезаписывается /etc/resolv.conf?
2. DHCP-клиент тянет за собой isc-dhcp-client или используется свой велосипед?
3. Как добавить несколько IP-адресов на один интерфейс, типа как раньше eth0:0 и т.п.?
4. Как добавлять разные VLANы на физический интерфейс?
5. Можно ли в случае проблем просто выключить systemd-networkd и поднять интерфейс руками? (ip addr add и т.д...)
1. Куда заносится информация о DNS-серверах, автоматически перезаписывается /etc/resolv.conf?
Если вы получаете DNS от DHCP или указываете DNS в файлах .network, то конфигурированием занимается демон systemd-resolved; он пишет конфиг в /run/systemd/resolve/resolv.conf, так что необходимо создать симлинк
И resolvconf нужно будет удалить.
Спасибо за замечание, это важный момент.
2. DHCP-клиент тянет за собой isc-dhcp-client или используется свой велосипед?
Реализация DHCP своя. Здесь разработчик пишет о производительности реализации.
3. Как добавить несколько IP-адресов на один интерфейс, типа как раньше eth0:0 и т.п.?
Нужно просто добавить несколько строк вида Address= в секцию [Network]
Или можно сделать несколько секций [Address] и в каждой из них указать адрес.
Несколько адресов в одной секции [Address] указывать нельзя.
4. Как добавлять разные VLANы на физический интерфейс?
Нужно создать файлы .netdev для ваших vlan'ов:
first-vlan.netdev
second-vlan.netdev
А в конфиг .network в секцию [Network] вписать строки
P.S. Даже, вроде, можно список VLAN'ов указать через пробел
5. Можно ли в случае проблем просто выключить systemd-networkd и поднять интерфейс руками? (ip addr add и т.д...)
Конечно можно.
P.S. «это хозяйство» пишет вполне вразумительные логи, обычно их хватает.
Если вы получаете DNS от DHCP или указываете DNS в файлах .network, то конфигурированием занимается демон systemd-resolved; он пишет конфиг в /run/systemd/resolve/resolv.conf, так что необходимо создать симлинк
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
И resolvconf нужно будет удалить.
Спасибо за замечание, это важный момент.
2. DHCP-клиент тянет за собой isc-dhcp-client или используется свой велосипед?
Реализация DHCP своя. Здесь разработчик пишет о производительности реализации.
3. Как добавить несколько IP-адресов на один интерфейс, типа как раньше eth0:0 и т.п.?
Нужно просто добавить несколько строк вида Address= в секцию [Network]
[Network]
Address=192.168.1.2/24
Address=10.23.8.7/16
Gateway=...
Или можно сделать несколько секций [Address] и в каждой из них указать адрес.
Несколько адресов в одной секции [Address] указывать нельзя.
[Network]
Gateway=...
[Address]
Address=10.2.3.4/16
[Address]
Address=10.6.7.8/16
4. Как добавлять разные VLANы на физический интерфейс?
Нужно создать файлы .netdev для ваших vlan'ов:
first-vlan.netdev
[NetDev]
Name=vlan1
Kind=vlan
[VLAN]
Id=1
second-vlan.netdev
[NetDev]
Name=vlan2
Kind=vlan
[VLAN]
Id=2
А в конфиг .network в секцию [Network] вписать строки
VLAN=vlan1
VLAN=vlan2
P.S. Даже, вроде, можно список VLAN'ов указать через пробел
VLAN=vlan1 vlan2
5. Можно ли в случае проблем просто выключить systemd-networkd и поднять интерфейс руками? (ip addr add и т.д...)
Конечно можно.
P.S. «это хозяйство» пишет вполне вразумительные логи, обычно их хватает.
Эм. А зачем вообще подобный софт на сервере? Статической конфигурации для сервера более чем достаточно. Зачем держать некий демон в памяти если настройка сети с 99% вероятностью больше не будет менять после перезагрузки?
fuck systemd! это не linux way. одна утилита должна делать делать что-то одно и хорошо.
Спасибо, полезно.
Когда у тебя в хозяйстве исторический зоопарк дистрибутивов, networkd выглядит лучом света в тёмном царстве :-)
P.S.: у вас пара опечаток в листинге, "Adress=" (одна "d").
Уважаемый ru_vds, спасибо за статью, и дополнение про resolv.conf. Вы могли бы ответить на следующий вопрос? Появился механизм именования сет. интерфейсов, основанный на физическом месторасположении устройства в слоте, напр: p1p1, em1, em0 и т.д. И вроде как, в этом, участие принимают компоненты systemd. Вроде это как благо, и теперь, при смене железки, не нужно ничего делать руками. Однако, Ваша статья, противоречит этому, снова прибивая всё гвоздями к MAC адресу карточки. Вы можете как-то прокомментировать это? Я как системный администратор уже не понимаю что происходит… Вот поставил я CentOS7, у меня там: em1, em2. Вроде, как-бы теперь должно всё быть динамически. Однако, nmtui, в общем то, так же молотком прибивает mac+имя. В общем, я не понимаю, к чему все эти измнения от eth к em1/p1p1, если всё равно, всё гвоздями колотится?
Спасибо!
Спасибо!
И вроде как, в этом, участие принимают компоненты systemd.
В этом принимает участие udev и только он.
Смотрите его рулесы, там есть скрипт /lib/udev/rules.d/80-net-name-slot.rules, назначающий имена интерфейсов по их расположению. Регулируется это созданием/удалением в /etc/udev/rules.d одноимённого со скриптом симлинка на /dev/null
Спасибо Вам за замечание. Сопоставлять конфигурацию сетевому интерфейсу можно массой способов. Привязка к hwaddr для иллюстрации .link конфигов. Можно не создавать .link файлов, а в .network в секции [Match] использовать, например, имена сетвых интерфейсов Name=enp2s0 или Name=wl* (для нескольких сетевых интерфейсов типа wlp1s0). Также в этой секции можно использовать ключ Path=pci-0000:02:00.0-*, или, например привязаться к драйверу (Driver=brcmsmac). Подробнее можете посмотреть здесь.
Хоть тема старая, но все же отпишусь
На CentOS 7 столкнулся с тем что когда я пытаюсь прибить службу к интерфейсу, то после ребута она не работает.
Вот пример логов для redis и nginx
Это два ребута сервера
Это один ребут
В итоге имеем не работающую службу после ребута сервера (сервер — виртуальная машина).
Начал смотреть что и как и в итоге набрел вот на такое
cat nginx.service
Вроде бы стоит After, но оно не отрабатывает как хочется
почитал вот это
https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
и сразу стало понятно что в зависимости надо писать
After=network-online.target
Но писать это для каждого сервиса не очень хочется, кстати тот же zabbix тоже не запускался сразу, но там стоит перезапуск через 10 секунд после неудачи.
В итоге попробовал systemd-network и все заработало из коробки, не пришлось создавать кучу костылей и велосипедов.
На CentOS 7 столкнулся с тем что когда я пытаюсь прибить службу к интерфейсу, то после ребута она не работает.
Вот пример логов для redis и nginx
Это два ребута сервера
524:M 27 Feb 14:58:14.421 # Creating Server TCP listening socket 192.168.135.9:16371: bind: Cannot assign requested address
539:M 27 Feb 15:01:20.318 # Creating Server TCP listening socket 192.168.135.9:16371: bind: Cannot assign requested address
Это один ребут
2017/02/27 17:26:12 [emerg] 516#0: bind() to 192.168.135.2:8899 failed (99: Cannot assign requested address)
В итоге имеем не работающую службу после ребута сервера (сервер — виртуальная машина).
Начал смотреть что и как и в итоге набрел вот на такое
cat nginx.service
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/run/nginx.pid
# Nginx will fail to start if /run/nginx.pid already exists but has the wrong
# SELinux context. This might happen when running `nginx -t` from the cmdline.
# https://bugzilla.redhat.com/show_bug.cgi?id=1268621
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
ExecStart=/usr/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Вроде бы стоит After, но оно не отрабатывает как хочется
почитал вот это
https://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/
и сразу стало понятно что в зависимости надо писать
After=network-online.target
Но писать это для каждого сервиса не очень хочется, кстати тот же zabbix тоже не запускался сразу, но там стоит перезапуск через 10 секунд после неудачи.
В итоге попробовал systemd-network и все заработало из коробки, не пришлось создавать кучу костылей и велосипедов.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Преимущества systemd-networkd на виртуальных серверах Linux