0

我想要一个外部网络可见的 nixos 容器。我想为该容器设置一个静态 IP,我家网络上的其他笔记本电脑可以通过 ssh 连接到该容器。容器应该可以被更多的人访问,而不仅仅是它所在的主机。因此,让我们标记这些计算机。(A) 是 nixos 主机。(B) 是位于 (A) 上的容器。并且 (C) 是网络上想要通过网络访问 (B) 的第三台独立计算机。如果有人可以提供应该添加到/etc/nixos/configuration.nix文件中以实现此目的的最简单的配置,那将不胜感激。

                                 +-------------------+
+--------+ | |
| | | +--------+ 一个 |
| C | | | | |
| +-----------------------------------> B | |
| | | | | |
+--------+ | | | |
                                 | +--------+ |
                                 | |
                                 | |
                                 +-------------------+

4

2 回答 2

1

要完成 danbst 答案,对于选项 2,您可以使用容器选项privateNetwork = false;来禁用网络命名空间。 有关详细信息,请参阅 container.nix 代码。使用此选项,您将在主机和容器之间共享相同的 IP 地址。

另一种选择是使用ForwardPorts 选项将端口从容器转发到主机。

一种更通用的方式(也适用于 NixOps)使用主机networking.nat选项,例如:

networking.nat = {
    enable=true;
    internalInterfaces=["ve-+"];
    externalInterface = "enp0s3";
    forwardPorts = [
      {destination = "mycontainerIP:80"; sourcePort = 80;}
    ];
  };
于 2018-04-26T12:59:55.210 回答
1

有几种方法可以做到这一点,而且这里并不是 NixOS 特有的。

  1. 在机器和容器之间组织 VPN。例如,在您的主机上启动 OpenVPN 主服务器,在容器和其他机器上启动 OpenVPN 客户端。您将获得一个子网,您可以在其中通过单独的 IP 访问您的容器。不幸的是,这需要大量配置(我以前做过)。
  2. 不要为容器使用单独的虚拟以太网设备。然后所有容器将共享主机的端口地址,并且可以从外部平等地访问。但是,这需要为冲突的服务重新映射端口。
  3. 代理从主机到容器的所需端口(我使用haproxy
于 2017-09-09T23:00:37.667 回答