LINUX.ORG.RU
ФорумAdmin

Systemd-networkd в Network Namespace.

 , ,


1

1

Никак не могу сообразить, как запускать networkd-unit-ы в network namespace-ах?
Т.е. весь трафик должен идти в созданный ns vpn0, внутри которого должен быть интерфейс enp3s0 с выходом в сеть.
Можно конечно сделать без networkd с помощью говна и палок, но не очень хочется.
Файлы unit-ов.
cat /etc/systemd/network/wired.network

[Match]
Name=enp3s0

[Network]
# IPv6
Address=2a01:***:***::55/64
Gateway=fe80::1


cat /etc/systemd/system/wireguard.service

[Unit]
Description=WireGuard Client

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/ip netns add vpn0
ExecStart=/bin/ip link set enp3s0 down
ExecStart=/bin/ip link set enp3s0 netns vpn0
ExecStart=/bin/ip -n vpn0 link add wg0 type wireguard
ExecStart=/bin/ip -n vpn0 link set wg0 netns 1

# Здесь нужно как-то запустить networkd-unit внутри network namespace, чтобы был выход в интернет.

ExecStart=/bin/ip address add fc00::10/64  dev wg0
ExecStart=/bin/ip address add 192.168.***.5/24 dev wg0
ExecStart=/bin/wg setconf wg0 /etc/wireguard/client.conf
ExecStart=/bin/ip link set mtu 1400 dev wg0
ExecStart=/bin/ip link set wg0 up 
ExecStart=/bin/ip route add default dev wg0
ExecStart=/bin/ip -6 route add default dev wg0

ExecStart=/bin/dnscrypt-proxy /etc/dnscrypt-proxy.conf

ExecStop=/bin/ip -n vpn0 link set enp3s0 down
ExecStop=/bin/ip -n vpn0 link set enp3s0 netns 1
ExecStop=/bin/ip link del wg0
ExecStop=/bin/ip netns del vpn0
ExecStop=/bin/killall dnscrypt-proxy

[Install]
WantedBy=multi-user.target

Я тут пока что прикинул, а что если запускать как-то так?
ExecStart=/bin/ip netns exec systemctl start systemd-networkd
Или есть более лучшее решение?
А я пока что пожалуй проверю вариант с запуском networkd через ExecStart...


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

ExecStart=/bin/ip netns exec systemctl start systemd-networkd

Не работает и не будет, потому что в systemd запускаемые в рамках юнитов процессы никогда не являются потомками systemctl.

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

О, а ты тут уже. Тогда извини за невнимательность.

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

запускать networkd внутри namespace-а?

Кажется, штатных средств для такого нет. Если только запускать networkd в контейнере (связанном с этим network namespace) через systemd-nspawn — наверное, можно что-нибудь изобрести.

intelfx ★★★★★ ()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от mandala

имхо, networkd годится только для контейнеров и более его трогать не нужно.

Ммм, да он вроде как и вне контейнеров для настройки сети вполне подходит.
По-крайней мере проблем ни разу не возникало.
Не считая конечно этого момента с неймспейсами...

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

Оно подходит, пока не хочется чего нибудь эдакова. Вот тут и засада. Нужно брать уже полноценное что-то.

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