frp是什么?
frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。
frp作用
- 利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。
- 对于 http 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。
- 利用处于内网或防火墙后的机器,对外网环境提供 tcp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。
frp原理
准备工作
- 首先要使用frp进行内网穿透,就必须要一台带公网IP的服务器。
- 然后根据对应的操作系统及架构,从 Release 页面下载最新版本的程序。
将 frps 及 frps.ini 放到具有公网 IP 的机器上。(服务器:frp_0.33.0_linux_amd64.tar.gz)
将 frpc 及 frpc.ini 放到处于内网环境的机器上。(树莓派:frp_0.33.0_linux_arm.tar.gz)
服务器
获取frp
[root@localhost ~]# mkdir frps
[root@localhost ~]# cd frps/
[root@localhost frps]# wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz
[root@localhost frps]# tar -zxvf frp_0.33.0_linux_amd64.tar.gz
[root@localhost frps]# mv frp_0.33.0_linux_amd64/* .
配置frps.ini
[root@localhost frps]# vim frps.ini
[common]
bind_port = 7000
vhost_http_port = 8080
vhost_https_port = 4433
# 验证口令
token = xxxxxxxxxx
# frp仪表盘
dashboard_port = 7500
dashboard_user = xxxx
dashboard_pwd = xxxxxx
启动frps
[root@localhost frps]# ./frps -c ./frps.ini
# 放入后台运行
[root@localhost frps]# nohup ./frps -c ./frps.ini &
将frps加入系统服务
[root@shuai ~]# cd frp/systemd/
[root@shuai systemd]# cp frps.service /usr/lib/systemd/system/frp.service
[root@shuai systemd]# vim /usr/lib/systemd/system/frp.service
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/root/frp/frps -c /root/frp/frps.ini
[Install]
WantedBy=multi-user.target
# 加入开机自启
[root@shuai systemd]#systemctl enable frp
树莓派
获取frp
pi@raspberrypi:~ $ mkdir frpc
pi@raspberrypi:~ $ cd frpc/
pi@raspberrypi:~/frpc $ wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_arm.tar.gz
pi@raspberrypi:~/frpc $ tar -zxvf frp_0.33.0_linux_arm.tar.gz
pi@raspberrypi:~/frpc $ mv frp_0.33.0_linux_arm/* .
配置frpc.ini
pi@raspberrypi:~/frpc $ vim frpc.ini
[common]
server_addr = Server_IP
server_port = 7000
token = xxxxxxxxxx
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2222
[web]
type = http
local_port = 80
custom_domains = pi.shuaiguoer.com
启动frpc
pi@raspberrypi:~/frpc $ ./frpc -c ./frpc.ini
# 放入后台运行
pi@raspberrypi:~/frpc $ nohup ./frpc -c ./frpc.ini &
将frpc加入系统服务
pi@raspberrypi:~ $ cd frpc/systemd/
pi@raspberrypi:~/frpc/systemd $ sudo cp frpc.service /usr/lib/systemd/system/frp.service
pi@raspberrypi:~/frpc/systemd $ sudo vim /usr/lib/systemd/system/frp.service
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/home/pi/frpc/frpc -c /home/pi/frpc/frpc.ini
ExecReload=/home/pi/frpc/frpc reload -c /home/pi/frpc/frpc.ini
[Install]
WantedBy=multi-user.target
# 加入开机自启
pi@raspberrypi:~/frpc/systemd $ systemctl enable frp.service
域名解析
将
pi.shuaiguoer.com
的域名 A 记录解析到 IP x.x.x.x
内网穿透测试
WEB
通过浏览器访问 http://pi.shuaiguoer.com:8080
即可访问到处于内网机器上的 web 服务。
SSH
通过ssh连接:ssh 用户@服务器IP -p 2222
给网站配置HTTPS
获取SSL证书
可以通过 点我 获取免费SSL证书
服务器
因为是通过frp访问树莓派内部的Web服务,所以这里需要通过nginx的反向代理来实现https的配置
配置nginx
[root@shuai nginx]# vim pi.shuaiguoer.com.conf
server{
listen 80;
listen 443 ssl;
ssl_certificate /root/.acme.sh/pi.shuaiguoer.com/pi.shuaiguoer.com.cer; # 证书存放位置
ssl_certificate_key /root/.acme.sh/pi.shuaiguoer.com/pi.shuaiguoer.com.key; # 私钥存放位置
server_name pi.shuaiguoer.com;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://pi.shuaiguoer.com:8080; # 注意:映射的是frp服务端的 vhost_http_port 端口
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_max_temp_file_size 0;
proxy_redirect off;
proxy_read_timeout 240s;
}
}
# 强制HTTPS
server{
listen 80;
server_name pi.shuaiguoer.com;
return 301 https://pi.shuaiguoer.com$request_uri;
}
最后别忘了重载nginx配置文件
sudo nginx -s reload
**访问 https://pi.shuaiguoer.com/
就可以看见自己的网站了
13 comments
n1是什么???
软路由吗?
大佬,N1刷openwrt后想科学上网,还需要服务器那边搭建酸酸乳服务端吗?
原来openwrt只是客户端啊
我机场被封了,不稳定不太想搞了
内网穿透?
https://www.right.com.cn/forum/thread-3160780-1-1.html
这个是固件的功能,你看看里面的图片就知道了,这个还是精简的,原版更特么花里胡哨.........
3Q3Q
不知道,莫名坏了,等会去看看哪的问题
原来这么多功能,厉害了!有空可以玩玩
哇,这么坑
不过相比于树莓派已经很便宜了