利用SSH隧道加速电信和联通网络之间的通信速率

时间:2024-04-01 20:42:36

首先要吐槽一下电信和联通的网络之间通信真是让人吐血!

 

 

场景:

公司内部有一台Windows的Web服务器,由于域名备案的关系暂时只能屈居公司的小机房。但可悲的办公楼只能拉联通的光纤(其他运营商只能拉ADSL)。通过网管配置好端口映射以后就可以从外网访问。

 

服务放开出去以后就发现打开速度慢到难以接受。事前其实也是知道不同网络运营商之间的通信是不好,可没想到会如此糟糕。

图一是直接从外部访问公司内部的服务器速度很慢,但内网是很快,说明程序和服务器是没有问题的。

 

 


利用SSH隧道加速电信和联通网络之间的通信速率

 

图一

 

 

后来我在电信IDC机房找到一台Linux服务器配了Nginx做代理服务器,初始情况有所改善。但是也有访问很慢的时候,比图一定时候好。

 


利用SSH隧道加速电信和联通网络之间的通信速率

图二

 

后来试了弃用联通的光纤,将电信机房的代理服务器指向公司原来电信的ADSL(由于上行的512所以一直用联通的光纤做服务器出口配置),结果代理服务器连公司Web服务器的端口都Telnet不通。利用SSH隧道加速电信和联通网络之间的通信速率

 

后来突发奇想:我用联通的网络通过SSH连接到电信的Linux服务器速度还不错,是否能够在代理服务器那边连接一条SSH连接到公司的接口机,然后转发公司内网的那台Web服务器的80端口。

 

方案如下:

 


利用SSH隧道加速电信和联通网络之间的通信速率

图三

 

 

 

 

具体操作:

 

1. 登录电信的代理服务器(Linux操作系统)

2. 在代理服务器使用SSH登录公司内部的接口机

 

ssh -tt -L 7003:192.168.1.100:7001 [email protected]

(说明:将内网Web服务器192.168.1.100的7001端口转发到本机的7003端口) 

3. 由于SSH做的端口转发不可以被服务器外部所访问,所以这里我们加多一层代理将7003端口转发为80端口,我用的是linux下的rinetd程序转发7003端口到80的。

/etc/rinetd.conf 配置如下

 

0.0.0.0 80 127.0.0.1 7003
 

启动rinetd以后就可以访问代理服务器的80端口,嘻嘻~~~实际访问的是公司内网的Web服务器,而且速度极快,和内网差不多。

 

 

通过上面3个步骤应该可以说SSH隧道这个方法是可行的。接下来我们要这个做成后台服务,因为SSH连接是可能会断开的,一旦断开意味着服务也随之中断。

 

好在公司有一个C语言写的主控程序:我们通过主控程序来启动SSH端口转发这条命令(记得加上-tt参数否则会自动退出SSH连接),SSH端口转发如果退出主控程序会再次执行SSH端口转发这条命令,保证服务不会因为SSH退出而中断。

 

 

 

 

 

2012-01-30下午部署这套方案到现在还是很稳定。希望它管用吧。