概述

概述

如何隔离任何 systemd 进程在操作系统级别使用任何网络接口或资源?

概述

简单地说,我想设置一个 Linux 网关。简单的 NAT,转发基于家庭的 LAN 网关...无需systemdsystemd-networkd访问基于网络的接口。

基本原理

在这种极简模式下,我不需要使用 systemd-network 或 NetworkManager (甚至systemd)来访问任何网络接口。

做了什么?

我使用 Bind9、ISC DHCP、local/etc/resolv.confnftables满足我的所有网络需求。仅使用 systemd 进行启动序列(正如它最初设计的那样)。

我禁用了 systemd 的以下所有与网络相关的内容,除了 systemd 包本身(受到此启发尹的博客

systemctl disable systemd-resolved.service
systemctl stop systemd-resolved
systemctl stop systemd-networkd.socket 
systemctl stop systemd-networkd
systemctl stop networkd-dispatcher
systemctl stop systemd-networkd-wait-online
systemctl disable systemd-networkd.socket
systemctl disable systemd-networkd
systemctl disable networkd-dispatcher
systemctl disable systemd-networkd-wait-online
apt-get remove systemd-resolvconfd
apt-get remove systemd-networkd
apt-get remove openresolv
apt-get purge netplan.io
rm /etc/dhcp/dhclient-enter-hooks.d/resolved  #ISC now updates resolv.conf

并安装了

apt-get install ifupdown

问题

我的问题是nftables防火墙确实无法阻止每个进程的流量。

如何systemd在操作系统级别隔离所有进程使用任何网络接口?也许是某种团体资源限制器?

笔记

拜托,不需要 systemd 火焰战争。这是为了保留 systemd 的原始设计:最快的启动。

答案1

冒着被否决的风险,如果您不想systemd访问网络接口,请不要使用systemd.

多年来,我们看到 systemd-suite 吸收了越来越多的功能,其中一些需要网络访问。正如您自己所说:它是章鱼。 systemd 套件不同进程的相互依赖关系常常令人惊讶(至少对我来说)。这意味着,如果您不遵循 systemd 套件的流程,在几次升级之后,您将需要重新测试并重新配置所有内容。

对于真正的简约网关功能,我会考虑基于 busybox 的系统。

答案2

您可以删除systemd.然而,有相当多的程序依赖于它。

所以另一种方法是禁用并停止它systemctl

相关内容