0

我最近开始使用 nix 包管理器作为单用户安装(非守护程序)。

我想知道如何配置 openconnect ,最好使用vpn-slice一个 vpnc-script 替代品,用于简单和安全的拆分隧道

我可以看到openconnect的默认 nix 包配置。我假设我想使用诸如override /或overlay 之类的东西。(我还不清楚这两者之间的区别以及何时使用其中一个。)

尽管如此,我试图弄清楚如何使用 nix 进行配置的步骤自然是:

  1. 基本二进制安装(覆盖/覆盖/派生)
  2. 配置特定的 vpn 连接
  3. 启动(提示输入密码和二级 otp 通行证)
  4. 停止

理想情况下,集成oath-toolkit会很棒。例如,oathtool --totp -b <secret>

4

1 回答 1

0

我发现一个不错的选择是创建一个nix shell 文件

例如vpn-wrapper.nix

with import <nixpkgs> {};
with pkgs.python37Packages;

let

    python = python37;
    openconnect = pkgs.openconnect.overrideAttrs (oldAttrs: rec {
      buildInputs = oldAttrs.buildInputs ++ [ libproxy ];
      configureFlags = oldAttrs.configureFlags ++ [ "--with-libproxy" ];
    });
    vpn-slice = buildPythonPackage rec {
      name = "vpn-slice";
      version = "v0.13";

      src = pkgs.fetchFromGitHub {
         owner = "dlenski";
     repo = "${name}";
     rev = "${version}";
     sha256 = "1ibrwal80z27c2mh9hx85idmzilx6cpcmgc15z3lyz57bz0krigb";
      };

      propagatedBuildInputs = [ setproctitle ];

      meta = {
        homepage = "https://github.com/dlenski/vpn-slice";
        description = "vpnc-script replacement for easy and secure split-tunnel VPN setup";
        license = stdenv.lib.licenses.gpl3Plus;
        maintainers = with maintainers; [ dlenski ];
      };
    };

in mkShell {
   name = "vpn-env";
   buildInputs = [ vpn-slice openconnect libproxy ];
   shellHook = ''
     echo "Ready to slice your vpn!"
   '';
}

然后您可以通过脚本执行 openconnect:

#!/usr/bin/env nix-shell
#! nix-shell vpn-wrapper.nix -i bash

OPENCONNECT=$(which openconnect)
VPNSLICE=$(which vpn-slice)

USERNAME=$1

$OPENCONNECT --libproxy --passwd-on-stdin --user=“$USERNAME” -s $VPNSCLICE ...

可以在此处找到更扩展的示例(wip) 。

于 2020-04-14T18:01:31.617 回答