Frp内网穿透使用指南
内网穿透——外网装逼?腾哥长文带你玩转内外网互通
你是否被以下问题所困扰:
我想装个B让其他同学在外网访问我本地运行的程序或者网站,该怎么办?
接了个小外包,给客户演示Demo没有站点怎么办? 做微信、支付宝支付等其他第三方平台的功能,没有外网回调地址,应该怎么办?
我们先来了解一下内网穿透。内网穿透,又叫NAT穿透,是计算机用语,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。翻译过来就是你的电脑可以直接被你朋友从外部访问。通常我们的电脑是无法自己被访问的,因为我们的电脑缺少自己的独立的公网IP地址。由于国情的某些原因,现在ipv4地址稀缺,电信运营商已经不会随便分配固定IP给个人。通常实现内网穿透,是通过路由器上端口映射来实现的。但是我们上网的环境通常是存在多级路由器较为复杂的网络结构,我们上网过程中和广域网联通,通常会经过运营商上层的多层路由器,而它们不是每个人都有权限可以访问和设置。

腾哥在这里介绍两种内网穿透的方法,一种是市面上的软件方法,另一种是自建服务器进行穿透的方法。
一:使用现成的软件花生壳
打开花生壳官网https://hsk.oray.com/
下载花生壳客户端并安装;
注册花生壳账号并登陆;
根据花生壳官方帮助手册进行配置使用
由于此类软件官方已经进行了详细的说明,此处不再详细介绍。类似的软件还有:
神卓互联:https://www.shenzhuohl.com/
钉钉内网穿透:https://open.dingtalk.com/document/resourcedownload/http-intranet-penetration/
SAKURA FRP: https://www.natfrp.com/
等等
二:自建服务器进行内网穿透
前期准备:
一台拥有公网IP地址的服务器,比如腾讯云;
一台运行在本地的服务器,开启相应服务可以在内网访问;
一台作为访客的设备(手机流量)
根据官方的表述,frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
https://github.com/fatedier/frp/releases
Frp分为服务端和客户端,我们首先配置服务端。存在多种部署方式,我用docker进行服务端部署,方便快捷。
首先创建配置文件:
**创建存放目录
sudo mkdir /etc/frp
# 创建frps.ini文件
nano /etc/frp/frps.ini**
frps.ini内容如下:
[common]
# 监听端口
bind_port = 7000
# 面板端口
dashboard_port = 7500
# 登录面板账号设置
dashboard_user = admin
dashboard_pwd = admin
# 设置http及https协议下代理端口(非重要)
vhost_http_port = 7080
vhost_https_port = 7081
# 身份验证
token = 12345678
这个配置文件记录了服务端参数。服务器IP:端口号可以进入服务器frp面板,token起到客户端连接服务器的身份验证作用。
为了安全请务必将面板密码和token设置复杂一点。
#服务器镜像:snowdreamtech/frps
#重启:always
#网络模式:host
#文件映射:/etc/frp/frps.ini:/etc/frp/frps.ini
输入下面指令启动
docker run --restart=always --network host -d -v /etc/frp/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps
别忘了在服务器的防火墙设置放行相关端口。
运行在云服务器上的docker容器:

客户端部署方式一(Win系统):
首先在本地启动一个服务。
下载客户端,如下

注意相关文件都是frpc 不是s
配置文件示例(frpc.ini)
[common]
# server_addr为FRPS服务器IP地址
server_addr = x.x.x.x
# server_port为服务端监听端口,bind_port
server_port = 7000
# 身份验证
token = 12345678
# [ssh] 为服务名称,下方此处设置为,访问frp服务段的2288端口时,等同于通过中转服务器访问127.0.0.1的22端口。
# type 为连接的类型,此处为tcp
# local_ip 为中转客户端实际访问的IP
# local_port 为目标端口
# remote_port 为远程端口
[service1]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 80
[web]
type = tcp
local_ip = 192.168.1.2
local_port = 80
remote_port = 1888
打开cmd并定位到软件目录 输入”frpc”启动服务

如图看到success表示成功了,可以试试访问云服务IP:你设置的远程端口

客户端部署方式二(docker):
和上面类似,在需要映射出去的设备上 创建/etc/frp/frpc.ini配置文件 内容同上。
#镜像:snowdreamtech/frpc
#重启:always
#网络模式:host
#文件映射:/etc/frp/frpc.ini:/etc/frp/frpc.ini
启动客户端:
docker run --restart=always --network host -d -v /etc/frp/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc
试试访问云服务IP:你设置的远程端口

笔者尝试,多台客户端可以连接到同一服务器,比如笔者在NAS和软路由上都部署了frp,都能正常使用,注意远程端口别冲突就行。
后续还可以根据文档设置服务开机自启动,云服务器可以设置反向代理和域名等等。