⛓️ 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:9091Voir toutes les options et leurs descriptions dans le fichier du module.
--- Tranlated By Open Ai Tx | Last indexed: 2026-06-13 ---