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

如何配置NixOS测试检查,使其可访问外部网络?

允许NixOS测试检查访问外部网络

问题描述

我有一个包含checks的flake.nix文件,其中一项检查在运行时需要从测试环境外部(互联网、本地网络)拉取资源。但测试运行在沙箱中,无法访问外部网络。请问是否可以配置检查或检查所用的机器,以允许访问外部网络?具体该如何操作?

示例flake.nix代码:

# flake.nix
{
  inputs = {
    nixpkgs.url = "nixpkgs/nixos-22.11";
    flake-utils.url = "github:numtide/flake-utils";
  };

  outputs = { self, nixpkgs, flake-utils }:
    flake-utils.lib.eachSystem
      (with flake-utils.lib.system; [ x86_64-linux ])
      (system:
        let
          pkgs = import nixpkgs {
            inherit system;
          };
        in
        {
          checks.test = pkgs.nixosTest {
            name = "test";
            nodes.n1 = { };
            testScript = ''
              n1.succeed("ping -c 1 8.8.8.8")  # ping google's DNS
            '';
          };

          formatter = pkgs.nixpkgs-fmt;
        }
      );
}

运行nix flake check时,ping操作因沙箱限制失败,报错:Exception: command ping -c 1 8.8.8.8 failed (exit code 2),希望该操作能成功执行。

注:已知与测试环境外部资源交互并非最佳实践,仍执意执行,风险自负。

解决方案

方法1:直接禁用测试沙箱

在pkgs.nixosTest配置中添加enableSandbox = false;参数,关闭沙箱限制后测试环境即可直接访问外部网络:

checks.test = pkgs.nixosTest {
  name = "test";
  enableSandbox = false; # 禁用沙箱
  nodes.n1 = { };
  testScript = ''
    n1.succeed("ping -c 1 8.8.8.8")  # ping google's DNS
  '';
};

方法2:保留沙箱并配置网络访问

如果需要保留沙箱的部分隔离特性,可以通过sandboxOptions允许测试访问宿主网络,同时给节点配置正确的网络参数:

checks.test = pkgs.nixosTest {
  name = "test";
  nodes.n1 = { config, pkgs, ... }: {
    networking.useDHCP = false;
    networking.interfaces.eth0.ipv4.addresses = [
      { address = "192.168.123.2"; prefixLength = 24; }
    ];
    networking.defaultGateway = "192.168.123.1";
    networking.nameservers = [ "8.8.8.8" ];
  };
  # 允许沙箱连接宿主网络
  sandboxOptions = [ "--network" "host" ];
  testScript = ''
    n1.succeed("ping -c 1 8.8.8.8")  # ping google's DNS
  '';
};

验证

修改完成后重新执行nix flake check,ping命令即可成功执行。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:22:48