温馨提示:
本文所述内容具有依赖性,可能因软硬条件不同而与预期有所差异,故请以实际为准,仅供参考。
之前介绍过 Ngrok 的部署(部署内网穿透神器 Ngrok 详细教程),今天要介绍的文中提到的同是内网穿透流行工具 frp。
一、介绍
Frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp
, udp
, http
, https
等协议类型,并且 web 服务支持根据域名进行路由转发,甚至支持两个客户端点对点!
Frp 的原理与 DDNS 服务一样,当公网服务器和内网客户端建立连接后,外网用户访问公网服务器特定端口,就会触发公网服务器和内网的互动,并返回内网信息给外网用户。
对比 Ngrok,最明显的感受就是 Frp 的配置非常简单,而且是开源免费(Ngrok 新版已闭源)
二、依赖
Frp 是一个 DDNS 服务,因此需要一个公有域名,而要实现外网访问,也就意味着需要一个静态 IP,既然宽带不分配静态 IP,那么我们可以购买便宜的主机来实现,比如:
Vultr 最新优惠,充值 $5 开 1 年 KVM 主机
CloudCone 最新优惠 - 自由定制配置|洛杉矶亚洲优化线路|1G 带宽|2TB 流量|$1.25起
三、部署
举例说明吧,以下操作基于 CentOS 7.0 x64。
1、预期效果
内网地址 IP:192.168.1.1,SSH 为 22,HTTPS 为 443,HTTP 为 80;
外网地址 IP:1.1.1.1,SSH 监听为 2222,HTTPS 为 4433,HTTP 为 8080;
绑定域名为:virlcoud.net
2、准备
将 virlcoud.net 解析至 1.1.1.1(可参考《使用 CNAME 接入 CloudFlare 新玩法》接入 CloudFlare,非必要)
3、服务端部署
I、查询下载最新版源码
# wget https://github.com/fatedier/frp/releases/download/v0.30.0/frp_0.30.0_linux_amd64.tar.gz
# tar zxf frp_0.30.0_linux_amd64.tar.gz
# rm -rf frp_0.30.0_linux_amd64.tar.gz && mv frp_0.30.0_linux_amd64/ frp/
II、编辑配置
# cd frp
# vim frps_full.ini
......
bind_addr = 0.0.0.0 # 监听地址
bind_port = 8888 # 监听端口
.......
vhost_https_port = 4433 # 外网 HTTPS 访问端口
vhost_http_port = 8080 # 外网 HTTP 访问端口
......
privilege_token = 12345678 # 访问密钥
......
privilege_allow_ports = 4433,8080,2222 # 限制客户端可用端口
......
subdomain_host = vircloud.net # 绑定域名
......
III、运行
通过 nohup 后台运行:
# nohup /root/frp/frps -c /root/frp/frps_full.ini >/root/frp/frps.log 2>&1 &
开机自启:
# chmod +x /etc/rc.local (非必须,某些镜像不执行无法启动)
# vim /etc/rc.local
......
/root/frp/frps -c /root/frp/frps_full.ini >/root/frp/frps.log
IV、开放端口
如果主机有开启防火墙,记得开放端口,比如 CentOS7 开放端口命令是:
# firewall-cmd --zone=public --add-port=8888/tcp --permanent
# firewall-cmd --reload
3、客户端部署
Windows、Linux、MacBook 等平台下配置与服务端大同小异,以 Windows 开放 3389 远程桌面为例。
下载客户端并解压:
编辑 frpc.ini:
[common]
server_addr = 1.1.1.1
server_port = 8888
token = 12345678 # 服务端有开启验证需要修改/增加此字段
[ssh] # 名字可以设一个自己好记得
type = tcp # 连接类型
local_ip = 127.0.0.1 # 本机地址
local_port = 3389 # 要穿透的端口
remote_port = 2222 # 服务器端口,可以自定义
运行:
C:\Users\Test> frpc -c frpc.ini
然后访问域名(或服务器地址)加端口号 2222 即可访问本机的远程桌面服务。
4、更多配置
参见官方 wiki:fatedier/frp
参考文章:
1、《FRP: 使用 frp 实现内网穿透》
2、《frp 服务器架设 + 荒野无灯版 p4davan frp 客户端 配置教程》
Windows 7Chrome 64.0.3282.140来自 广东 的大神
路由器上搞穿透
我就是这么用的
openwrt 本身是支持文中的 frp 版本,定制版 ROM 可能有对应的定制版 frp,比如 K2P 无灯大师的 ROM 就是用其定制的 xfrp 才能连接。
Windows 10Chrome 70.0.3538.25来自 广东 的大神
内网穿透frp折腾过,后来一直在用*