Выполненный сервис в его собственном IP netns пространство имен на Ubuntu 16.04

Я раньше выполнял сервисы в 14,04 путем выполнения

ip netns exec namespacename service start servicename

Но я понял, что это больше не работает над 16,04. Сервис запускается в нормальном пространстве имен.

Я пытался отредактировать/lib/systemd/system/servicename.service файл для использования пространства имен, но это не было успешно. Первая проблема состояла в том, что программа была выполнена со своим собственным пользователем, у которого нет доступа к пространствам имен. Я изменил его для запущения программы, поскольку корень затем использует sudo в ExecStart, но по некоторым причинам сервисное управление никогда не возвращалось к командной строке.

Какие-либо идеи о том, как выполнить сервис к автоматически и постоянно работать в пространстве имен каждый раз, это перезапущено на Ubuntu 16.04?

Если имеет значение, что рассматриваемый сервис является демоном передачи

ОБНОВЛЕНИЕ:

Мне удалось получить его работающий со следующим .service файлом. В файле 'vpn' является названием пространства имен. Моя проблема устанавливала несправедливость Type для сервиса. Я все еще чувствую, что этим решением не является лучшее решение. Если у Вас есть лучший путь, скажите!

[Unit]
Description=Transmission BitTorrent Daemon
After=network.target

[Service]
User=root
Type=simple
ExecStart=/bin/sh -c 'exec /sbin/ip netns exec vpn /usr/bin/sudo -u debian-transmission /usr/bin/transmission-daemon -f --log-error --config-dir /var/lib/transmission-daemon/info'
ExecReload=/bin/kill -s HUP $MAINPID

[Install]
WantedBy=multi-user.target
2
задан 16 March 2017 в 12:17

1 ответ

Недавно найденный в человеке systemd.exec (5)

PrivateNetwork=
           Takes a boolean argument. If true, sets up a new network namespace for the executed processes and configures only the loopback network device
           "lo" inside it. No other network devices will be available to the executed process. This is useful to turn off network access by the executed
           process. Defaults to false. It is possible to run two or more units within the same private network namespace by using the JoinsNamespaceOf=
           directive, see systemd.unit(5) for details. Note that this option will disconnect all socket families from the host, this includes AF_NETLINK
           and AF_UNIX. The latter has the effect that AF_UNIX sockets in the abstract socket namespace will become unavailable to the processes
           (however, those located in the file system will continue to be accessible).
1
ответ дан 2 December 2019 в 04:50

Другие вопросы по тегам:

Похожие вопросы: