本文基于WireGuard VPN技术,简要介绍组建HyBrid Cloud的方法,并以此实现MC服务器的公网运行。

1、VPN服务器购买:这里推荐CloudIPLC家的NAT类型的服务器,29.99元每月,搭配优惠码:welcome还有九折优惠,配置不高,但用于部署WireGuard VPN服务器已经绰绰有余了;或者喵云家的服务器也很不错;这里我选择的是一台1C 384M的云服务器,购买之后我们来到NAT VPS端口映射这里查看我们SSH登录的端口被转发到了哪里:

简单图床-EasyImage

2、使用ssh连接到云服务器,你可以使用下面的命令简单的链接到云服务器:

ssh root@IP地址 -p 公网端口号

简单图床-EasyImage

3、部署WireGuard VPN,这里我们选择使用CentOS 8的操作系统方便我们进行WireGuard VPN的部署:

(1)使用ELREPO仓库更新CentOS 8的内核:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm

为了加快国内的访问 可更改其为国内的镜像源:

首先备份之前的ELREPO仓库:

sudo cp /etc/yum.repos.d/elrepo.repo /etc/yum.repos.d/elrepo.repo.bak

然后编辑 /etc/yum.repos.d/elrepo.repo 文件,在 mirrorlist= 开头的行前面加 # 注释掉;并将 http://elrepo.org/linux 替换为 https://mirrors.tuna.tsinghua.edu.cn/elrepo。然后我们删除掉除了elrepo.repo以外的文件,下载阿里云CentOS 8.5.2111过期源:

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo

顺便启用一下EPEL软件源:

yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm

更换为阿里境内的镜像:

sed -i 's|^#baseurl=https://download.example/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*

最后更新软件包缓存:

dnf clean all && dnf makecache

等待命令执行完成即可:

简单图床-EasyImage

使用命令安装内核:

yum --enablerepo=elrepo-kernel install kernel-ml

简单图床-EasyImage

等待安装完成即可,重启,查看当前启动的内核是否为6.x:

uname -a

简单图床-EasyImage

至此 系统的基本配置已经完成。接下来即可进入WireGuard VPN的部署流程。

(2)使用脚本快速配置WireGuard:

dnf install git git-* && git clone https://git.cloudyun.top/h6223986/Linux-Shells.git

执行脚本后即可:

bash run-wireguard.sh

选择 wireguard_install即可,等待安装完成:

我们使用命令cat /etc/wireguard/client.conf 查看我们的配置文件:

将配置文件导入到Wireguard VPN即可:

至此WireGuard的配置就基本结束了!注意去NAT服务器那里将WireGuard的UDP端口转发出去:

(3)配置nginx

安装Nginx:

dnf install nginx nginx-* vim -y

等待命令安装完成即可,然后我们编辑一下nginx的配置文件:

vim /etc/nginx/nginx.conf

想要偷懒的话可以直接拿我这里的配置覆盖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 {
    log_format tcp_format '$time_local|$remote_addr|$protocol|$status|$bytes_sent|$bytes_received|$session_time|$upstream_addr|$upstream_bytes_sent|$upstream_bytes_received|$upstream_connect_time';
    access_log /www/wwwlogs/tcp-access.log tcp_format;
    error_log /www/wwwlogs/tcp-error.log;
    include /www/nginx.proxy.d/*.conf;
}
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;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
    include /www/nginx.conf.d/*.conf;

}

按照该配置文件,Nginx的四层代理配置应该在/www/nginx.proxy.d目录下

我们编辑我们的一个代理配置文件:

upstream 3389_proxy {
        hash $remote_addr consistent;
        server 10.77.77.2:3389 weight=5 max_fails=3 fail_timeout=30s;
}

    # 提供转发的服务,即访问localhost:9001,会跳转至代理socket_proxy指定的转发地址
server {
        listen 3389;
        listen 3389 udp;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass 3389_proxy;
}

这里注意,我们的proxy_pass要和上面的upstream 后的代理名称保持一致,Listen后填写监听的端口。如果需要监听UDP,配置listen 端口号 udp; 这样写即可;

然后我们重新启动nginx服务:

[root@webservice nginx.proxy.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@webservice nginx.proxy.d]# systemctl restart nginx
[root@webservice nginx.proxy.d]# systemctl enable --now nginx

这样我们就将10.77.77.2的IP的服务代理到我们NAT类型服务器的端口上了;

然后我们需要回到CloudIPLC的管理面板上,选择我们的NAT端口管理,点击你的订阅服务,点击添加规则配置内网端口到公网端口的转发:

至此,就顺利的将服务器上在多层NAT下的家宽环境穿透到了公网了,接下来就可以配置一下域名解析到公网服务器即可!