作为技术宅,当在家里拥有了一台媲美服务器的主机,或者一台自己组装的NAS后,就会想着如何将自己家里的服务映射到外网玩儿,做什么网站啊,游戏私服什么的等等。服务器商高配置服务器动不动就几千几百一个月,在这个公网IPv4缺乏的年代,并不是谁都可以无理由申请到IPv4,而且国内如果要用IP作为网站等内容,还需要工信部备案,冷不防的还会来查水表。所以这个时候,租一台便宜的服务器,用内网穿透的方式进行访问是很有必要的。
先用一张图来解释我现在做的:
下载
这边用的是当前最新版v0.56,Release v0.56.0 · fatedier/frp (github.com),进去后下载对应版本的frp。
这里仅对Windowsfrp_0.56.0_windows_amd64.zip和Linuxfrp_0.56.0_linux_amd64.tar.gz版本进行使用介绍,其他类似不常用不做解释。
下载后解压压缩包,里面一般有几个文件:
# 服务端
frps.exe # windows
frps # linux
# 服务端配置文件
frps.toml
# 客户端
frpc.exe # windows
frpc # linux
# 客户端配置文件
frpc.toml
部署服务端
编写配置文件frps.toml
:
主要就是配置文件的编写,以下是常用的几个:
# 服务端连接端口(必填)
bindPort = 7000 # 服务端监听端口,默认7000
# 服务端身份认证及密码(可选,推荐)
# (OIDC身份认证可参考 gofrp文档 咱这只讲最常用的token)
auth.method = "token" # 服务端连接身份认证,默认token
auth.token = "test123" # 服务端token密码
# 服务端TLS连接加密(可选)
transport.tls.force = false # 是否只接受启用了TLS的客户端连接
# 服务端Web界面(可选)
# (如果不配置WebSSL,网页将以http方式呈现)
webServer.port = 7001 # Web页面端口号
webServer.addr = "0.0.0.0" # Web监听服务端IP
webServer.user = "mint" # (可选)Web页面账号
webServer.password = "mintdesu" # (可选)Web页面密码
webServer.tls.certFile = "server.pem" # (可选)WebSSL证书
webServer.tls.keyFile = "server.key" # (可选)WebSSL私钥
# 服务端HTTP(s)监听端口(可选)
# (一般都是80和443,如果被nginx什么的占用了那只能填别的)
vhostHTTPPort = 80
vhostHTTPSPort = 443
allowPorts = [
{ start = 10000, end = 15000 }, # 端口范围设置为10000-15000可用
{ start = 30000, end = 40000 }, # 同理,可设置多个端口范围开放
{ single = 25565 }, # 单端口设置,指定25565端口可用
{ single = 25566 } # 同理,可以设置多个单端口开放
]
# 服务端连接数限制(可选)
transport.maxPoolCount = 50 # 每条隧道可以有多少IP连接
transport.maxPortsPerClient = 30 # 每个客户端可以创建多少隧道
上面如果有报错的可以删除提示的那一条后再尝试启动
我推荐的必填几条:
bindPort = 7000
auth.method = "token"
auth.token = "{密码}"
webServer.port = 7001 # web端口就是7001
webServer.addr = "0.0.0.0" # web监听服务端所有IP
webServer.user = "webUsername"
webServer.password = "webPassword"
vhostHTTPPort = 7002
vhostHTTPSPort = 7003 # 这个不会用
启动服务端:
# 在frp文件目录下
frpc -c frpc.toml
启动后,用浏览器访问IP:7001,就能看到web页面,输入自己设置的user、password即可登录查看
Windows部署:
配置启动文件
这里有两种方法,一种是配置好 xxx.bat 后放在C:\Users\<user>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
目录下,这样可以在用户登录后自动启动 xxx.bat 这种方法简单直接
还有一种方法,直接使用 nssm.exe 配置frps为系统服务,这种方法可以无需登录用户账号后台运行
咱自己用的是第二种方法,为了稳妥,两种方法都演示一遍
第一种: 在frps目录下新建 xxx.bat 文件,把下方内容填进去
frps -c frps.tomlCMD
右键创建快捷方式后将快捷方式扔进下方目录即可C:\Users\<user>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
如果之后要更新 frps.toml 配置文件,把cmd窗口关闭重启 xxx.bat 就没问题了
第二种:打开 nssm官网 下载 nssm.exe ,国内访问较慢可使用本站提供的 123Pan 下载
解压后在win64/32找到 nssm.exe 放在a目录里,打开 cmd 后cd到a目录下运行
nssm install frpsCMD
输完命令回车后会弹个窗口,根据实际情况按下图填后按 Install service
即可
之后到 任务管理器→服务 中找到 frpc 服务后右键开始就没问题了。如果之后要更新 frps.toml
配置文件,再次找到此处右键重新启动就没问题了
部署客户端
编写配置文件frpc.toml
:
# 连接服务器
serverAddr = "x.x.x.x" # 服务器地址
serverPort = 7000 # 服务器端口
# 服务端身份认证及密码
# (OIDC身份认证可参考 gofrp文档 咱这只讲最常用的token)
auth.method = "token" #服务端连接身份认证,默认token
auth.token = "test123" #服务端token密码,密码不正确将无法连接服务器
# 客户端到服务端连接启用TLS加密
transport.tls.enable = false #是否和服务端之间启用TLS连接
transport.tls.disableCustomTLSFirstByte = false
#当配置为true时,无法和vhostHTTPSPort端口复用
# 创建TCP隧道
[[proxies]]
name = "xxx" #隧道名称,可自定义,不能重复
type = "tcp" #隧道类型,可用tcp, udp, http, https, tcpmux, stcp, sudp, xtcp
localIP = "xxx.xxx.xxx.xxx" #本地IP地址,如果是本机就127.0.0.1
localPort = xxx #本地端口,本地服务端口,比如mc服务器端口25565
remotePort = xxxxx #远程端口,连接隧道时用的端口
# 创建UDP隧道
[[proxies]]
name = "xxx" #隧道名称,可自定义,不能重复
type = "udp" #隧道类型,可用tcp, udp, http, https, tcpmux, stcp, sudp, xtcp
localIP = "xxx.xxx.xxx.xxx" #本地IP地址,如果是本机就127.0.0.1
localPort = xxx #本地端口,本地服务端口,比如mc服务器端口25565
remotePort = xxxxx #远程端口,连接隧道时用的端口
# 创建HTTP/HTTPS隧道
[[proxies]]
name = "xxx" #隧道名称,可自定义,不能重复
type = "http" #隧道类型,可填http, https
localIP = "xxx.xxx.xxx.xxx" #本地IP地址,如果是本机就127.0.0.1
localPort = 80 #本地端口,本地Web服务端口,一般为80/443
customDomains = ["test.hoshiroko.com"] #绑定域名,可设置自己的域名
# 传输加密/压缩(添加在隧道内)
transport.useEncryption = true #传输加密,加密算法采用 aes-128-cfb
transport.useCompression = true #传输压缩,压缩算法采用 snappy
这里用一个黑群晖NAS的http的案例:
serverAddr = "x.x.x.x"
serverPort = 7000
auth.method = "token"
auth.token = "{密码}" # 服务端设置的密码
[[proxies]]
name = "DiskStation"
type = "http"
localIP = "127.0.0.1"
localPort = 5000
transport.useEncryption = true
transport.useCompression = true
customDomains = ["ds.domain.com"]
启动客户端:
# 和启动服务端差不多
frpc -c frpc.toml
成功后即可在web中看到穿透的服务
然后在服务端上即可用中间件对IP:7002设置上反向代理到对应域名,做好DNS解析、SSL之类的设置,即可通过域名访问在家里的NAS了。
Windows部署:
配置启动文件
这里有两种方法,一种是配置好 xxx.bat 后放在C:\Users\<user>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
目录下,这样可以在用户登录后自动启动 xxx.bat 这种方法简单直接
还有一种方法,直接使用 nssm.exe 配置frpc为系统服务,这种方法可以无需登录用户账号后台运行
咱自己用的是第二种方法,为了稳妥,两种方法都演示一遍
第一种: 在frpc目录下新建 xxx.bat 文件,把下方内容填进去
frpc -c frpc.tomlCMD
右键创建快捷方式后将快捷方式扔进下方目录即可C:\Users\<user>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
如果之后要更新 frpc.toml 配置文件,把cmd窗口关闭重启 xxx.bat 就没问题了
第二种:打开 nssm官网 下载 nssm.exe ,国内访问较慢可使用本站提供的 123Pan 下载
解压后在win64/32找到 nssm.exe 放在a目录里,打开 cmd 后cd到a目录下运行
nssm install frpcCMD
输完命令回车后会弹个窗口,根据实际情况按下图填后按 Install service
即可
之后到 任务管理器→服务 中找到 frpc 服务后右键开始就没问题了。如果之后要更新 frpc.toml
配置文件,再次找到此处右键重新启动就没问题了
后记
总之就是,非常好用,可玩性很高,但是要注意安全,不要泄漏密码、端口之类的,避免被不法分子有可乘之机。
有引用自:Frp 0.52及以上版本的全系统保姆级教程(包含frps和frpc的搭建与使用) | Mint’s Blog (hoshiroko.com)
(/ω\)
(☆ω☆)活捉一只野生精灵!
无意间发现宝塔面板自带了