Как сделать контейнер nixos видимым для внешней сети

Я хотел бы иметь контейнер NIXOS, который виден внешней сети. Я хотел бы установить статический IP-адрес для этого контейнера, чтобы какой-то другой ноутбук в моей домашней сети мог подключиться к нему по ssh. Контейнер должен быть доступен не только для хоста, на котором он находится. Итак, давайте обозначим эти компьютеры. (A) является хостом nixos. (B) контейнер, расположенный на (A). И (C) - это третий отдельный компьютер в сети, который хочет получить доступ (B) по сети. Если кто-то может предоставить простейшую конфигурацию, которая должна быть добавлена ​​к /etc/nixos/configuration.nix файл для достижения этого, который был бы чрезвычайно признателен.

                                 + ------------------- + + -------- + | | | | | + -------- + A | | C | | | | | | + -----------------------------------> B | | | | | | | | + -------- + | | | | | + -------- + | | | | | + ------------------- +

2 ответа

Для завершения ответа, для варианта 2 вы можете использовать опцию контейнера privateNetwork = false; отключить пространство имен сети. См. Код container.nix для деталей. С помощью этой опции вы будете использовать один и тот же IP-адрес между хостом и контейнером.

Другой вариант - переадресация порта из контейнера на хост с опциями ForwardPorts.

Более общий способ (который работает и с NixOps) это использовать хост networking.nat вариант, например:

networking.nat = {
    enable=true;
    internalInterfaces=["ve-+"];
    externalInterface = "enp0s3";
    forwardPorts = [
      {destination = "mycontainerIP:80"; sourcePort = 80;}
    ];
  };

Есть несколько способов сделать это, и все они не являются специфичными для NixOS.

  1. Организовать VPN между машинами и контейнерами. Например, запустите мастер OpenVPN на своем хосте и клиенты OpenVPN в контейнерах и других машинах. Вы получите подсеть, в которой вы можете получить доступ к своим контейнерам по отдельным IP-адресам. К сожалению, это требует много настроек (я делал это раньше).
  2. Не используйте отдельные виртуальные устройства Ethernet для контейнеров. Тогда все контейнеры будут совместно использовать адреса портов хоста и будут одинаково доступны извне. Это требует переназначения портов для конфликтующих сервисов.
  3. Прокси желаемых портов от хоста к контейнеру (я сделал это с помощью haproxy)
Другие вопросы по тегам