我正在使用 Linux Mint 19.3
我想跑的两个实例youtube-dl
。
所有流量terminal 1
应该经过常规网络。
所有流量terminal 2
应该经过VPN。
有没有什么命令可以使能够terminal 2
为所有未来的命令使用 VPN 连接?换句话说,是否有任何命令可以指示terminal 2
对所有未来的命令使用 VPN 连接?
我发现将unix程序绑定到特定的网络接口,但是我想在特定的终端上绑定VPN给所有以后发起的程序,而不是某个特定的程序。
我想要的是,打开一个终端并运行youtube-dl
以使用常规连接进行工作。但是,如果我启用 VPN(通过命令)并运行,youtube-dl
那么youtube-dl
将通过 VPN 连接进行工作。
因此,可能的最终结果是,同一程序的两个实例,一个通过常规网络,另一个通过 VPN,其中网络选择是实时的并且不是预定义的(通过路由表或类似的东西)。
我找到了一个工具VPN,但不确定这是否是我正在寻找的或者是否有更好的解决方案。
答案1
您不能“指示终端 2 对所有未来命令使用 VPN 连接”。
但是,您可以创建一个新的网络命名空间,在该命名空间中运行您的 VPN 或将 VPN 网络接口移动到该命名空间中(可能在以适当的方式将其连接到主网络命名空间和/或物理网络接口之后),然后在此网络命名空间中启动一个新的终端窗口,并让所有命令通过连接使用 VPN(并且仅使用 VPN 连接)。
谷歌上有很多关于网络命名空间的教程。您需要的主要命令是ip netns
.您还需要对网络基础知识有足够的了解才能连接网络命名空间。
是的,vpnns
工作方式非常相似。
答案2
您所问的问题已经在 StackExchange 上得到了解答:将unix程序绑定到特定的网络接口。我相信使用 App-Route-Jail 的解决方案将为您解决这个问题。我相信,您无法将终端窗口精确地绑定到 VPN,但您可以强制程序在执行时使用特定的网络接口。
如果有任何帮助,您可以使用正确的命令参数为 youtube-dl 创建一个包装器 shell 脚本,以强制其使用 VPN 并在终端 2 中使用该 shell 脚本来与 VPN 一起使用。
此类 shell 脚本的示例(需要 POSIX shell,例如 Bash)
#!/bin/bash
MARK=10 LD_PRELOAD=./mark.so /path/to/youtube-dl "$@"
请注意,这将要求您依赖两个可执行文件,一个始终通过正常网络运行,另一个始终通过 VPN。