it-swarm.com.de

Führen Sie den Dienst in einem eigenen IP-Netns-Namespace unter Ubuntu 16.04 aus

Ich habe in 14.04 Dienste ausgeführt, indem ich ausgeführt habe

ip netns exec namespacename service start servicename

Aber mir wurde klar, dass dies am 16.04 nicht mehr funktioniert. Der Dienst startet im normalen Namespace.

Ich habe versucht, die Datei /lib/systemd/system/servicename.service zu bearbeiten, um den Namespace zu verwenden, aber es war nicht erfolgreich. Das erste Problem war, dass das Programm mit einem eigenen Benutzer ausgeführt wurde, der keinen Zugriff auf Namespaces hat. Ich habe es geändert, um das Programm als root auszuführen und dann Sudo in ExecStart zu verwenden, aber aus irgendeinem Grund ist die Dienststeuerung nie zurückgekehrt, um die Eingabeaufforderung auszuführen.

Gibt es Ideen, wie ein Dienst ausgeführt werden kann, der bei jedem Neustart unter Ubuntu 16.04 automatisch und dauerhaft in einem Namespace ausgeführt wird?

Wenn es darauf ankommt, handelt es sich um einen Übertragungsdämon

AKTUALISIEREN:

Ich habe es geschafft, es mit der folgenden .service-Datei zum Laufen zu bringen. In der Datei 'vpn' steht der Name des Namensraums. Mein Problem bestand darin, das falsche Type für den Dienst festzulegen. Ich bin immer noch der Meinung, dass diese Lösung nicht die beste ist. Wenn Sie einen besseren Weg haben, sagen Sie es bitte!

[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
yurtesen

Kürzlich gefunden in man 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