内网穿透 -Frp部署

内网穿透 -Frp部署
无公网 IP(一般非电信运营商)的解决方案

写在前面

因为本人是小白,所以不管是服务端还是客户端均以越少使用代码越好,故
1.服务端:使用 APPNODE面板来安装和设置Frp Server端,同时 APPNODE来设置 NGINX的反向代理和强制使用 HTTPS 连接;
2.客户端:使用 DOCKER安装和设置Frp Client端;

注:APPNODE的安装教程

 对于有一定代码基础的朋友,可以直接去下载最新版本的 Frp,分别部属至服务端及客户端,然后通过终端命令行的模式设置FRP,类似的教程网络上很多,但由于要输入一堆命令,此方法不适合小的。

注:Frp最新版下载地址

环境说明

小白用的是 APPNODE面板,同时考虑网络应用的安全性,使用了 SSL 方式进行访问,同时希望域名不带端口号,大部分人用的可能是“宝塔面板”,原理类似。

部署步骤

  1. 通过面板安装和设置frp服务端

  2. 设置服务端nginx,确保访问使用SSL模式

  3. 安装和设置客户端frp,保证与服务端设置相呼应

     APPNODE注册地址:https://www.appnode.com/
     APPNODE和宝塔都是一键安装,自选服务器环境这些共同点,小白用的是前者,使用面板的目的是图形 化的来设置服务器的服务,避免使用终端和输入代码。(实际是小白不会 :))
    

1.Appnode面板界面及frp服务端安装和设置

公网服务器frp服务端安装及设置 
服务端设置
bindport        = 7000
token           = 令牌(确保安全,与客户端一致即可)
bindaddr        = 0.0.0.0(代表本地)
allowports      = 2000-3000,4000-50000
dashboardport   = 7500
dashboarduser   = admin
dashboardpwd    = 管理面板密码
kcpbindport    = 7000
vhosthttpport  = 8080
vhosthttpsport = 8443
subdomainhost   = XXX

2.设置服务器 Nginx反代,强制使用https访问

强制https访问

编辑 Nginx,在原有代码下,追加下述代码,保证服务端(8080),穿透至客户端应用端口(19999)并转成 Https 访问

server {
    listen                     80;
    listen                     443 ssl http2;
    server_name                bitwarden.phocssout.ga;
    ssl_certificate            依据自身路径调整/ssl/site.crt;
    ssl_certificate_key        依据自身路径调整/ssl/site.key;
    ssl_prefer_server_ciphers  on;
    ssl_ciphers                ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_protocols              TLSv1 TLSv1.1 TLSv1.2;
    ssl_session_cache          shared:SSL:5m;
    ssl_session_timeout        5m;
    keepalive_timeout          75s;
    keepalive_requests         100;
    access_log                 依据自身路径调整/log/nginx/access.log;
    error_log                  依据自身路径调整/log/nginx/error.log;

    if ($scheme = http) {
        return  301 https://$host$request_uri;
    }

    gzip                       on;
    gzip_comp_level            6;
    gzip_min_length            1k;
    gzip_types                 text/plain text/css text/xml text/javascript text/x-component application/json application/javascript application/x-javascript application/xml application/xhtml+xml application/rss+xml application/atom+xml application/x-font-ttf application/vnd.ms-fontobject image/svg+xml image/x-icon font/opentype;

location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;
        proxy_set_header Host $host:80;
        proxy_ssl_server_name on;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

3. 安装和设置客户端frp

docker 安装设置frpc客户端
客户端设置 frpc.ini
[common]
server_addr = 服务器 IP(切记域名无效)
server_port = 7000
token = 令牌(确保安全,与服务端一致即可)

[bitwarden phocssout]
type = http
local_ip = 127.0.0.1
local_port = 19999
custom_domains = bitwarden.phocssout.ga
use_encryption = true
use_compression = true