前言
内网穿透方式很多,可以用公网IP进行端口映射,DDNS等。现在我有个云服务器,使用它做中转作为内网穿透的工具。
可以在这个网址了解下原理基础:内网穿透工具的原理与开发实战
FRP内网穿透
FRP是一个内网穿透的反向代理应用。选择FRP是因为支持 TCP、UDP、HTTP、HTTPS 等多个协议和功能
这包括:
- 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
- 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
- 代理组间的负载均衡。
- 端口复用,多个服务通过同一个服务端端口暴露。
- 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
- 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
- 服务端和客户端 UI 页面。
操作准备
- 拥有公网Ip的服务器
- 内网服务器
下载安装
下载地址:https://github.com/fatedier/frp/releases/tag/v0.45.0
1.选择合适的版本安装
我这下载linux_amd64,成功后,解压
tar -zxvf frp_0.27.0_linux_amd64.tar.gz
mv frp_0.27.0_linux_amd64 frp
2.进入frp文件夹
查看文件如下
- frpc:客户端可执行程序
- frpc_full.ini:客户端所有配置项(可以再此文件查看frp的所有的配置项)
- frpc.ini:客户端配置项
- frps:服务端可执行程序
- frps_full.ini:服务端所有配置项(可以再此文件查看frp的所有的配置项)
- frps.ini:服务端配置项
- LICENSE:许可证
- 服务端只需要编辑frps.ini文件
- 客户端只需要编辑frpc.ini文件
运行
# 运行服务端
./frps -c frps.ini
# 启动客户端
./frpc -c ./frpc.ini
实战:搭建SSH连接访问内网计算机
- 拥有公网Ip的服务器部署FRP服务端
- 内网服务器部署FRP客户端
1.在公网服务器下载frp解压编辑frps.ini文件,设置 frp 服务器用户接收客户端连接的端口
[common]
bind_port = 7000
启动
# 运行服务端
./frps -c frps.ini
2.在内网服务器下载frp解压编辑frpc.ini文件,假设 frps 所在服务器的公网 IP 为 x.x.x.x:
[common]
server_addr = x.x.x.x
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
22代表SSH监听的端口。remote_port
表示在 frp 服务端监听的端口,访问此端口的流量将会被转发到本地服务对应的端口。
启动
# 启动客户端
./frpc -c ./frpc.ini
3.测试访问
ssh -oPort=6000 user@x.x.x.x
其他
正常运行关闭终端后就会停止,所以后台保持运行方式如下:
使用nohup,比如启动服务端
nohup ./frpc -c ./frpc.ini > frpc .log 2>&1 &
具体可以看这个使用教程
其他的穿透场景可以看官方教程:官方文档