我希望有人能理解这一点,我会尽我所能解释。
我正在尝试通过 ssh 隧道将所有流量从 xxx224 上的端口 6999 转发到 xxx218 上的端口 7000。
以下是一些 ASCII 艺术:
|browser|-----|Squid on x.x.x.224|------|ssh tunnel|------<satellite link>-----|Squid on x.x.x.218|-----|www|
3128 6999 7000 80
当我删除 ssh 隧道时,一切都正常运行。
这个想法是关闭 ssh 隧道上的加密(以节省带宽)并打开最大压缩(以节省更多带宽)。这是因为它是卫星链路。
这是我一直在使用的 ssh 隧道:
ssh -C -f -C -o CompressionLevel=9 -o Cipher=none [email protected] -L 7000:172.16.1.224:6999 -N
问题是,我不知道如何将 xxx224 上的 Squid 数据传送到 ssh 隧道?我是不是做错了?我应该在 xxx218 上创建 ssh 隧道吗?我使用 iptables 阻止 xxx224 上的 squid 读取端口 80,而是从端口 6999 传送数据(即通过 ssh 隧道)。我需要另一条 iptables 规则吗?
非常感谢您的任何评论。
提前谢谢了,
关于 Eduardo Ivanec 的问题,以下是netstat -i any port 7000 -nn
来自 xxx218 的一份转储:
14:42:15.386462 IP 172.16.1.224.40006 > 172.16.1.218.7000: Flags [S], seq 2804513708, win 14600, options [mss 1460,sackOK,TS val 86702647 ecr 0,nop,wscale 4], length 0
14:42:15.386690 IP 172.16.1.218.7000 > 172.16.1.224.40006: Flags [R.], seq 0, ack 2804513709, win 0, length 0
更新 2:
当我运行第二条命令时,浏览器中出现以下错误:
ERROR
The requested URL could not be retrieved
The following error was encountered while trying to retrieve the URL: http://109.123.109.205/index.php
Zero Sized Reply
Squid did not receive any data for this request.
Your cache administrator is webmaster.
Generated Fri, 01 Jul 2011 16:06:06 GMT by remote-site (squid/2.7.STABLE9)
远程站点是 172.16.1.224
当我做
tcpdump -i any port 7000 -nn
我得到以下信息:
root@remote-site:~# tcpdump -i any port 7000 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked), capture size 65535 bytes
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
channel 2: open failed: connect failed: Connection refused
答案1
如果我理解正确的话,你的隧道定义有问题。你似乎正在使用当前命令行将流量从当前主机(我假设它是 .224)上的端口 7000 转发到 .224 本身上的端口 6999。
尝试一下这个:
ssh -N -g -f -C -o CompressionLevel=9 -o Cipher=none [email protected] -L 6999:172.16.1.218:7000
或者,如果 172.16.1.218:7000 不能直接访问(我猜是的,因为否则你可能会直接连接到它)你可能意味着连接到 172.16.1.218:
ssh -N -g -f -C -o CompressionLevel=9 -o Cipher=none [email protected] -L 6999:localhost:7000
的格式-L
是<localport>:<remotehost>:<remoteport>
。<remotehost>
相对于目标主机,因此在这种情况下localhost
应该可以工作。
请注意,我添加了以下内容-g
,以防您想从不同于 .224 的机器使用隧道(我假设您在 .224 上运行 ssh)。