Web Analytics

VPN-Confinement

⭐ 237 stars French by Maroka-chan

    ⛓️ VPN-Confinement ⛓️

    Un module NixOS qui vous permet de router le trafic des services systemd via un VPN tout en empêchant les fuites DNS.


[!IMPORTANT]
Pour "prévenir" les fuites DNS, ce module rend simplement la socket NSCD inaccessible à un service systemd. Cela peut causer d’autres problèmes, et les fuites n’ont été testées que lors de la résolution DNS via UDP. D’autres méthodes de résolution DNS comme DoT et DoH n’ont pas été testées, et le DNS peut fuir de différentes manières, il est donc toujours conseillé de surveiller et de tester vous-même les fuites DNS.

Installation

Nix Flake

{
  inputs = {
    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
    vpn-confinement.url = "github:Maroka-chan/VPN-Confinement";
  };

outputs = { self, nixpkgs, vpn-confinement, ... }: { # Change hostname, system, etc. as needed nixosConfigurations.hostname = nixpkgs.lib.nixosSystem { system = "x86_64-linux"; modules = [ ./configuration.nix vpn-confinement.nixosModules.default ]; }; }; }

Utilisation

Définir un espace de noms réseau VPN

vpnNamespaces. = { # The name is limited to 7 characters
  enable = true;
  wireguardConfigFile = ;
  accessibleFrom = [
    ""
  ];
  portMappings = [{
      from = ;
      to = ;
      protocol = ""; # protocol = "tcp"(default), "udp", or "both"
  }];
  openVPNPorts = [{
    port = ;
    protocol = ""; # protocol = "tcp"(default), "udp", or "both"
  }];
};

Ajouter un service systemd au namespace réseau VPN

systemd.services..vpnConfinement = {
  enable = true;
  vpnNamespace = "";
};

Exemple

# configuration.nix
{ pkgs, lib, config, ... }:
{
  # Define VPN network namespace
  vpnNamespaces.wg = {
    enable = true;
    wireguardConfigFile = /. + "/secrets/wg0.conf";
    accessibleFrom = [
      "192.168.0.0/24"
    ];
    portMappings = [
      { from = 9091; to = 9091; }
    ];
    openVPNPorts = [{
      port = 60729;
      protocol = "both";
    }];
  };

# Add systemd service to VPN network namespace systemd.services.transmission.vpnConfinement = { enable = true; vpnNamespace = "wg"; };

services.transmission = { enable = true; settings = { "rpc-bind-address" = "192.168.15.1"; # Bind RPC/WebUI to VPN network namespace address

# RPC-whitelist examples "rpc-whitelist" = "192.168.15.5"; # Access from default network namespace "rpc-whitelist" = "192.168.1.*"; # Access from other machines on specific subnet "rpc-whitelist" = "127.0.0.1"; # Access through loopback within VPN network namespace }; }; }

[!NOTE]
L'accès depuis l'espace de noms réseau par défaut se fait en utilisant l'adresse de l'espace de noms réseau VPN.\
curl 192.168.15.1:9091

Voir toutes les options et leurs descriptions dans le fichier du module.

--- Tranlated By Open Ai Tx | Last indexed: 2026-06-13 ---