Der Emby Medienserver hat ab Haus die ungünstige Eigenschaft unabhängig der konfigurierten IPs immer auf allen Netzwerkinterfaces ein Binding durchzuführen. Das ist besonders dann ungünstig, wenn man beabsichtigt unterschiedliche Medienserver mit SSDP+UPnP+DLNA zu betreiben oder wenn man vermeiden möchte, dass der Medienserver in ein öffentliches Netzwerk freigegeben wird, sollte es keine expliziten Firewallregeln geben.
Liest man ein wenig in der Emby Community findet man hin und wieder entsprechende Anfragen, die allesamt darauf abzielen, das Binding von Emby so anzupassen, dass dieses nur auf bestimmten Netzwerkinterfaces läuft. Technisch ist das auch absolut möglich, aber seitens der Entwicklung offenbar aus welchen Gründen auch immer, nicht gewünscht.
Abhilfe schafft entweder die Containerisierung des Emby Medienservers, beispielsweise mit Docker oder Podman. Durch die unterschiedlichen Möglichkeiten das Netzwerk zu kapseln (bspw. macvlan) kann man die Container hier so konifigurieren, einen eigenen Netzwerkstack zu erhalten und daher sowohl die Unicast-Kommunikation für den Medienserver als auch die SSDP (Multicast) basierte Discovery darüber abzuhandeln.
Möchte man nicht direkt auf eine vollständige Containerisierung setzen, so muss man sich mit einem mittlerweile alten Kernelfeature der Netzwerk-Namespaces behelfen.
ip link add link enp5s0 upnp-macv type macvlan mode bridge
ip link set upnp-macv up
ip netns add upnpns
ip link set upnp-macv netns upnpns
ip netns exec upnpns ip addr add 192.168.188.221/24 dev upnp-macv
ip netns exec upnpns ip link set upnp-macv up
ip netns exec upnpns ip link set lo up
ip netns exec upnpns ip route add default via 192.168.188.1
Anschließend muss der Emby Systemd-Unit so umgebaut werden, dass der Emby-Prozess auch den korrekten Namespace (nicht mehr „default“) nutzt:
/etc/systemd/system/emby-server.service.d/override.conf:
[Service]
CapabilityBoundingSet=CAP_NET_ADMIN CAP_SYS_ADMIN
AmbientCapabilities=CAP_NET_ADMIN CAP_SYS_ADMIN
PrivateNetwork=no
ExecStart=
ExecStart=/usr/bin/ip netns exec upnpns /opt/emby-server/bin/emby-server
Systemd-Units neu laden und Emby neustarten:
systemctl daemon-reload
systemctl start emby-server
Im oben genannten Fall ist Emby mit allen seinen Endpunkten nun unter 192.168.188.221 erreichbar und kann kein Binding mehr auf die übrigen Netzwerkinterfaces auf dem Host vornehmen. Hier können nun optional andere Anwendungen auf den gleichen Ports und mit Uni/Multicast betrieben werden.