如果我将SSH用于SOCKS代理,DNS连接是否通过它?


14

ssh -D 8080 my server用来创建SOCKS代理。然后,我将OS X配置localhost:8080为用作SOCKS代理。我正在使用它来访问互联网而不受监视。

我正在使用Google的DNS服务器(8.8.8.8),但是如何确保DNS查询通过SSH隧道?


1
“不受监视”是一种幻想
Machineaddict

Answers:


22

我知道答案有点晚了,但是对于参考和那些仍在寻找答案的人,

network.proxy.socks_remote_dnsfirefox config中的属性(在地址栏中键入about:config)设置为TRUE(只需双击该属性即可切换值),以启用对本地/远程socks5代理的dns查找。

PS:我不确定其他浏览器:(


1
对于喜欢UI的用户,位于“首选项”→“高级”→“网络”选项卡→“设置”按钮(用于“连接”)→“使用SOCKS v5时的代理DNS”。
jwd

我注意到DNS不能通过HTTP的代理服务器,但它确实适用于HTTPS。怎么可能这样呢?这是设计的吗?(我使用的是Firefox)
Eugene D. Gubenkov

8

如果它是SOCKS 5代理,并且客户端程序支持它,则DNS将通过该代理。大多数浏览器通过Socks 5代理支持DNS,但是可能需要特殊配置。

如果您的目标是网上隐私,则应使用privoxy之类的东西。Privoxy将清除Web请求的标头,并确保所有流量(包括DNS)都通过Socks 5代理。在privoxy本地运行,您可以ssh用来建立Socks 5流量的隧道。


2

您不能开箱即用,因为SSH隧道仅用于TCP / IP连接-如果没有特殊设置,UDP流量将无法通过该隧道。基本上你需要创建一个FIFO做一些权谋与netcat的描述在这里。然后,您可以从远端框中使用Google的DNS。


1

那边所述,您的 系统范围的查找不会被隧道化

如果您需要基于SSH的解决方案,则可以从这里获得启发 或使用 SSHuttle(例如,此处提到 )。有一个补丁程序可以轻松转发DNS查询。

YMMV,但我在以下方面取得了成功:

#!/bin/bash
# Taken from http://stackoverflow.com/questions/4594319/shell-replace-cr-lf-by-comma
DNSSERVERS=$(nmcli d show | grep DNS | awk '{print $2}' | sed -e 'H;${x;s/\n/,/g;s/^,//;p;};d' )
sshuttle  \
    -vvv                \
     --dns-hosts ${DNSSERVERS}   \
    -r server   \
    254.254.254.254/32

0

如pfo所述,SSH隧道仅用于TCP流量,并且应用程序必须了解SOCKS代理。

如果您希望通过隧道进行传输,则需要适当的VPN。看一下类似OpenVPN的东西。


0

这取决于您的应用程序。例如,Firefox将主机名发送到SOCKS代理,而没有对其进行解析。在这种情况下,您不必为隐私做任何事情。您可以通过wireshark确认。

PS。假设您使用的是SOCKS5代理。SOCKS4不支持主机名。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.