通过国内服务器转发流量

经本人亲身实践,通过国内服务器转发科学上网流量不仅能有效避免墙的干扰,还有加速的作用。流量转发说白了就是从“国内->境外vps”变成了“国内->国内vps->境外vps”,看起来多此一举,实际上是有道理的:国内大厂商国内服务器的延迟一般在50ms以内,但出入境流量都走高级线路,加起来一算延迟实际上是降低了。如果你购买的是不过墙的IPLC服务器,那就更牛逼了,虽然流量也贵,但是延迟低、速度快、不过墙,爽的一批。

中转属于硬件加速 ,代价是额外需要一台国内的服务器(大概几十块钱一个月),优点是更稳定、能(比较)有效防止境外ip或端口被封。一些付费翻墙工具的高级线路也使用该技术做加速,可见折腾是有道理的。

配置国内服务器

既然要通过国内服务器转发流量,首先必须要一台国内服务器。国内服务器的选择有很多,阿里云、腾讯云等各种云基本上都可以。个人建议是购买大品牌的,不仅接入网络线路更好(BGP多线接入),而且服务质量更有保障。由于服务器仅做流量转发用,买最低配置的就可以,1核1G足够,看视频的话带宽买大点,也可以选择流量计费模式(不适合视频党)。

个人推荐安装的操作系统是CentOS 7/8,下文的操作基于该系统。

购买好服务器后,首先安装流量转发工具。本人常用的是 nginx 和 haproxy,因为 nginx 还可搭建迷惑性的网站,所以建议用nginx。

首先安装nginx:

1
yum install -y nginx

接着配置nginx,编辑/etc/nginx/nginx.conf文件,加入转发配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
worker_connections 1024;
}

# 增加的配置
stream {
server {
listen 端口号; # 端口号改成1-65535中的任意一个数字,例如8081
proxy_pass 境外ip:境外端口号; # 用境外ip和端口号替换
}
}
# 转发配置结束

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
....
}

配置中增加了以 stream 开头的那一段,其他都是自带的。将上面代码中的ip和端口换成你的,然后保存文件。用nginx -t检查配置有没有错误,有如下输出说明配置正确:

1
2
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

如果有问题,请安装提示更改。改好后设置开机启动并启动nginx:

1
systemctl enable nginx && systemctl start nginx。

如果你的服务器启动了防火墙,记得把nginx监听的端口放行。怎么看防火墙是否开启呢?输入firewall-cmd --state,输出是”running”表示防火墙正在运行。用如下命令把端口放行并且禁用selinux:

1
2
3
4
firewall-cmd --permanent --add-port=nginx中配置的端口号/tcp
fireawll-cmd --reload
sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
setenforce 0

如果服务器厂商上层还有防火墙/安全组,请记得到控制台放行相应端口。

配置好后,在你的ss/ssr/v2ray等软件里配置国内ip和端口号,看看能否正常连上。如果出现问题,用ss -ntlp查看端口是否被监听,以及firewall-cmd –list-all查看防火墙是否放行了端口。

配置境外服务器

原则上只要境外服务器没被墙或者端口被封,配置好国内服务器就能用且应该有加速效果。对境外服务器配置一番,主要是为了降低墙的干扰,减少ip被墙的机率。

首先还是安装nginx,安装和启动nginx的命令见上文。建议放一些静态页面(比如网上的网页模板)替换默认页面(上传到/usr/share/nginx/html目录下),让墙探测的时候看到托管了网站,并不是完全走看不懂的流量。

接下来才是配置境外服务器的重点:除了ssh的22端口,网站的80/443端口,其他端口只允许国内服务器连接。操作如下:

1. 首先启动系统防火墙(如果没开启过):

1
systemctl enable firewalld && systemctl start firewalld

2. 删除之前放行过SS/ssr/v2ray等端口(如果配置过):

1
firewall-cmd --permanent --remove-port=端口/tcp

3. 仅允许国内ip连接该服务器:

1
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="xxx.xxx.xxx.xxx" port protocol="tcp" port="xxxx" accept"

经过如上配置后,gfw探测你的vps,除了ssh、网站等常用端口,ss/ssr/v2ray的端口根本无法连接,墙的概率自然就降低了。

其他

1
2
3
4
1、nginx支持转发流量到多个服务器实现负载均衡,配置上需要用到upstream块
2、如果用的是iptables,把firewalld命令替换成iptables命令执行就可以
3、如果动手能力强,最好把境外vps配置得像一个业务机器,例如一个有各种爬虫访问的网站,基本上就稳如狗了(本人用的就是这种);
4、配置客户端时,ip和端口填国内服务器的,其他信息(密码、加密方式等)和国外服务器保持一致。
博主QQ:1012405802
技术交流QQ群:830339411
版权声明:网站内容有原创和转载,如有侵权,请联系删除,谢谢!!
感谢打赏,93bok因你们而精彩!!(支付宝支持花呗)
0%