每当我从不安全的位置(例如公共wifi)使用互联网时,我都喜欢使用ssh隧道(ssh -D port host
)来确保流量不会被监听。不幸的是,似乎有许多应用程序没有提供指定代理的方法(Flash是一个主要示例)。
感觉应该有某种方法可以对我的计算机中的所有网络流量使用隧道,但是我完全不知道该怎么做。任何帮助将不胜感激。
每当我从不安全的位置(例如公共wifi)使用互联网时,我都喜欢使用ssh隧道(ssh -D port host
)来确保流量不会被监听。不幸的是,似乎有许多应用程序没有提供指定代理的方法(Flash是一个主要示例)。
感觉应该有某种方法可以对我的计算机中的所有网络流量使用隧道,但是我完全不知道该怎么做。任何帮助将不胜感激。
Answers:
要执行您想要的操作,我建议使用sshuttle。
您可以这样使用它:
./sshuttle -r username@sshserver 0.0.0.0/0 -vv
它将自动为您隧穿所有TCP通信。您可以添加--dns
参数以使其也传输DNS流量。远程服务器只需要安装Python。
如果您只想隧道传输特定程序,则建议使用proxychains。
安装完成后,按以下方式启动ssh socks代理:
ssh -fND 127.0.0.1:<local port> username@sshserver
这将启动在<本地端口>上侦听的“ SOCKS”代理。
然后编辑/etc/proxychains.conf以指向与<本地端口>相同的端口。
最后,启动要代理的程序,如下所示:
proxychains <program name>
它应该工作。但是,一些程序在使用代理链时会遇到麻烦。还请记住,使用Firefox,您必须在about:config下更改其他项,以强制它通过代理进行DNS查找,而不是绕过它。
作为附加说明,在Web浏览器上。如果它们支持袜子代理,则无需执行任何其他操作即可使它们使用上述的ssh隧道,只需为SOCKS代理服务器输入127.0.0.1,为代理端口输入<local port>。
编辑3/29/16
由于该帖子仍然有一些赞誉,我想我将对其进行更新。Proxychains仍然存在于大多数Linux仓库中,并且仍然可以在Linux上使用。但是,该项目实际上已被放弃,无法在OSX上运行。对于Linux或OSX,我强烈建议升级到仍维护的fork:proxychains-ng:https : //github.com/rofl0r/proxychains-ng
除了可以在Linux和OSX上运行之外,它还易于编译,并且对DNS隧道具有更好的支持。
我还应该提到另一种选择,即红袜子。它的工作原理类似于proxychains(-ng),也可能在您的dist回购中:https : //github.com/darkk/redsocks
sshuttle -r root@host -x host 0/0
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).
一旦有了新界面,您只需将其设置为默认路由,这是一个不同的问题。
我已经开发了允许您通过系统范围内的SOCKS5代理转发所有TCP和UDP(可选)的软件。
http://code.google.com/p/badvpn/wiki/tun2socks
它甚至可以安装在路由器上,以转发来自局域网中计算机的所有连接。
基于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).
只是想清除一下(ssh -D端口主机),这不是一种不监听流量的100%安全方式。添加(ssh -D -c blowfish端口主机)将是一个更好的选择,因为您至少要在会话中添加加密。您可以添加更多选项,但只需在终端机或Google中输入“ man ssh”即可获得完整列表,这很容易。
我认为您正在寻找的选项是设置VPN(虚拟专用网络)
在着手设置自己的VPN之前,请查看本文,以了解两者之间的区别(SSH与VPN)或一个很好的摘要版本。如果您决定使用VPN路由,建议您使用OpenVPN,它是免费的,并提供大量文档和支持。
ssh -2 -C -D [...]
(强制使用SSH2,使用压缩)并删除-c
。根据我的系统man ssh
,SSH2中的密码列表默认为aes128-cbc,3des-cbc,blowfish-cbc,[etc]
。我的意思是,如果您请求-c blowfish
使用SSH1,则它的安全性远低于SSH2。
使用以下示例:
将端口80从远程主机转发到本地主机上的8888
ssh -fnN -L8888:localhost:80 user @ server
使用它来访问仅在远程主机上可用的服务
将端口80从您的本地主机转发到远程主机上的8888
ssh -fnN -R8888:localhost:80 user @ server
使用它可以使其他用户访问您的服务:Web服务器或其他。
干杯! :)