介绍:嗨,我一直在尝试让 VPN 和 ssh 命令协同工作。我已经成功使用 访问服务器ssh user@hostname
。但是当 VPN 处于活动状态时,我的所有互联网访问都会通过该 VPN。
目标:除了 SSH 连接之外,我想使用自己的互联网连接来做所有事情。
选项中断 SSH > VPN: 我注意到在“编辑VPN”-“IPv4 设置”标签 -“路线……”按钮。这似乎是解决方案,但如果我启用它,我就无法再连接“ssh 用户@主机名”命令,它会挂起直至超时。
想法:到目前为止,我的想法是它不起作用,因为主机名(来自 ssh 用户名@主机名)和网关(来自 VPN 设置)不同。但我对 ssh 或 VPN 了解不够多,不知道这一点。
有想法吗?ssh 中是否有我忽略的选项?我试过了ssh -b gatewayFromVPN username@hostname
,但似乎不起作用(我怀疑它应该起作用)。或者 VPN 设置中是否有可以解决这个问题的选项?
提前致谢。
概括
- 浏览等 > 互联网连接
- (同时)
- SSH > VPN 连接
“仅将此连接用于其网络上的资源”会破坏 SSH > VPN
答案1
我以前也想做类似的事情。我有两个想法:基于端口拆分和基于进程所有者拆分。事实证明,Linux 的网络系统可以处理这两种情况。
我在 Unix.SE 上问了两个问题。我还没有跟进任何问题,所以如果你尝试一下,请告诉我什么对你有用。
我敢说这两种技术之间有一些重叠,这就是我在这里提到它们的原因。我还为第二种技术提供了大量悬赏,以寻求一些切实可行的示例。我认为在用户之间拆分网络连接可能是对我们双方来说最有用的场景。
编辑:我刚刚在 Google 上搜索了iptables owner
一下找到了这个。这似乎表明几行脏的 iptables 就可以解决这个问题。我还要测试,但它看起来非常简单……
假设您有eth0
和eth1
连接,并且您希望用户bob
使用eth1
并且只使用eth1
,并将其他所有内容强制放到eth0
。这应该可以做到...
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -o eth0 -m owner --uid-owner bob -j DROP
iptables -A OUTPUT -o eth1 -m owner --uid-owner bob -j ACCEPT
iptables -A OUTPUT -o eth1 -j DROP
iptables -A OUTPUT -o eth0 -j ALLOW
我假设您可以将我们的替换eth1
为您的 VPN 连接的名称,并将其替换bob
为您创建的新用户,以便通过以下方式运行您的 ssh 连接:su -c ssh username@host bob
。
答案2
经过几个小时的搜索,我找到了一些足够简单的东西。
从技术上来说,这被称为分割隧道和这里你可以找到一个完美的教程来做到这一点。分割隧道你可以从不同的层面解决问题。你可以通过 VPN 路由所有工作网络流量,其他一切正常。
我知道这并不是您想要的解决方案,但毕竟它确实有效。
答案3
目前,通过在 Windows 7 中虚拟运行 Ubuntu,我已经实现了我想要的目标。(当前在 Ubuntu 12.04 上运行 VMware Player)这样,我在 Ubuntu 上的整个互联网都通过 VPN 进行,但我可以在没有 VPN 的 Windows 7 中使用浏览器等。
虽然这不是我的目标,但现在只能这么做了。
也许我可以在 Ubuntu 或其他地方虚拟运行 Ubuntu,这样将来就不再需要 Windows 了……