前提
首先你要确定你的服务器是否被墙了,先排除客观上的问题,诸如欠费、流量用尽、被恶意攻击、被当地运营商挂起等服务器处于异常状态,应先自行或联系客服解决。
然后再逐一排除问题:
1.管理后台显示 vps 运行正常,ssh 登录服务器也正常,但国内无法 ping 通,境外可以,一般该 IP 是被黑名单,测试方法可以参考载入IPIP进行甄别。
2.可以 ping 通,也可以 telnet 过去,但 ssh 无法正常登录,抓包或日志显示应答超时,这个时候一般是 TCP 阻断。
3.域名解析到该 IP 后网站加载一直在打转无法加载,一般是 IP 段已经被 DNS 污染。
4.连接不稳定,经常断线,连接服务器时候经常莫名被断线,敲击命令时候延迟非常大,极小概率为 TCP 干扰。
5.服务器 22/80/443 等常用端口一切正常,可是部分端口被关闭,排除运营商通知,一般是端口被墙。
补救
无论遇到哪种被墙的方式,都证明这台服务器不太安全了,你需要从根本上解决问题就是更换服务器,不过可以采取如下补救措施抢救一下:
1.向当地 idc 提出更换 IP,诸如 vultr 和 azure 都可以随时切换 ip 的。
2.使用跳板机,国内服务器转发。阿里云等厂商的服务器,或不过墙的 IPLC 服务器,大概率与被墙 vps 能直接通信,做个转发便即可正常使用,代价是多买一个国内服务器。顺道说一下,如果国外线路不好,用转发方式也能大幅提升网速,降低被墙概率,具体操作请移步附录。
3.使用 CDN 服务,CDN 的公共 ip 基本不会被封,将域名解析到 CDN,流量经过 CDN 再到被墙服务器,代价是需要一个域名并配置 CDN 服务。
4.换端口。针对端口被墙情形,更换新端口和加密方式,或者使用更高级的重建梯子方法,诸如 trojan/v2+1ray 等。
以上方法不能完全根除被墙的风险,俗称治标不治本,就敏感时期,应该低调、少上外网,需要从根本上解决问题还是更换服务器为妥。
附录
跳板机教程:
既然要通过国内服务器转发流量,首先必须要一台国内服务器。国内服务器的选择有很多,建议使用 NAT VPS,年付几十到一两百,NAT VPS 中转请参考:使用 NAT VPS 中转加速。也可以用阿里云、腾讯云这些大厂商的服务器,质量和服务都比较有保障。由于服务器仅做流量转发用,买最低配置的就可以,1 核 256m 内存足够,看视频的话带宽买大点,也可以选择流量计费模式(不适合视频党)。
本文以 CentOS 7/8 系统为例介绍国内服务器中转配置,分别介绍 firewalld 流量转发和 nginx 流量转发两种方式。
使用 Nginx 流量转发
1.安装 Nginx
2.配置 nginx
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
| 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的任意一个数字,无需与境外服务器的端口号相同 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; .... }
|
3.检查错误
nginx -t
如显示
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
则配置正常,如果有问题,请按照提示更改,这里提两个常见问题。
1.查看防火墙有没有放行 nginx 监听的端口firewall-cmd --state
输出 running 表示防火墙正在运行,如果显示没有此命令则为防火墙未安装。可以使用以下命令将端口放行。
1 2
| firewall-cmd --permanent --add-port=nginx中配置的端口号/tcp fireawll-cmd --reload
|
如果服务器厂商上层还有安全组/防火墙,诸如阿里云/腾讯云等购买的 vps,请记得也要到控制台放行相应端口。
Nginx 效率不如 firewalld/iptables,但是配置更灵活,使用上更便利。
使用防火墙(内核)方式流量转发
1.确认是否安装防火墙,检测与安装如下
1 2 3 4 5
| firewall-cmd --state
yum install -y firewalld systemctl enable firewalld systemctl start firewalld
|
2.配置转发
1 2 3 4 5 6 7 8 9 10 11
| echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf sysctl -p firewall-cmd --permanent --add-masquerade # 9090可以改成其他端口 firewall-cmd --permanent --add-port=9090/tcp # 一般TCP即可以下也是 firewall-cmd --permanent --add-port=9090/udp # 9090和上面保持一致,国外ip改成你国外vps的ip,443改成国外服务器端口 firewall-cmd --permanent --add-forward-port=port=9090:proto=tcp:toaddr=国外ip:toport=443 firewall-cmd --permanent --add-forward-port=port=9090:proto=udp:toaddr=国外ip:toport=443 firewall-cmd --reload
|
以上就配置结束了。
如果中转 trojan 流量,需要在客户端配置文件中的两个 verify 选项设置为 false