如何使用 ssh 创建到特定端口的本地-远程-本地隧道

如何使用 ssh 创建到特定端口的本地-远程-本地隧道

我可以通过执行以下操作从我的 Windows 计算机(localhost - eth1)到我的 Linux 计算机(remotehost - eth0)建立 ssh 连接:

ssh [email protected]

因为我使用非标准端口,所以我不能使用它,所以我必须指定端口:

ssh -p remoteSSH [email protected]

然后我将 http 和 ssl 转发到远程主机的 http 和 ssl 端口。我有一些想在 Linux 机器上使用的服务,因此我使用这个:

ssh -L 80:127.0.0.1:80
ssh -L 443:127.0.0.1:443

最后,我尝试“安全地”将流量从 (localhost) 反向转发到 (remotehost) 并返回到 (localhost)。但是,对于此连接,我需要 socks 代理为 127.0.0.1:proxy1。我成功地通过上述转发方法创建了一个非 socks 代理,该代理将 proxy1 指向 (localhost) 上的 [特定端口,又名 proxy2],但我试图避免不断修改 html 文件以指向代理端口。

当我使用 Putty 时,除了动态 socks 连接(仅用于转发标准 http/s 流量)外,我已连接上述所有连接。我不想创建互联网代理。我已停止使用 Putty,因为它会断开连接,并且每次转发流量时都会崩溃。后者是一个已知错误:

http://www.chiark.greenend.org.uk/~sgtatham/putty/changes.html

These features were new in beta 0.61 (released 2011-07-12):
    Bug fix: corruption of port forwarding is fixed (we think).

These features were new in beta 0.59 (released 2007-01-24):
    Bug fix: SSH-1 connections tended to crash, particularly when using port forwarding.

These features were new in beta 0.58 (released 2005-04-05): 
    Fixed crashing bug with remote port forwarding.

These features were new in beta 0.53 (released 2002-10-01): 
    Various bug fixes, including (with luck) much greater stability in high-traffic port forwarding situations.

因此,在 Windows 上,我转到 cygwin 来使用 openssh。到目前为止,我想出的命令是:

ssh -t -t -L 80:127.0.0.1:80 -L 443:127.0.0.1:443 -p remoteSSH [email protected] -R proxy1:127.0.0.1:randomport "ssh -D randomport 127.0.0.1"

为了测试从代理1到代理2的连接,我在 Firefox 中设置了:

HTTP Proxy:                 Port:
SSL Proxy:                  Port:
FTP Proxy:                  Port:
SOCKS Host: 127.0.0.1       Port: proxy1
SOCKSv5
No Proxy for:

我收到一条响应,说代理服务器拒绝连接。我在 Windows 框中创建了允许连接的规则。我禁用了 Windows 防火墙,并通过以下方式在 Linux 框上的 iptables 中允许连接:

$IPTABLES -A OUTPUT -o eth1 -p tcp -m tcp -s 192.168.1.100 -d 192.168.1.200 --dport randomport -j ACCEPT

iptables 已设置为允许本地流量。我使用受密码保护的基于主机的私钥身份验证。我有 syslog-ng (cygwin) 日志记录 ssh。

也许,作为问题的替代或补充,有人可以指导我使用 Linux 和/或 Windows 工具来帮助我诊断问题。对于 Windows,我有 Windows 系统控制中心、Sysinternals Suite 和 Nirsoft Utilities。Windows 系统:Windows 7。Linux:Slackware 64

http://technet.microsoft.com/en-us/sysinternals/bb842062.aspx

http://www.kls-soft.com/wscc/

http://www.nirsoft.net/instinfo.html

答案1

我决定采用一种久经考验的反复试验的方法。这是允许访问代理 2 的方法:

ssh -t -t -D proxy1 -R proxy2:127.0.0.1:proxy2 -p remoteSSH [email protected]

在 Firefox 中,我现在可以输入:

https://127.0.0.1:proxy2

它将通过隧道(代理 1)将连接发送到本地代理(代理 2),本质上成为到特定端口的本地-远程-本地隧道。

虽然可以通过代理 1 访问代理 2,但允许代理 1 访问互联网。为了限制代理可以访问的内容,我根据手册页在远程主机 192.168.1.100 的 sshd_config 文件中添加了 PermitOpen 条目:

http://www.openssh.com/cgi-bin/man.cgi?query=sshd_config

PermitOpen 127.0.0.1:proxy2 127.0.0.1:80 127.0.0.1:443

相关内容