一个常规的数据包流向:
用户网络环境 ----> 国外VPS ----> 目标国外网站
其中,第二段链路往往是比较流畅的(如果你不是又回过头来访问国内网站的话), 而第一段链路波动就比较大,尤其不同运营商会有不同表现。可能联通宽带可以很快访问,换移动宽带就很慢,甚至换了手机4G就完全访问不了。 这种速度、可靠性不稳定的访问体验是非常差的。
一个比较好的方案是使用一台国内机器作为中转。
用户网络环境 ----> 国内VPS ----> 国外VPS ----> 国外目标网站
首先,完全不要担心多了一步中转是否会影响速度(延时),因为本来IP数据包就会经过多次路由转发,添加一台机器中转相当于手动优化了路由规则。 绝大多数情况下,经过中转会降低大大降低数据包从用户端到国外目标网站的传输时间。
像阿里云腾讯云这样的大厂,他们的机房都在主干网上,并且针对国内各个运营商的线路都做了优化。 因此可以保证在新的数据流动路径上,第一段链路在绝大多数情况下都是快速稳定的。
至于第二段链路,国内VPS到国外VPS。由于阿里云等厂商基本都是BGP机房,出国线路也比较快速和稳定。 此外,由于是两个机房之间的通信,并且都有公网IP,没有NAT问题。
这三段链路中,第二段和第三段链路的带宽都不是瓶颈,因为阿里云可以选择按流量计费然后带宽选择100Mb,国外流量更加便宜大碗,VPS基本上都是1Gb带宽。 所以整条链路带宽瓶颈就是用户的宽带带宽。
中转工具
常用的、也是网上最常搜到的中转方案,是使用iptables和HaProxy 两个工具都有致命缺点:
iptables只是简单转发,没有负载均衡功能,并且配置相对不友好。
HaProxy是专门的负载均衡器,可惜只支持TCP。虽说大多数时候够用,但很多时候我们确实需要UDP,譬如查询DNS或者玩游戏。
所以这篇文章主要介绍用Nginx来进行流量转发和负载均衡,它支持UDP这一点弥补了HaProxy的不足。 并且Nginx支持插件扩展,可以实现更丰富的负载均衡功能。
建议使用docker来部署Nginx,优点是快捷方便,且适合有洁癖的同学。 不过缺点是不方便自定义Nginx模块。
配置文件如下:
没必要做过多解释了,会Nginx的同学自然会配置。“拿来主义者”(非贬义)对Nginx配置参数也没兴趣,能直接用就行。
把自己的服务器地址填在对应位置,然后运行Nginx即可。
建议使用docker + docker-compose部署:
新建docker-compose.yml文件:
version:'2'services:nginx_lb:image:nginx:alpineports:-"443-444:443-444"-"443-444:443-444/udp"volumes:-./nginx.conf:/etc/nginx/nginx.conf
执行docker-compose up -d即可。
以及别忘了在ECS控制台配置安全组规则,打开Nginx监听的端口(此处为443-444, udp+tcp端口)。
NGINX 做流量中转
直连
网友评论