我如何通过 SSH 传输所有网络流量?

我如何通过 SSH 传输所有网络流量?

每当我从不安全的位置(例如公共 wifi)使用互联网时,我喜欢使用 ssh 隧道 ( ssh -D port host) 来确保我的流量不会被嗅探。不幸的是,似乎有很多应用程序不提供指定代理的方法(Flash 就是一个主要的例子)。

感觉应该有某种方式利用隧道来全部我试图从我的计算机中获取网络流量,但我完全不知道该怎么做。任何帮助都将不胜感激。

答案1

为了做你想做的事,我建议穿梭巴士

你可以像这样使用它:

./sshuttle -r username@sshserver 0.0.0.0/0 -vv

它将自动为您隧道传输所有 TCP 流量。您可以添加参数,--dns让它也隧道传输您的 DNS 流量。远程服务器只需安装 Python 即可。

如果你只想隧道特定程序,我建议代理链

安装完成后,像这样启动 ssh socks 代理:

ssh -fNTD 127.0.0.1:<local port> username@sshserver

这将启动一个监听<本地端口>的“SOCKS”代理。

然后编辑 /etc/proxychains.conf 以指向与 <本地端口> 相同的端口:

socks5 127.0.0.1 <localport>

最后启动您想要代理的程序,如下所示:

proxychains <program name>

它应该可以正常工作。但是,一些程序在使用代理链时会遇到麻烦。另外请记住,使用 Firefox 时,您必须更改 about:config 下的其他项目,以强制它通过代理进行 DNS 查找,而不是绕过它。

另外需要注意的是,在 Web 浏览器上。如果它们支持 socks 代理,则您无需执行任何额外操作即可让它们使用上面提到的 ssh 隧道,只需为 SOCKS 代理服务器输入 127.0.0.1,为代理端口输入 <本地端口>。

编辑于 2016 年 3 月 29 日

由于这篇文章仍然有一些赞,所以我想更新一下。Proxychains 仍然在大多数 Linux 存储库中,并且仍然可以在 Linux 上运行。但是,该项目实际上已被放弃,无法在 OSX 上运行。对于 Linux 或 OSX,我强烈建议升级到仍在维护的分支:proxychains-ng:https://github.com/rofl0r/proxychains-ng

除了可以在 Linux 和 OSX 上运行之外,它还易于编译,并且对 DNS 隧道有更好的支持。

我还应该提到另一个选项,即 redsocks。它的工作原理与 proxychains(-ng) 类似,并且也可能位于您的 dist repo 中:https://github.com/darkk/redsocks

编辑 11/27/19 如果您选择使用 proxychains 路线,请使用 proxychains-ng。与旧版本相比,它修复了一些严重的错误,例如:https://github.com/rofl0r/proxychains-ng/issues/292

答案2

man ssh给出了一个这样的示例。基于 ssh 的 vpn:

SSH-BASED VIRTUAL PRIVATE NETWORKS
     ssh contains support for Virtual Private Network (VPN) tunnelling using
     the tun(4) network pseudo-device, allowing two networks to be joined
     securely.  The sshd_config(5) configuration option PermitTunnel controls
     whether the server supports this, and at what level (layer 2 or 3 traf-
     fic).

     The following example would connect client network 10.0.50.0/24 with
     remote network 10.0.99.0/24, provided that the SSH server running on the
     gateway to the remote network, at 192.168.1.15, allows it:

       # ssh -f -w 0:1 192.168.1.15 true
       # ifconfig tun0 10.0.50.1 10.0.99.1 netmask 255.255.255.252

~~剪掉~~

     Since a SSH-based setup entails a fair amount of overhead, it may be more
     suited to temporary setups, such as for wireless VPNs.  More permanent
     VPNs are better provided by tools such as ipsecctl(8) and isakmpd(8).

一旦启动了新的接口,您就必须将其设为默认路由,这是一个不同的问题。

答案3

在 ssh 中查找“隧道”选项。这将创建一个隧道设备,您可以为其分配 IP 地址,然后更改默认路由以使用该隧道。

答案4

基于 SSH 的虚拟专用网络 ssh 支持使用 tun(4) 网络伪设备进行虚拟专用网络 (VPN) 隧道传输,从而允许两个网络安全地连接起来。sshd_config(5) 配置选项 PermitTunnel 控制服务器是否支持此功能以及在哪个级别(第 2 层或第 3 层流量)。

 The following example would connect client network 10.0.50.0/24 with
 remote network 10.0.99.0/24 using a point-to-point connection from
 10.1.1.1 to 10.1.1.2, provided that the SSH server running on the gateway
 to the remote network, at 192.168.1.15, allows it.

 On the client:

       # ssh -f -w 0:1 192.168.1.15 true
       # ifconfig tun0 10.1.1.1 10.1.1.2 netmask 255.255.255.252
       # route add 10.0.99.0/24 10.1.1.2

 On the server:

       # ifconfig tun1 10.1.1.2 10.1.1.1 netmask 255.255.255.252
       # route add 10.0.50.0/24 10.1.1.1

 Client access may be more finely tuned via the /root/.ssh/authorized_keys
 file (see below) and the PermitRootLogin server option.  The following
 entry would permit connections on tun(4) device 1 from user “jane” and on
 tun device 2 from user “john”, if PermitRootLogin is set to
 “forced-commands-only”:

   tunnel="1",command="sh /etc/netstart tun1" ssh-rsa ... jane
   tunnel="2",command="sh /etc/netstart tun2" ssh-rsa ... john

 Since an SSH-based setup entails a fair amount of overhead, it may be
 more suited to temporary setups, such as for wireless VPNs.  More perma‐
 nent VPNs are better provided by tools such as ipsecctl(8) and
 isakmpd(8).

相关内容