前言

什么是内网穿透呢?

就比如,两名Minecraft玩家,他们都想联机,联机的最低要求就是要同一个局域网,欸!但是,他们都不是在同一个局域网。那么就需要A或者B其中一位,穿透广域网,去到另外一位的家里的局域网,成为局域网的一员。我们称这种行为叫内网穿透,这样就能联机了! 简单一点就是,两位家里各开一扇门,建一条专用的路连接这两扇门,连接你家和他家。不过这扇门有妖术,会让你自动化妆为对方家人 frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。 内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。 用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信

准备工作

  1. Frp服务端
  2. Frp客户端
  3. 服务器一台(带宽适中)

服务端安装

请前往Frp的开源地址 https://github.com/fatedier/frp/releases 2023-07-15T16:32:18.png 下载合适你服务器系统的Frp版本 以 Debian 为例 连接你的服务器终端,然后输入

wget -O frp.tar.gz https://github.com/fatedier/frp/releases/download/v0.51.0/frp_0.51.0_linux_amd64.tar.gz

上面的https下载链接会随着版本的更新而变化,你可以到时候更改指令上的连接

如果你没有安装 wget 的话,你也可以按照下面的指令安装 Debian 安装方法:

apt-get install wget

Centos安装方法:

yum install wget

ubuntu

apt-get install wget

将Frp的文件都下载下来之后,将他解压(你也可以将它下载到一个目录里,更方便) 解压指令是:

tar -xzvf frp.tar.gz

tar -xzvf 是解压tar.gz压缩包的指令,学到了哦! 上面的解压出来都基本是这样 2023-07-15T16:40:02.png 然后再输入

cd frp_0.51.0_linux_amd64/

接下来就让我们来了解下 frps frps就是服务器端的程序了,您可以使用

./frps

来直接启动(当然,他只是启动了默认配置文件也就是 frps.ini) 又或者你可以指定配置文件

./frps -c xxx.ini

使用nano来编辑frps.ini

nano frps.ini

2023-07-15T16:48:18.png 在具有公网 IP 的机器上部署 frps,修改 frps.ini 文件,这里使用了最简化的配置,设置了 frp 服务器用户接收客户端连接的端口:7000,当然你可以随意修改 在 frps_full.ini 里则有更多示例的 frps 代码,可以供您参考

这样子,服务端方面就配置好了!

客户端

其实客户端也一样,访问Frp的开源地址 https://github.com/fatedier/frp/releases 下载对应客户端系统对应的版本 下面就不做演示,制作简单配置教程

您可以通过 ./frpc -c ./frpc.ini 启动客户端。如果需要在后台长期运行,建议结合其他工具使用,例如 systemd 和 supervisor 其原理跟服务端相似,如果是 Windows 用户,需要在 cmd 终端中执行命令,可以创建一个Start.bat文件来进行打开它,例如:

@echo off
title frpc client
.\frpc -c frpc.ini

为示例 Start.bat 代码 在 frpc_full.ini 里也同样拥有更多示例的 frpc 的示例代码,供您参考! 客户端有很多需要服务器代理的类型 例如

  • tcp 单纯的 TCP 端口映射,服务端会根据不同的端口路由到不同的内网服务
  • udp 单纯的 UDP 端口映射,服务端会根据不同的端口路由到不同的内网服务
  • http 针对 HTTP 应用定制了一些额外的功能,例如修改 Host Header,增加鉴权
  • https 针对 HTTPS 应用定制了一些额外的功能
  • stcp 安全的 TCP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口
  • sudp 安全的 UDP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口
  • xtcp 点对点内网穿透代理,功能同 stcp,但是流量不需要经过服务器中转
  • tcpmu 支持服务端 TCP 端口的多路复用,通过同一个端口访问不同的内网服务

接下来进行简单的启动/创建一个Frpc服务

[common]
server_addr = x.x.x.x
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
emote_port = 6000

在需要被访问的内网机器上(SSH 服务通常监听在 22 端口)部署 frpc,修改 frpc.ini 文件,假设 frps 所在服务器的公网 IP 为 x.x.x.x local_ip 和 local_port 配置为本地需要暴露到公网的服务地址和端口。remote_port 表示在 frp 服务端监听的端口,访问此端口的流量将会被转发到本地服务对应的端口 然后分别启动 frps 和 frpc 然后你就可以使用该服务了,该配置文件打开的是22端口,所以是SSH默认端口,我们可以尝试使用SSH服务连接它 假设你的用户名是 whohh 就可以输入

ssh -oPort=6000 whohh@x.x.x.x

Windows的SSH服务的话就输入

ssh whohh@x.x.x.x -p 6000

这样子就基本成功了! 其他详细的Frpc配置可以在frpc_full.ini查看!!!