如何拯救被墙服务器

前提

首先你要确定你的服务器是否被墙了,先排除客观上的问题,诸如欠费、流量用尽、被恶意攻击、被当地运营商挂起等服务器处于异常状态,应先自行或联系客服解决。

然后再逐一排除问题:
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

作者

Catooilg

发布于

2020-08-04

更新于

2025-02-10

许可协议

评论