Frp配合Nginx实现多域名内网穿透

1. 前言

之前的文章介绍了怎么使用第三方平台SakuraFrp搭建内网穿透,使用简单,但是使用下来还有一定缺陷,如节点可能随时失效;国内必须有备案域名;有数量限制等。

现在无论腾讯云还是阿里云都很便宜,刚好自己的服务器和域名已经通过了备案,所以就自己搭建,安全放心稳定,再配合Nginx的方向代理功能(Nginx知识点击这里),可以实现同一个外部端口,不同域名,访问不同内部端口的页面,非常方便,再也不用记住一堆端口了,在外只需要域名和固定端口即可访问内部不同内容。

2. 搭建Frp

sudo mkdir -p /usr/local/frp
cd /usr/local/frp
sudo wget https://github.com/fatedier/frp/releases/download/v0.40.0/frp_0.40.0_linux_amd64.tar.gz
sudo tar -zxvf ./frp_0.40.0_linux_amd64.tar.gz
sudo cd frp_0.40.0_linux_amd64.tar.gz  & ls

国内服务器可能wget失败,可以自行添加github相关的host,具体百度已经有好多了,这里就不重复了。

也可以点击下载Frp Github 地址,然后上传至服务器中推荐MobaXterm超级终端,自带文件传输。

Frp程序分为两个Frps和Frpc,对应服务端和客户端,Frps放在云服务器上,Frpc放在内网客户端上,同样配置文件也是区分服务端和客户端

2.1 将Frp注册系统服务

创建文件sudo vim /usr/lib/systemd/system/frps.service (有时候需要手动创建system文件夹)

填写如下

[Unit]
Description=frps
After=network.target

[Service]
TimeoutStartSec=30
#根据实际路径填写,服务器为frps,客户端为frpc
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target

操作命令,对应客户端换成frpc

# 启动 frp 并设置开机启动
systemctl enable frps
systemctl start frps
systemctl status frps
systemctl stop frpc

# 部分服务器上,可能需要加 .service 后缀来操作,即:
systemctl enable frps.service
systemctl start frps.service
systemctl status frps.service
systemctl stop frpc.service

2.2 Frps服务器配置

打开配置文件vim frps.ini,进行编辑

[common]
bind_addr = 0.0.0.0 #允许所有的IP链接
bind_port = 7000 #和客户端通信
vhost_http_port = 6081 #http进行转发端口
vhost_https_port = 6444 #https进行转发端口
authenticate_new_work_conns = false 
authenticate_heartbeats = false
authentication_method = token #鉴权方式,客户端需要一致
token = xxxxxxxxxxxxxxxxx #token密钥,客户端需要一致


[admin] #名字,必须唯一
type = http #链接类型
custom_domains = admin.xxxx.com #对应的域名

[download] 
type = http
custom_domains = download.xxxx.com 

common中配置,还可以通过网页查看Frp状态,我没有开启这个功能。

dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin@123456   

2.3 Frpc客户端配置

配置文件frpc.ini

[common]
server_addr = 1.2.3.4  #服务器IP
server_port = 7000 #服务器bind_port
authenticate_new_work_conns = false
authenticate_heartbeats = false
authentication_method = token #鉴权方式,和服务器一致
token = xxxxxxxxxxxxxxxxx #token密钥,和服务器一致
 
[ssh] #名字,必须唯一
type = tcp #链接类型
local_ip = 127.0.0.1 #本地IP,也可以是局域网内其它IP
local_port = 3022 #远端访问端口,可以和本地不一样
remote_port = 3022 #本地端口

[aria2]
type = tcp
local_ip = 127.0.0.1
local_port = 3033
remote_port = 3033

[admin]  #和服务器一致
type = http             
local_ip = 127.0.0.1 #本地IP,也可以是局域网内其它IP
local_port = 123       
custom_domains = admin.xxxx.com #对应的域名
 
[download] #和服务器一致
type = http
local_ip = 127.0.0.1
local_port = 124
custom_domains = download.xxxx.com 

对于http(s)类型的,在服务器和客户端需要同时配置,且域名一致,否则会无法匹配,访问时提示下图

​ 而TCP类型,也就是不需要域名访问的,如ssh等只要IP地址的,只需要客户端配置就可以了。

​ 配置文件编写完重启frp服务。

建议修改配置后,先单独运行frps或者frpc验证成功了,再开启服务

/usr/local/frp/frps -c /usr/local/frp/frps.ini
/usr/local/frp/frpc -c /usr/local/frp/frpc.ini

防火墙开放remote_port、bind_port和vhost_http_port、vhost_https_port,以及其它TCP访问端口。

对于网页的,admin.xxxx.com:6081即可访问页面。

对于TCP的就是IP:端口即可。

3. Nginx的配置

对于是网页访问的,我们想要更优雅,去掉后面的端口号可不可以呢,答案是可以的,我们借助Nginx的反向代理就可以实现共用80,而且还能更安全。

新建配置文件

cd ~
mkdir vhost_nginx
vim frps.conf

填入以下配置

server {
    listen   80;
    location / {
           return 403;
     }
}
server
{
    listen 80;
    #每个网址都要填入
    server_name admin.xxxx.com download.xxxx.com;

    location / {
        client_max_body_size 1000m;
        #frps端口(服务器) 这里的端口配置要仔细看
        proxy_pass http://127.0.0.1:6081;
        proxy_redirect off;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;
}
}

在nginx主配置文件中把文件包含进去

include /home/lichong/vhost_nginx/*.conf;

重新加载配置文件,就可以直接访问admin.xxxx.com而不用加端口了。

所有在Frp中配置的域名都需要添加进来,否则会被阻止,返回403错误,这也可以加强内网穿透的保护。

这种方法有个缺陷,就是对需要直接访问端口的不适用,如ariaNG的管理页面,因为它会自己在域名后面加端口访问aira2,所以需要单独开一个端口。

我使用了二级域名,对于自己使用的不重要的数据,就没有添加SSL证书,有需要的小伙伴在配置的时候也需要注意443端口

listen 443 ssl http2;

当设置完成后就可以关闭防火墙vhost_http_port、vhost_https_port端口,增加安全性,因为已经是内部转发了,不需要对外。

4. 总结

本文介绍了Frp的搭建过程,以及使用Nginx使外部访问去掉端口号更加美观,有了稳定的内网穿透后,搭建了一堆页面,如照片,路由器管理,NAS管理,BT下载等等,非常方便。

posted @ 2023-02-19 21:19  小满的博客  阅读(178)  评论(0编辑  收藏  举报