配置国内服务器中转流量

firewalld流量转发

firewalld是CentOS7/8默认的防火墙前端软件,绝大多数主机商提供的镜像都已经安装。

#如果执行 firewall-cmd --state的输出不是 running,请使用下面命令安装并开启firewalld:
yum install -y firewalld
systemctl enable firewalld
systemctl start firewalld

接着配置转发。假设你将国内服务器8080端口流量转发到国外vps的443端口,转发命令如下:

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
firewall-cmd --permanent --add-masquerade

# 8080可以改成其他端口

firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=8080/udp

# 8080和上面保持一致,国外ip改成你国外vps的ip,443改成国外代理的端口

firewall-cmd --permanent --add-forward-port=port=8080:proto=tcp:toaddr=国外ip:toport=443
firewall-cmd --permanent --add-forward-port=port=8080:proto=udp:toaddr=国外ip:toport=443
firewall-cmd --reload

firewalld转发的好处是效率高,直接在内核执行。

Nginx流量转发

Nginx是非常强大的四层、七层反向代理软件,功能强大,在互联网上广泛应用。本节介绍Nginx转发配置。

1. 首先安装nginx:yum install -y epel-release && yum install -y nginx;

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

# 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的任意一个数字,无需与境外服务器的端口号相同

        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;

    ….

}

用nginx -t检查配置有没有错误,有如下输出说明配置正确:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

如果有问题,请按照提示更改。

3. 改好后设置开机启动并启动nginx:

systemctl enable nginx && systemctl start nginx

接着用ss -ntlp| grep -i nginx查看软件是否正常运行。如果输出为空,可能的问题是端口号冲突,改成其他端口号试试;或者是selinux的限制,用下面命令禁用selinux:

sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
setenforce 0

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

firewall-cmd --permanent --add-port=nginx中配置的端口号/tcp
fireawll-cmd --reload

5. 如果服务器厂商上层还有防火墙/安全组(阿里云/腾讯云等购买的vps),请记得到控制台放行相应端口。