frp
服务端和客户端部署,穿透内网远程连接内网设备。以腾讯云服务器(Ubuntu)、香橙派(Armbian)、小米路由器3(Padavan)为例。
原理 frp - Github
我们部署在内网的设备,由于防火墙或动态IP等原因,外网是一般访问不到的。那么我们希望穿透内网,从外网访问该怎么操作呢?一般有以下几种方式:DDNS动态域名解析+路由器端口映射、Ngrok、Frp…
Ngrok和Frp的原理其实是差不多的,相比之下,Frp的部署更简单,使用效率更高,所有这里就介绍Frp的部署了。
通过在服务器(外网)和内网设备(内网)上分别部署Frp服务端和客户端,内网的客户端会反向连接外网的服务端,从而建立连接。然后我们只需访问外网服务器地址即可重定向到内网设备,从而达到目的。这里的服务器可以充当桥梁的作业。本篇将介绍如何在服务器和内网设备上部署Frp,没有服务器的朋友可以去网上搜索现成的Frp服务器使用,一般是免费的。
服务端 - 腾讯云服务器(Ubuntu) 这里用到一个脚本来方便部署。
wget --no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-install-shell/master/frps/install-frps.sh -O ./install-frps.sh chmod 755 ./install-frps.sh ./install-frps.sh install
然后脚本开始运行,会让你输入一些配置,直接回车是默认配置。
Please input frps bind_port [1-65535](Default Server Port: 5443):[7000] Please input frps vhost_http_port [1-65535](Default vhost_http_port: 80):[7080] Please input frps vhost_https_port [1-65535](Default vhost_https_port: 443):[70443] Please input frps dashboard_port [1-65535](Default dashboard_port: 6443):[7081] Please input dashboard_user (Default: admin):[admin] Please input dashboard_pwd (Default: kpkpM7VZ):[admin] Please input privilege_token (Default: 9m2UAOWa6hx5Eise):[admin] 下面的内容都是默认即可
到此服务端安装完成。
Frp服务端
综上可知,服务端配置如下:
[common] bind_addr = 0.0.0.0 bind_port = 7000 subdomain_host = zhaoo.cc kcp_bind_port = 7000 dashboard_port = 7081 dashboard_user = admin dashboard_pwd = admin vhost_http_port = 7080 vhost_https_port = 70443 log_file = ./frps.log log_level = info log_max_days = 3 privilege_token = admin max_pool_count = 50 tcp_mux = true
从配置可以看到,我又加了条主域名配置,在之后的客户端我们可以再配置子域名。配置域名后不会生效,需要添加解析:泛解析,*.zhaoo.cc
和空解析,@.zhaoo.cc
。
使用命令:
/etc/init.d/frps start /etc/init.d/frps stop /etc/init.d/frps restart /etc/init.d/frps status /etc/init.d/frps config /etc/init.d/frps version
./install-frps.sh update ./install-frps.sh uninstall ./install-frps.sh config
开启Frp服务器后,访问http:服务器IP:7081
可访问Frp控制台。
Tips: 服务器如果开启了防火墙,别忘了放行以上端口哦。我用了宝塔面板,老是忘了这一茬。
客户端 - 香橙派(Armbian) 安装Frpc 下面在香橙派上部署Frp客户端,树莓派用的是arm的cpu,所以我们要下载arm版的。
wget https://github.com/fatedier/frp/releases/download/v0.18.0/frp_0.18.0_linux_arm.tar.gz tar -zxvf frp_0.18.0_linux_arm.tar.gz cd frp_0.18.0_linux_arm.tar.gz sudo vim frpc.ini
详细配置见下表:
注:打"*" 的说明要和服务器上的配置一致 [common] server_addr = 服务器IP server_port = 7000 privilege_token = admin login_fail_exit = false [ssh]type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 7122 [http]type = http local_ip = 127.0.0.1 local_port = 80 subdomain = opi [https]type = https local_ip = 127.0.0.1 local_port = 443 custom_domains = opi
安装Systemd自动启动Frp 客户端的Frp
在香橙派每次重启后都要命令开启一下,那势必要在内网先连接ssh,很麻烦。所以安装Systemd
,在香橙派每次开机时都能自动启动Frp服务。
apt-get install systemd apt-get install systemd-sysv
下面需要配置Grub
文件,在开机时自动运行Systemd。
sudo vim /etc/default/grub
写入以下内容:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash init=/lib/systemd/systemd"
保存并重启一下。
编辑Syetemd
配置来自启动Frp
。
cd 到frpc目录下 cp frpc /usr/local /bin/frpc mkdir /etc/frp cp frpc.ini /etc/frp/frpc.ini 复制frpc配置文件 vim /usr/lib/systemd/system/frpc.service
[Unit] Description=frpc After=network.target [Service] TimeoutStartSec=30 ExecStart=/usr/local /bin/frpc -c /etc/frp/frpc.ini ExecStop=/bin/kill $MAINPID [Install] WantedBy=multi-user.target
systemctl enable frpc systemctl start frpc systemctl status frpc
Tips: frpc启动无效时,可以尝试先停止服务: systemctl stop frpc
到此,香橙派上的Frp客户端配置完成,树莓派啊各种派配置也是一样的。
连接说明 SSH: IP地址 -> opi.zhaoo.cc 端口 -> 7122 HTTP: http://opi.zhaoo.cc:7180 HTTPS: https://opi.zhaoo.cc:71433
客户端 - 小米路由器3(Padavan) 参考 – 小米路由器3 – 烧录Padavan固件
参考 – 小米路由器3 – Padavan固件
我给小米路由器3刷了Padavan,自带Frp功能,所以就直接配置了。
小米路由器3-frp
启用前先更新一下Frp版本,确保和服务端的版本一致,否则无法建立通信。然后只需在脚本处填写配置即可,我的配置如下:
[common] server_addr = zhaoo.cc server_port = 7000 privilege_token = admin [mirt-web]type = http local_ip = 192.168.1.1 local_port = 80 use_gzip = true subdomain = mirt [mirt-ssh]type = tcp local_ip = 192.168.1.1 local_port = 22 remote_port = 7222 [mirt-admin]type = tcp local_ip = 192.168.1.1 local_port = 81 remote_port = 7281 [mirt-kode]type = tcp local_ip = 192.168.1.1 local_port = 82 remote_port = 7282
解释一下:Frp一个子域名下只能穿透一条http或htpps线路,而tcp线路却可以有多条。我们路由器上有许多Web服务需要穿透(轻博客、后台、KODE文件管理系统……),所以这里我们就采取曲线救国的方式,将其他Web线路配置成tcp方式,访问的时候跟上对应的远程端口即可。
保存配置
写入配置脚本后,点击下方的应用本页面设置
,再重启一下
Frp服务,通信即建立。
连接说明 SSH: IP地址 -> mirt.zhaoo.cc 端口 -> 7222 博客: http://mirt.zhaoo.cc:7080 路由器后台: http://mirt.zhaoo.cc:7081 KODE文件管理系统: http://mirt.zhaoo.cc:7082
Nginx反向代理 按照之前的配置,如果我要访问小米路由器3上搭建的Hexo博客,那么需要访问的地址是mirt.zhaoo.cc:7080
,需要跟上个端口号。哪有人访问Web页面还得加个端口号的,况且这样也不利于SEO。所以我们用到Nginx反向代理这项技术,将7080
🇨🇳端口反代到80
端口上。
我服务器安装了宝塔面板
,可以很直观的设置反向代理,这里仅做个演示。没安装的朋友用命令行配置也是没问题的,具体问度娘。 在宝塔面板下新建网站,绑定域名,然后设置。
宝塔面板-新建网站
然后在反向代理子目录下设置目标URL
为域名:frp端口号
,我这就是http://mirt.zhaoo.cc:7080
。设置好后开启反向代理。
设置反向代理
之后访问http://mirt.zhaoo.cc
就可以直接访问到我的博客了。
Tips: 还可以在宝塔面板下配置https哦。这样博客就可以直接搭在小米路由器上了。emmm…我还是喜欢服务器…
参考文献 IT男的VPS系列教程 篇一:内网穿透(Frp)-拯救没有公网IP的你
借助 frp 随时随地访问自己的树莓派