use network bridge to make sure container access to intenet
This commit is contained in:
		
							parent
							
								
									c84f295940
								
							
						
					
					
						commit
						7871e788aa
					
				
					 7 changed files with 51 additions and 41 deletions
				
			
		
										
											Binary file not shown.
										
									
								
							| 
		 Before Width: | Height: | Size: 133 B After Width: | Height: | Size: 11 MiB  | 
| 
						 | 
					@ -20,6 +20,7 @@
 | 
				
			||||||
      hostName = "Cape";
 | 
					      hostName = "Cape";
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    users.deploy.enable = true;
 | 
					    users.deploy.enable = true;
 | 
				
			||||||
 | 
					    containers.interface = "ens3";
 | 
				
			||||||
    programs = {
 | 
					    programs = {
 | 
				
			||||||
      transfer-sh.enable = true;
 | 
					      transfer-sh.enable = true;
 | 
				
			||||||
      rustypaste = {
 | 
					      rustypaste = {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,13 +5,12 @@
 | 
				
			||||||
    domain = "forgejo.youthlic.fun";
 | 
					    domain = "forgejo.youthlic.fun";
 | 
				
			||||||
    sshPort = 2222;
 | 
					    sshPort = 2222;
 | 
				
			||||||
    httpPort = 8480;
 | 
					    httpPort = 8480;
 | 
				
			||||||
    interface = "ens3";
 | 
					 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  networking.firewall.allowedTCPPorts = [ 2222 ];
 | 
					  networking.firewall.allowedTCPPorts = [ 2222 ];
 | 
				
			||||||
  services.caddy.virtualHosts = {
 | 
					  services.caddy.virtualHosts = {
 | 
				
			||||||
    "forgejo.${config.youthlic.programs.caddy.baseDomain}" = {
 | 
					    "forgejo.${config.youthlic.programs.caddy.baseDomain}" = {
 | 
				
			||||||
      extraConfig = ''
 | 
					      extraConfig = ''
 | 
				
			||||||
        reverse_proxy 10.231.136.102:8480
 | 
					        reverse_proxy 192.168.111.101:8480
 | 
				
			||||||
      '';
 | 
					      '';
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,13 +4,12 @@
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  youthlic.containers.miniflux = {
 | 
					  youthlic.containers.miniflux = {
 | 
				
			||||||
    enable = true;
 | 
					    enable = true;
 | 
				
			||||||
    interface = "ens3";
 | 
					 | 
				
			||||||
    adminCredentialsFile = config.sops.secrets."miniflux".path;
 | 
					    adminCredentialsFile = config.sops.secrets."miniflux".path;
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  services.caddy.virtualHosts = {
 | 
					  services.caddy.virtualHosts = {
 | 
				
			||||||
    "miniflux.${config.youthlic.programs.caddy.baseDomain}" = {
 | 
					    "miniflux.${config.youthlic.programs.caddy.baseDomain}" = {
 | 
				
			||||||
      extraConfig = ''
 | 
					      extraConfig = ''
 | 
				
			||||||
        reverse_proxy 10.231.137.102:8485
 | 
					        reverse_proxy 192.168.111.102:8485
 | 
				
			||||||
      '';
 | 
					      '';
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,46 @@
 | 
				
			||||||
{ ... }:
 | 
					{ config, lib, ... }:
 | 
				
			||||||
 | 
					let
 | 
				
			||||||
 | 
					  cfg = config.youthlic.containers;
 | 
				
			||||||
 | 
					in
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  imports = [
 | 
					  imports = [
 | 
				
			||||||
    ./forgejo.nix
 | 
					    ./forgejo.nix
 | 
				
			||||||
    ./miniflux.nix
 | 
					    ./miniflux.nix
 | 
				
			||||||
  ];
 | 
					  ];
 | 
				
			||||||
 | 
					  options = {
 | 
				
			||||||
 | 
					    youthlic.containers = {
 | 
				
			||||||
 | 
					      enable = lib.mkEnableOption "containers";
 | 
				
			||||||
 | 
					      interface = lib.mkOption {
 | 
				
			||||||
 | 
					        type = lib.types.nonEmptyStr;
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      bridgeName = lib.mkOption {
 | 
				
			||||||
 | 
					        type = lib.types.nonEmptyStr;
 | 
				
			||||||
 | 
					        default = "br0";
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					  config = lib.mkIf cfg.enable {
 | 
				
			||||||
 | 
					    networking = {
 | 
				
			||||||
 | 
					      bridges."${cfg.bridgeName}".interfaces = [
 | 
				
			||||||
 | 
					      ];
 | 
				
			||||||
 | 
					      interfaces."${cfg.bridgeName}" = {
 | 
				
			||||||
 | 
					        useDHCP = true;
 | 
				
			||||||
 | 
					        ipv4.addresses = [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            address = "192.168.111.1";
 | 
				
			||||||
 | 
					            prefixLength = 24;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					      nat = {
 | 
				
			||||||
 | 
					        enable = true;
 | 
				
			||||||
 | 
					        internalInterfaces = [
 | 
				
			||||||
 | 
					          cfg.bridgeName
 | 
				
			||||||
 | 
					          "ve-+"
 | 
				
			||||||
 | 
					          "vb-+"
 | 
				
			||||||
 | 
					        ];
 | 
				
			||||||
 | 
					        externalInterface = cfg.interface;
 | 
				
			||||||
 | 
					      };
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,25 +18,16 @@ in
 | 
				
			||||||
        type = lib.types.port;
 | 
					        type = lib.types.port;
 | 
				
			||||||
        default = 8480;
 | 
					        default = 8480;
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      interface = lib.mkOption {
 | 
					 | 
				
			||||||
        type = lib.types.nonEmptyStr;
 | 
					 | 
				
			||||||
        example = "ens3";
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  config = lib.mkIf cfg.enable {
 | 
					  config = lib.mkIf cfg.enable {
 | 
				
			||||||
    networking.nat = {
 | 
					    youthlic.containers.enable = true;
 | 
				
			||||||
      enable = true;
 | 
					 | 
				
			||||||
      internalInterfaces = [ "ve-+" ];
 | 
					 | 
				
			||||||
      externalInterface = cfg.interface;
 | 
					 | 
				
			||||||
      enableIPv6 = true;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    containers."forgejo" = {
 | 
					    containers."forgejo" = {
 | 
				
			||||||
      ephemeral = true;
 | 
					      ephemeral = true;
 | 
				
			||||||
      autoStart = true;
 | 
					      autoStart = true;
 | 
				
			||||||
      privateNetwork = true;
 | 
					      privateNetwork = true;
 | 
				
			||||||
      hostAddress = "10.231.136.1";
 | 
					      hostBridge = "${config.youthlic.containers.bridgeName}";
 | 
				
			||||||
      localAddress = "10.231.136.102";
 | 
					      localAddress = "192.168.111.101/24";
 | 
				
			||||||
      bindMounts = {
 | 
					      bindMounts = {
 | 
				
			||||||
        "/var/lib/forgejo" = {
 | 
					        "/var/lib/forgejo" = {
 | 
				
			||||||
          hostPath = "/mnt/containers/forgejo/state";
 | 
					          hostPath = "/mnt/containers/forgejo/state";
 | 
				
			||||||
| 
						 | 
					@ -99,6 +90,7 @@ in
 | 
				
			||||||
          };
 | 
					          };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          networking = {
 | 
					          networking = {
 | 
				
			||||||
 | 
					            defaultGateway = "192.168.111.1";
 | 
				
			||||||
            firewall = {
 | 
					            firewall = {
 | 
				
			||||||
              enable = true;
 | 
					              enable = true;
 | 
				
			||||||
              allowedTCPPorts = [
 | 
					              allowedTCPPorts = [
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,25 +9,16 @@ in
 | 
				
			||||||
      adminCredentialsFile = lib.mkOption {
 | 
					      adminCredentialsFile = lib.mkOption {
 | 
				
			||||||
        type = lib.types.nonEmptyStr;
 | 
					        type = lib.types.nonEmptyStr;
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      interface = lib.mkOption {
 | 
					 | 
				
			||||||
        type = lib.types.nonEmptyStr;
 | 
					 | 
				
			||||||
        example = "ens3";
 | 
					 | 
				
			||||||
      };
 | 
					 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
  config = lib.mkIf cfg.enable {
 | 
					  config = lib.mkIf cfg.enable {
 | 
				
			||||||
    networking.nat = {
 | 
					    youthlic.containers.enable = true;
 | 
				
			||||||
      enable = true;
 | 
					 | 
				
			||||||
      internalInterfaces = [ "ve-+" ];
 | 
					 | 
				
			||||||
      externalInterface = cfg.interface;
 | 
					 | 
				
			||||||
      enableIPv6 = true;
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    containers."miniflux" = {
 | 
					    containers."miniflux" = {
 | 
				
			||||||
      ephemeral = true;
 | 
					      ephemeral = true;
 | 
				
			||||||
      autoStart = true;
 | 
					      autoStart = true;
 | 
				
			||||||
      privateNetwork = true;
 | 
					      privateNetwork = true;
 | 
				
			||||||
      hostAddress = "10.231.137.1";
 | 
					      hostBridge = "${config.youthlic.containers.bridgeName}";
 | 
				
			||||||
      localAddress = "10.231.137.102";
 | 
					      localAddress = "192.168.111.102/24";
 | 
				
			||||||
      bindMounts = {
 | 
					      bindMounts = {
 | 
				
			||||||
        "/var/lib/miniflux" = {
 | 
					        "/var/lib/miniflux" = {
 | 
				
			||||||
          hostPath = "/mnt/containers/miniflux/state";
 | 
					          hostPath = "/mnt/containers/miniflux/state";
 | 
				
			||||||
| 
						 | 
					@ -41,18 +32,6 @@ in
 | 
				
			||||||
          isReadOnly = true;
 | 
					          isReadOnly = true;
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
      };
 | 
					      };
 | 
				
			||||||
      forwardPorts = [
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          containerPort = 8485;
 | 
					 | 
				
			||||||
          hostPort = 8485;
 | 
					 | 
				
			||||||
          protocol = "tcp";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          containerPort = 8485;
 | 
					 | 
				
			||||||
          hostPort = 8485;
 | 
					 | 
				
			||||||
          protocol = "udp";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      ];
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
      config =
 | 
					      config =
 | 
				
			||||||
        { lib, ... }:
 | 
					        { lib, ... }:
 | 
				
			||||||
| 
						 | 
					@ -92,6 +71,7 @@ in
 | 
				
			||||||
          };
 | 
					          };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          networking = {
 | 
					          networking = {
 | 
				
			||||||
 | 
					            defaultGateway = "192.168.111.1";
 | 
				
			||||||
            firewall = {
 | 
					            firewall = {
 | 
				
			||||||
              enable = true;
 | 
					              enable = true;
 | 
				
			||||||
              allowedTCPPorts = [ 8485 ];
 | 
					              allowedTCPPorts = [ 8485 ];
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue