You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NixOS配置中禁用所有网络流量与连接?

解决NixOS完全禁用网络流量的问题

我明白你想要在NixOS上彻底切断所有网络流量,并且能通过切换配置快速恢复正常的需求。你之前尝试的方法没生效,是因为NixOS的网络管理不止依赖NetworkManager,还有其他服务或接口状态在起作用,下面给你两种可靠的方案:

方案一:用防火墙规则彻底阻断所有流量(推荐)

这种方法不需要手动处理每个接口,通过防火墙规则直接拦截所有进出流量,配置简单且切换方便。

在你的configuration.nix中添加以下配置:

{ config, pkgs, ... }:
{
  # 启用系统防火墙
  networking.firewall.enable = true;
  # 拒绝所有出站流量
  networking.firewall.allowOutbound = false;
  # 拒绝所有入站流量(默认已拒绝,明确配置更保险)
  networking.firewall.allowInbound = false;

  # 禁用自动网络管理服务,避免接口被自动激活
  networking.networkManager.enable = false;
  networking.useSystemdNetworkd = false;
  # 关闭DHCP自动配置
  networking.useDHCP = false;
}

注意:如果你不需要阻断本地回环(lo接口),就不要添加额外的iptables规则——很多本地程序依赖回环通信,阻断后会导致异常。

配置完成后运行sudo nixos-rebuild switch,系统就会彻底切断所有网络流量。想要恢复正常的话,只需要把上述配置注释/删除,再重新执行sudo nixos-rebuild switch即可。

方案二:手动禁用所有网络接口

如果防火墙方案不符合你的需求,也可以直接强制所有接口处于down状态。这种方法需要处理每个接口,但能确保物理层面断开连接:

在configuration.nix中添加一个自定义systemd服务,用来禁用所有接口:

{ config, pkgs, ... }:
{
  systemd.services.disable-all-interfaces = {
    description = "Disable all network interfaces";
    wantedBy = [ "multi-user.target" ];
    serviceConfig = {
      Type = "oneshot";
      ExecStart = "${pkgs.iproute2}/sbin/ip link show | awk '/^[0-9]+:/ {print $2}' | sed 's/:$//' | xargs -I {} ${pkgs.iproute2}/sbin/ip link set {} down";
    };
  };

  # 同样禁用自动网络管理服务
  networking.networkManager.enable = false;
  networking.useSystemdNetworkd = false;
  networking.useDHCP = false;
}

这个服务会在系统启动时遍历所有网络接口并将其设置为down状态。恢复时删除该服务配置并重建系统即可。

为什么你之前的操作无效?

你只停止NetworkManager或禁用它的配置后仍有网络,是因为:

  • NixOS可能默认使用systemd-networkd作为备用网络管理器,即使NetworkManager关闭,它仍会激活接口;
  • 即使网络管理服务停止,已经处于up状态的接口不会自动down,流量依然可以通过这些接口传输。

内容的提问来源于stack exchange,提问作者Stephane Rolland

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:28:54