1. 概述
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
- 客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。
- 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间。
- 代理组间的负载均衡。
- 端口复用,多个服务通过同一个服务端端口暴露。
- 多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
- 高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。
- 服务端和客户端 UI 页面。
github: https://github.com/fatedier/frp/
2. 准备工作
2.1. 下载frp
release: https://github.com/fatedier/frp/releases
2.2. 机器准备
- 一台具有公网IP的机器,作为Frp Server
- 一台内网内的机器,作为Frp Client
3. Frp Server
- 下载docker image
采用docker方式启动
https://hub.docker.com/r/lihaixin/frp/dockerfile
https://github.com/lihaixin/frp-docker
$ docker pull lihaixin/frp
- 修改配置文件
$ cat docker-compose.yml
version: '2.3'
services:
frp-server:
image: 'lihaixin/frp'
ports:
- '21010-21040:21010-21040'
mem_limit: 500m
environment:
- TOKEN=XXYYZZ1122
- FRP_PORT=21010
- ALLOW_PORTS=21011-21040
network_mode: bridge
- 启动
$ docker-compose up -d
- 查看dashboard
配置DASHBOARD_PWD
,通过7000端口,可以查看frp运行情况(以后尝试下)
4. Frp Client
- 下载frp_0.33.0_linux_amd64.tar.gz,修改配置文件
$ cat frpc.ini
[common]
server_addr = 111.222.333.444
server_port = 21010
authentication_method = token
token = XXYYZZ1122
[frpc-ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 21011
- 创建开机启动
$ cat /etc/systemd/system/frpc.service
[Unit]
Description=FRPC
After=network-online.target
[Service]
Type=simple
ExecStart=/u/devops/frp/frpc -c /u/devops/frp/frpc.ini
KillMode=process
Restart=on-failure
RestartSec=1min
[Install]
WantedBy=multi-user.target
加载服务,并enable开机启动
sudo systemctl daemon-reload
sudo systemctl enable frpc
sudo systemctl start frpc
- 备注:frpc也可以通过docker启动,这样不用设置开机启动
5. 测试
- 找另外一个nat内的机器,测试是否ok
ssh ssh-account@111.222.333.444 -p 21011