问题标签 [openvpn]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1033 浏览

ssh - 来自动态 IP 的 ssh/VPN 访问/旅行时。基于 knockd 或 dynDNS 的身份验证?

使用 knockd 与使用基于动态 DNS 的身份验证从动态 IP 地址或旅行(即一些随机酒店 IP)进行 ssh 或 VPN 登录的优缺点是什么?理想情况下,任何具有 ssh/VPN 客户端功能的设备都应该能够使用任何需要的附加客户端软件。

(另一种选择,保持 ssh / VPN 端口对所有人开放,这不是很有吸引力。)

我倾向于喜欢 knockd (或其他端口敲门守护程序),因为它不依赖于第 3 方来保持其不妥协的东西......

0 投票
2 回答
16612 浏览

winforms - 如何以编程方式断开 OpenVPN 连接?

我正在创建一个 WinForms 应用程序来启动和停止 Windows 上的 OpenVPN 连接。我正在尝试实现与 OpenVPN GUI for Windows ( http://openvpn.se/ ) 提供的相同功能,但使用我自己的基于 .NET 的 UI。

我正在使用以下方法开始连接:

这会调用 openvpn.exe 并成功建立连接。

但是,一旦建立连接,我无法确定终止连接的方法。我试过使用 Process.Kill()

这会终止进程,但不会恢复初始路由状态。实际上,在手动禁用/启用 LAN 卡之前,我无法访问网络。

在建立 VPN 连接之前输出“openvpn --show-net”:

使用 Process.Kill() 关闭 VPN 连接后的“openvpn --show-net”:

我也尝试发送进程WM_CLOSE / WM_QUIT / WM_ENDMESSAGE消息,但这些消息没有产生任何结果。


有关适当解决方案的更多信息:请参阅控制正在运行的 OpenVPN 进程中标题为使用管理界面的部分中的说明。

有关从 C#使用Telnet 的更多信息。

0 投票
2 回答
5939 浏览

c# - DEVCON.EXE(驱动工具)和 OpenVPN

我们编写了一个从托盘管理 OpenVPN 的应用程序,作为更大软件包的附加组件。

OpenVPN 包含一个名为 tapinstall.exe 的文件,用于安装 OpenVPN 适配器(或任何驱动程序)。进行一些研究后,该文件与 Microsoft 包含在 Windows DDK 中的名为 devcon 的命令行工具完全相同。OpenVPN 人只是将其重命名以供他们使用。

因此,我们在设置 (msi) 安装程序中以自定义操作使用它来安装驱动程序,在大多数情况下,它工作得很好。

时不时地,devcon 失败并挂起——永远不会退出。在那之后,您可以重新运行 devcon,它会安装驱动程序两次......这基本上会破坏 OpenVPN。

有没有人看到 devcon 的这个问题,知道它在做什么,或者知道解决它的方法?

作为替代解决方案,有人知道如何从 C# 安装驱动程序吗?(我们有一个 .inf 和一个 .sys 文件)

更新:我们发现这个问题非常罕见。当我们应用更新卸载 OpenVPN 适配器的 V8 版本,然后安装 OpenVPN 适配器的新版本 (V9) 时,最常发生这种情况。如果您在两次安装之间重新启动 PC,似乎也不会发生这种情况,因此我们最好在卸载时强制 PC 重新启动......

旁注:我听说有人使用 WiX 和 DifxAPI(我认为这就是所谓的)从 MSI 安装程序安装驱动程序。如果这可以在自定义操作中从普通 C# 完成,有什么想法吗?我们真的不想使用 WiX 重新开始我们的设置项目(这可能很耗时)。

0 投票
2 回答
5681 浏览

c# - C# - 干净地关闭 OpenVPN

我们编写了一个位于托盘中的应用程序,它控制 OpenVPN 作为更大应用程序的扩展。

如果你在命令行运行 openvpn.exe,你可以按 F4 关闭它。我们需要从 C# 发送相同的按键,但您只能将字符串值发送到 StandardInput。

我们被迫杀死 OpenVpn 来关闭它,这似乎在 Vista 上时不时地导致 BSOD ......

这是我在 MSDN 上的帖子的链接,该帖子也描述了该问题:MSDN 论坛

有谁知道如何使用标准输入向进程发送特殊击键?

或者也许是更干净地关闭 OpenVPN 的解决方法?

更新:

以下内容在传递给 StandardInput.Write() 时不起作用,F1 键在此示例中:

  • 控制台键.F1
  • "\x70"(F1 的十六进制值)
  • Convert.ToChar((int)ConsoleKey.F1)

我们已经正确地重定向了输入/输出,因为我们可以成功地将用户名/密码传递给 OpenVPN 没有问题。

更新 2:在 OpenVPN 的一些命令行选项文档中找到了这个:

--service exit-event [0|1] 应该在 OpenVPN 被另一个程序在这样的上下文中自动执行时使用,该上下文无法通过显示器或键盘与用户进行交互。通常,最终用户永远不需要显式使用此选项,因为当给定的 OpenVPN 配置作为服务运行时,它会由 OpenVPN 服务包装器自动添加。exit-event 是 Windows 全局事件对象的名称,OpenVPN 将持续监控此事件对象的状态,并在收到信号时退出。

第二个参数表示exit-event的初始状态,通常默认为0。

可以使用相同的退出事件参数同时执行多个 OpenVPN 进程。在任何情况下,控制进程都可以发出退出事件信号,导致所有此类 OpenVPN 进程退出。

我将如何在 C# 中使用它?“退出事件”是否表明他们提到了互斥锁?

0 投票
4 回答
20154 浏览

c# - Windows 上的 OpenVPN --auth-user-pass FILE 选项

如果您尝试通过 --auth-user-pass 开关将用户名/密码从文件传递给 OpenVPN,您会收到以下错误:

至少他们很有礼貌。

因此,我们的解决方法是在获得 Auth Username: 和 Auth Password: 提示时以编程方式写入“标准输入”(这是在 C# 中)。

有时间的东西不是 100% 可靠的,所以我正在寻找一种方法以不同的方式将凭据传递给 OpenVPN,结果发现了这篇文章:OpenVPN Post

它说您可以使用 --enable-password-save 选项重新编译源代码。有没有人能够做到这一点?

我的最后一个问题是:如何在客户端将身份验证用户名/密码传递给 openvpn.exe?OpenVPNGUI 是否以某种方式做到这一点(也许我们可以复制他们所做的)?

0 投票
1 回答
3081 浏览

permissions - 通过 OpenVPN 连接时,errno=13 是什么意思?

OpenVPN 连接的尾部(否则会显示成功)说(省略了前导时间戳):

注意:无法打开 TUN/TAP 开发 /dev/net/tun:权限被拒绝 (errno=13)
注意:尝试回退到内核 2.2 TUN/TAP 接口
无法动态分配 TUN/TAP 开发
退出

这里有什么问题?

0 投票
2 回答
12503 浏览

cloud - 是否可以在 Heroku 上设置 VPN?

是否可以在 heroku 上使用 openVPN 设置 VPN 以保持暂存环境的私密性?如果是这样,有人有文章或链接吗?

0 投票
1 回答
6220 浏览

python - 使用 python 期望运行 openvpn

我需要一个 python 脚本来自动运行打开的 vpn,但我使用 sudo 来运行打开的 vpn

那是我的终端命令。我必须提供 sudo 的密码,我可以使用 pexpect 运行该命令吗?我必须得到退出代码,因为我想知道 openvpn 是否成功运行

谢谢

0 投票
1 回答
7595 浏览

openvpn - OpenVPN TAP 驱动安装

我正在尝试通过 Tapinstall 在 Windows 中控制多个 OpenVPN 的 TAP 驱动程序实例。似乎因为所有设备都具有相同的 HWID——“tap0901”——我无法使用 tapinstall 删除任何一个——当我发出

此外,当我安装另一个实例时

所有其他的都被重置(使用那些现有的 tap 安装打开的连接被破坏),因为 tapinstall 尝试更新所有现有实例上的驱动程序。

到目前为止,我的解决方案是将 INF 文件中指定的 hwid 的所有实例重命名为其他名称,并将 .cat 和 .sys 文件也重命名为这个新名称;但是,这会破坏驱动程序签名。

有谁知道管理多个 OpenVPN TAP 驱动程序实例的任何替代方法,这些方法允许我:

  1. 删除驱动程序的任何单个实例,而不干扰其他实例的操作
  2. 在不干扰其他实例运行的情况下安装新实例

Win32 API 调用也可以;我正在尝试编写一个程序来自动执行此操作。

谢谢您的帮助!

0 投票
3 回答
5387 浏览

android - 是否有适用于 Android 的 VPN 提供程序 API?

有没有办法为 Android 构建一个 VPN“提供者”?一种向现有 VPN 基础设施添加新 VPN 类型的方法?例如,OpenVPN,尽管 pppoe 之类的东西也可能属于这一类。