SSH 隧道上的 DNS

Cih*_*ser 7 networking dns ssh tunnel macos

我想设置我的 OSX 系统,以便所有网络流量都通过 SSH 隧道完成。

为此我编写了一个小脚本,这些是它执行的命令:

# setup tunnel
ssh -fN -D 1080 -p 22 user@remote

# start up redsocks
sudo redsocks -c /tmp/redsocks.conf -p /tmp/redsocks.pid

# forward all tcp traffic to tunnel
sudo ipfw add 0010 \
    fwd 127.0.0.1,12345 \
    tcp from me \
    to any not dst-port 12345 \
           not dst-port 1080 \
           not dst-ip REMOTE_IP
Run Code Online (Sandbox Code Playgroud)

我使用 redsocks 为我的 ssh 隧道创建一个 http 代理(以便我可以通过 ipfw将所有tcp 流量转发给它),redsocks.conf 如下所示:

base {
    log_debug = on;
    log_info = on;
    log = "file:/tmp/redsocks.log";
    redirector = generic;
}
redsocks {
    local_ip = 127.0.0.1;
    local_port = 55660;
    ip = 127.0.0.1;
    port = 1080;
    type = socks4;
}
Run Code Online (Sandbox Code Playgroud)

到目前为止一切似乎都正常,我的 OSX 系统上的所有 TCP 流量都是通过 ssh 隧道完成的,但问题在于 UDP 流量,因此 DNS 查询不起作用。

如何在本地计算机上获取 DNS 以通过 SSH 隧道工作?

pil*_*ona 3

您的ipfw \xe2\x80\xa6线路仅转发 TCP 流量。也许添加以下行?

\n\n
sudo ipfw add 0011 fwd 127.0.0.1,12345 \\\n                   udp from me \\\n                   to any not dst-port 12345 \\\n                          not dst-port 1080 \\\n                          not dst-ip REMOTE_IP\n
Run Code Online (Sandbox Code Playgroud)\n\n

添加set -x(用于调试)和set -e(如果任何命令失败则立即失败)也是一个好主意。

\n\n
    \n
  • 人们通常应该使用术语“SSH 隧道”来指代tunSSH tap
  • \n
  • 端口转发是隧道的一种特定形式,但在本文中仍应仅将其称为“端口转发”。
  • \n
  • 除快速临时作业外,请勿使用 SSH 隧道(如 和 中所示-oTunnel) 。\n\n-oTunnelDevice
  • \n
  • DNS 可以使用 TCP 作为传输。它不限于 UDP,尽管这是首选传输方式。
  • \n
\n