Appleex
Appleex
Published on 2023-08-10 / 367 Visits
0
0

工具 | 使用 frp 实现内网穿透

使用 frp 实现内网穿透

介绍

访问地址:https://gofrp.org/docs/overview/

什么是 frp

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,且支持 P2P 通信。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

为什么使用 frp

通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:

  • 客户端服务端通信支持 TCP、QUIC、KCP 以及 Websocket 等多种协议。
  • 采用 TCP 连接流式复用,在单个连接间承载更多请求,节省连接建立时间,降低请求延迟。
  • 代理组间的负载均衡。
  • 端口复用,多个服务通过同一个服务端端口暴露。
  • 支持 P2P 通信,流量不经过服务器中转,充分利用带宽资源。
  • 多个原生支持的客户端插件(静态文件查看,HTTPS/HTTP 协议转换,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。
  • 高度扩展性的服务端插件系统,易于结合自身需求进行功能扩展。
  • 服务端和客户端 UI 页面。

基本原理

frp 主要由 客户端 (frpc) 和 服务端 (frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。

内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。

用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。

准备工作

快速安装

使用源码文件方式安装

  • 服务端 frps
  1. 查看系统架构
uname -a
# 或
arch
  1. 下载对应系统的软件包并解压

GitHub:Releases · fatedier/frp

  1. 修改或更新 frps.ini
  2. 启动服务
./frpc -c ./frpc.ini

注意:不同的系统,命令方式可能存在差异,所以一定要找对对应的系统

使用 Docker 方式安装

  • 服务端 frps

下面以 CentOS 系统为例

  1. 环境搭建
  1. 在系统任意位置创建一个文件夹,此文档以 /opt/docker/frps 为例
mkdir -p /opt/docker/frps && cd /opt/docker/frps
mkdir -p ./{conf,data,logs}

注意:后续操作中,产生的所有数据都会保存在这个目录,请妥善保存

  1. conf 目录下创建 frps.ini
touch conf/frps.ini
# frps.ini
[common]
# frp 监听端口,与客户端绑定端口
bind_port= 5443
kcp_bind_port = 5443

# dashboard 用户名和密码
dashboard_user= username
dashboard_pwd= password

# dashboard 端口,启动成功后可通过浏览器访问如http://ip:9527

dashboard_port= 9527

# 设置客户端 token,对应客户端有页需要配置一定要记住,如果客户端不填写你连不上服务端

token = 8ad3d1x429a2d
  1. 创建 docker-compose.yml
version: '3.3'
services:
    frps:
        restart: always
        network_mode: host
        volumes:
            - './conf/frps.ini:/etc/frp/frps.ini'
        container_name: frps
        image: snowdreamtech/frps
  1. 启动容器
docker-compose up -d
  • 客户端 frpc

一般客户端会安装在 window、macOS、nas 等一些在局域网中使用的设备
下面是使用命令行方式,仅作为参考示例

  1. 环境搭建
  1. 在系统任意位置创建一个文件夹,此文档以 /opt/docker/frpc 为例
mkdir -p /opt/docker/frpc && cd /opt/docker/frpc
mkdir -p ./{conf,data,logs}
  1. conf 目录下创建 frps.ini
# frpc.ini
[common]
# 服务端IP
server_addr = 108.166.202.212
server_port = 5443
token = 8ad3d1x429a2d

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 222
# 这个自定义,之后再ssh连接的时候要用
remote_port = 6000 

[web]
type = tcp
local_ip = 127.0.0.1
local_port = 8092
remote_port = 6001

[NAS]
type = tcp
local_ip = 127.0.0.1
local_port = 5000
remote_port = 6003

[RDP]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7001


[vnc]
type = tcp
local_ip = 127.0.0.1
local_port = 5900
remote_port = 5900
use_encryption = true
use_compression = true
  1. 创建 docker-compose.yml
version: '3.3'
services:
    frpc:
        restart: always
        network_mode: host
        volumes:
            - './conf/frpc.ini:/etc/frp/frpc.ini'
        container_name: frpc
        image: snowdreamtech/frpc
  1. 启动容器
docker-com pose up -d

资源下载

GitHub 地址: GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.

官方文档: gofrp

镜像地址:snowdreamtech/frpc - Docker Image | Docker Hub

FAQ

参考文献


Comment