没有root的VPN服务器(滩头阵地)?

jdm*_*jdm 8 ssh-tunneling vpn

如何在没有 root 的主机上设置 VPN 服务器?

我有以下限制:

  • 在服务器 A 上,我没有 root。我只能在我的主目录中操作。特别是,我也无法创建tun设备。
  • 在客户端 B 上,我拥有完全的控制权,可以安装我想要的东西。
  • SSH 端口转发 (-L/-R) 和 SOCKS 代理 (-D) 有效,但在我的情况下无效。我客户端上的软件使用许多不同的端口,所以我倾向于使用 SOCKS,但它也在内核级别运行,所以我无法说服它tsocks使用代理。可行的一件事是在 B 上的 VM 中运行我的客户端软件,然后对整个 VM 进行袜子化 - 但我真的不想走那条路。
  • 我不需要特权端口,所以 A 上的非 root 应该没问题。
  • 它不一定是“真正的”VPN,但精神上类似的东西就足够了。我在 B 上的进程应该能够与 A(和连接的设备)上的进程通信,就像它们在一台机器上一样,而无需重写它们。

我不相信有一种优雅的方法可以做到这一点 -正确的方法是询问 A 的管理员,或者将 B 插入同一个网络 - 但现在我只是好奇这是否可以作为证明的概念。

小智 7

好吧,服务器 A 上的“我没有 root”访问权限可能是创建良好 VPN 解决方案的一个问题,因为:

  • ip-ip 隧道需要接口操作;
  • pptp还需要root权限才能创建接口;
  • OpenVPN甚至可以以非特权用户身份运行,但需要做一些技巧,例如允许 sudoip命令以允许创建tun接口;
  • 具有降低权限的strongSwan需要CAP_NET_ADMINCAP_NET_RAW才能工作,并且以非 root 用户身份运行 IKE 守护程序会破坏对 iptables updown 脚本的支持。

我的朋友还剩下什么:依靠SSH 袜子代理。在本地机器上,以 root 身份运行:

ssh -C2qTnN -D 8080 username@serverA
Run Code Online (Sandbox Code Playgroud)

意思是压缩,仅 SSH2,安静,强制伪 tty 分配,从 /dev/null 重定向 stdin,并将 ssh 客户端置于“主”模式以进行连接共享。

现在,您所要做的就是运行您的应用程序。如果它像 Firefox 一样具有原生 SOCKSv5 支持,只需将“localhost:8080”配置为代理服务器即可。

如果您的应用程序本身不支持此代理,请使用proxychains运行它。只需安装在您的客户端上即可。

不幸的是,您不想采用的唯一解决方案似乎是唯一的解决方案。

链接: