搭建 frp 内网穿透服务
准备材料
- 公网IP 的 ECS 一台
- 域名 (若不需要解析则不需要)
安装 frps 服务端
- 下载 frp 安装包
根据操作系统下载不同版本,我这边使用的 ECS 操作系统为 centos ,选择 frp_0.34.0_linux_amd64.tar.gz
lsb_release -a
- 解压压缩包,修改
frps.ini
[common]
bind_port = 16001 # frps 服务启动,占用的端口
vhost_http_port = 80 # frps 服务监听转发的端口
注意: 如果 vhost_http_port=9200,最后浏览器访问域名就是 frp.hntool.vip:9200
- 后台启动
frps服务
nohup ./frps -c frps.ini > frp.log 2>&1 &
- 查看日志
tail -f frp.log
- 自定义开启脚本,新建
start.sh文件,加入以下内容
#!/bin/sh
nohup ./frps -c frps.ini > frp.log 2>&1 &
# 注意 /usr/local/src/frp_0.34.0_linux_amd64 这个目录是 frp 服务所在的目录
echo $!> /usr/local/src/frp_0.34.0_linux_amd64/obj.pid
- 自定义关闭脚本,新建
shutdown.sh文件,加入以下内容
#!/bin/sh
PID=$(cat /usr/local/src/frp_0.34.0_linux_amd64/obj.pid)
kill -9 $PID
安装 frpc 客户端
下载 frp 客户端
在目标内网设备机器,安装客户端。 根据操作系统下载不同版本
树莓派 : frp_0.34.0_linux_arm.tar.gz
Windows : frp_0.34.0_windows_amd64.zip 或 frp_0.34.0_windows_386.zip
Mac : frp_0.34.0_darwin_amd64.tar.gz
Centos : frp_0.34.0_linux_amd64.tar.gz
自定义域名访问内网服务
- 修改
frpc.ini
[common]
server_addr = 111.111.111.111 # ECS的公网IP
server_port = 16001
[web] # 随意但必须唯一
type = http
local_port = 8099 # 本地目标服务的端口
custom_domains = frp.hntool.vip # 自定义的域名(全域名)
- 启动客户端
./frpc -c ./frpc.ini
- 添加开机自启
sudo vim /etc/rc.local
在exit 0 前面添加以下内容
nohup /home/pi/frp/frpc -c /home/pi/frp/frpc.ini &
访问 windows 主机
- 下载 windows 版本的 frp 客户端,如果下载比较慢的话,可以用迅雷下载。
- 解压
- 修改
frpc.ini
[common]
server_addr = 111.111.111.111
server_port = 16001
[win]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 16004
- 前台启动
frpc.exe -c frpc.ini
- 后台启动,下载 winsw
解压,放在 frp 目录下,并且新建一个 WinSW-x64.xml 文件
WinSW-x64.xml 文件内容如下:
<service>
<id>frp</id>
<name>frp</name>
<description>frp client</description>
<executable>frpc</executable>
<arguments>-c frpc.ini</arguments>
<onfailure action="restart" delay="60 sec"/>
<onfailure action="restart" delay="120 sec"/>
<logmode>reset</logmode>
</service>
安装 frp 服务 ,打开 cmd 命令行,执行下面的命令
WinSW-x64.exe install
按 回车 即可安装,打开任务管理器,点开服务,如果有 frp 服务,表明安装成功
右键,点击开始,启动服务
授权 token
为了安全起见,建议设置一个 token ,frp 客户端必须使用正确的 token 才能连接 frp 服务端
服务端 frps.ini 配置修改,加入以下内容
[common]
bind_port = 16001
vhost_http_port = 16002
token = 12345678
客户端 frpc.ini 配置修改,加入以下内容
[common]
server_addr = 111.111.111.111
server_port = 16001
token = 12345678
安全问题(stcp)模式
如果直接暴露于公共网络,一些服务将面临风险。对于STCP(秘密TCP)模式,需要预共享密钥才能从另一个客户端访问服务。
服务端:
[common]
bind_port = 16001
客户端1:
[common]
server_addr = 111.111.111.111
server_port = 16001
# 注意这里的 win 就是客户端2的 server_name
[win]
type = stcp
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
local_ip = 127.0.0.1
# 远程桌面本地端口号
local_port = 3389
客户端2:
[common]
server_addr = 111.111.111.111
server_port = 16001
[rdp_visitor]
type = stcp
# stcp 的访问者,默认就这个,无须更改
role = visitor
# 要访问的 stcp 代理的名字
server_name = win
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
# 绑定本地端口用于访问 远程桌面 服务
bind_addr = 127.0.0.1
bind_port = 6000
远程桌面连接