Web Analytics

VPN-Confinement

⭐ 237 stars Japanese by Maroka-chan

    ⛓️ VPN-隔離 ⛓️

    systemdサービスのトラフィックをVPN経由でルーティングし、DNSリークを防止するNixOSモジュールです。


[!IMPORTANT]
DNSリークを「防止」するために、このモジュールは単純にNSCDソケットへのアクセスをsystemdサービスから遮断します。これにより他の問題が発生する可能性があり、リークはUDP経由のDNS解決時のみテストされています。DoTやDoHなど他のDNS解決方法はテストされておらず、DNSは他の方法でもリークする可能性があるため、常にDNSリークの監視とテストを自身で行うことが推奨されます。

インストール

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 ]; }; }; }

使用方法

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"
  }];
};

VPNネットワーク名前空間にsystemdサービスを追加する

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

# 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 }; }; }

[!注意]
デフォルトのネットワーク名前空間からのアクセスは、VPNネットワーク名前空間のアドレスを使用して行います。\
curl 192.168.15.1:9091

すべてのオプションとその説明は、モジュールファイルでご覧いただけます。

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