frp 介绍
内网穿透简单来讲就是:使内网设备能够在外网被访问。 而 frp 是个实现了这一功能的一个开源项目,我们可以通过frp来搭建内网穿透服务。
1. 资源准备
a.云服务器(vps)一台(腾讯云最近有超高优惠哦🙂)
b.能上网的本地设备(树莓派、香橙派、手机、电脑均可)一台
2. 下载软件 frps(服务端)、frpc(客户端)
frp对应的系统:
- xxx_darwin_amd64.tar.gz #Mac OS系统
- xxx_freebsd_386.tar.gz #FreeBSD 32位系统
- xxx_freebsd_amd64.tar.gz #FreeBSD 64位系统
- xxx_linux_386.tar.gz #Linux 32位系统
- xxx_linux_amd64.tar.gz #Linux 64位系统
- xxx_linux_arm.tar.gz #Linux 32位嵌入式系统
- xxx_linux_arm64.tar.gz #Linux 64位嵌入式系统
- xxx_windows_386.zip #Windows 32位系统
- xxx_windows_amd64.zip #Windows 64位系统
3. 配置服务端(vps):
frps.ini
[common]
#内网穿透服务器监听的IP地址,可以省略,默认为127.0.0.1
bind_addr = 0.0.0.0
#服务器端监听的端口,默认是7000,自定义
bind_port = 7001
#token是用于安全验证,不加会导致任何机器穿透一定要加一个自己才知道的。
token = xxx
nginx.conf
#frps web服务配置例子
server {
listen 80;
server_name web.frp.xxx.com; #自己的域名
location / {
proxy_pass http://127.0.0.1:30011; #记住这个端口,这是frpc映射过来的(HTTP web server)
proxy_connect_timeout 30s;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 32k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_redirect off;
proxy_hide_header Vary;
proxy_set_header Accept-Encoding '';
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
proxy_set_header Cookie $http_cookie;
proxy_set_header X-Real-IP $remote_addr;
}
}
#frps 文件服务配置例子
server {
listen 80;
server_name file.frp.xxx.com; #自己的域名
location / {
proxy_pass http://127.0.0.1:30012; #记住这个端口,这是frpc映射过来的 (HTTP file server)
proxy_connect_timeout 30s;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 32k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_redirect off;
proxy_hide_header Vary;
proxy_set_header Accept-Encoding '';
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
proxy_set_header Cookie $http_cookie;
proxy_set_header X-Real-IP $remote_addr;
}
}
#frps ssh服务配置例子
server {
listen 80;
server_name ssh.frp.xxx.com; #自己的域名
location / {
proxy_pass http://127.0.0.1:30013; #记住这个端口,这是frpc映射过来的 (ssh server)
proxy_connect_timeout 30s;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 32k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_redirect off;
proxy_hide_header Vary;
proxy_set_header Accept-Encoding '';
proxy_set_header Host $host;
proxy_set_header Referer $http_referer;
proxy_set_header Cookie $http_cookie;
proxy_set_header X-Real-IP $remote_addr;
}
}
4. 配置客户端(pc)
frpc.ini
[common]
#外网-服务器端ip 自己服务器的ip
server_addr = 11.22.33.44
#外网-服务器端监听的端口(必须与frps.ini中的配置一致)
server_port = 7001
#token要和服务器上 frps.ini 里对应的token保持一致
token = xxx
#frpc web服务配置例子
[web]
type = tcp
local_ip = 127.0.0.1
#本地开的端口
local_port = 80
#frpc映射成的远端端口
remote_port = 30011
#frpc 简单的网络文件服务配置例子
[file]
type = tcp
remote_port = 30012
plugin = static_file
#本地目录
plugin_local_path = /media/frpfile
#访问的子目录(可选)
#plugin_strip_prefix = static
#访问账号
plugin_http_user = abc
#访问密码
plugin_http_passwd = abc
#frpc ssh服务配置例子
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
#frpc映射成的远端端口 (远端需要开放此端口) ssh username@xxx.xxx.com -p 30013
remote_port = 30013
nginx.conf:
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name localhost;
# 项目路径 * 关键 *
root /xxx/xxx/xxx;
# Load configuration files for the default server block.
#include /etc/nginx/default.d/*.conf;
location / {
index index.html index.htm;
}
}
5. 运行
先服务端运行命令
$ /xxx/frps -c frps.ini
后客户端运行命令
$ /xxx/frpc -c frpc.ini
(-bash: ./frpc: 权限不够: chmod 777 frpc)
6. 访问方式
a.web
浏览器里输入:web.frp.xxx.com (按下enter键直接访问)
b.简单的网络文件服务
浏览器里输入:file.frp.xxx.com (输入完地址后按下enter键,会弹出需要填写账号密码,输入前面 frpc.ini 里配置的账号密码即可 )
c.ssh
命令行工具里输入:$ ssh username@ssh.frp.xxx.com -p 30013 (username是你本地设备的用户名,按下enter键后根据提示输入相应的密码即可)
7. 设置frpc开机启动
a.为frpc配置systemd的service文件:
$ vi /usr/lib/systemd/system/frpc.service
frpc.service
[Unit]
Description=frpc
After=multi-user.target
[Service]
ExecStart=/xxx/frpc -c /xxx/frpc.ini
ExecStop=/bin/kill $MAINPID
#防止无网、开机10秒后重新启动服务
Restart=always
RestartSec=10
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
b. 启动:
$ systemctl start frpc
c. 开启自启动
$ systemctl enable frpc
d. 重启
$ systemctl restart frpc
e. 查看服务是否生效命令
$ sstemctl list-units |grep frpc
f. 查看日志信息命令
$ systemctl status frpc
8.注意事项:
a. 检查配置云服务器的先关端口是否开放
b. 本文涉及到nginx相关的配置可以在网上找到很多这里不展开讲