工具 | 使用 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 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信。

工具 | 使用 frp 实现内网穿透_第1张图片

准备工作

  • 一台服务器

    服务器的配置看个人需求,建议购买国外 VPS ,可以减少备案和带宽限制的麻烦

    参考内容(非必须)
    Vultr注册购买:https://www.vultr.com/

  • SSH 连接工具(可选)

    可选,现在很多服务器厂商都支持 WEB 端访问,不过建议安装必要的工具,因为这样操作比较方便(不针对小白)

    参考内容(非必须)
    FinalShell下载:http://www.hostbuf.com/t/988.html

  • 域名(可选)

    建议准备好一个域名,它满足市面上 99% 搭建场景,放在哪里都是合适的

    参考内容(非必须)
    域名购买地址:https://www.namesilo.com

  • NPM 反向代理工具(可选)

    全称 Nginx Proxy Manager,用于通过简单而强大的界面管理 Nginx 代理主机

    官方文档:https://nginxproxymanager.com/

快速安装

使用源码文件方式安装

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

GitHub:https://github.com/fatedier/frp/releases

  1. 修改或更新 frps.ini

  2. 启动服务

./frpc -c ./frpc.ini

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

使用 Docker 方式安装

  • 服务端 frps

下面以 CentOS 系统为例

  1. 环境搭建
  • Docker 安装文档
  • Docker Compose 安装文档
  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. 环境搭建
  • Docker 安装文档
  • Docker Compose 安装文档
  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 地址: https://github.com/fatedier/frp

官方文档: https://gofrp.org/docs/concepts/

镜像地址:https://hub.docker.com/r/snowdreamtech/frpc

FAQ

参考文献

  • 家里没有公网 IP?FRP+NPM+VPS = 随时随地用域名访问家里的任何设备!内网穿透,从未如此简单
  • 树莓派 FRP 教程
  • 使用gost端口转发实现内网穿透

你可能感兴趣的:(软件工具,运维,开源软件)