前言
什么是内网穿透呢?
就比如,两名Minecraft玩家,他们都想联机,联机的最低要求就是要同一个局域网,欸!但是,他们都不是在同一个局域网。那么就需要A或者B其中一位,穿透广域网,去到另外一位的家里的局域网,成为局域网的一员。我们称这种行为叫内网穿透,这样就能联机了! 简单一点就是,两位家里各开一扇门,建一条专用的路连接这两扇门,连接你家和他家。不过这扇门有妖术,会让你自动化妆为对方家人 frp 主要由 客户端(frpc) 和 服务端(frps) 组成,服务端通常部署在具有公网 IP 的机器上,客户端通常部署在需要穿透的内网服务所在的机器上。 内网服务由于没有公网 IP,不能被非局域网内的其他用户访问。 用户通过访问服务端的 frps,由 frp 负责根据请求的端口或其他信息将请求路由到对应的内网机器,从而实现通信
准备工作
- Frp服务端
- Frp客户端
- 服务器一台(带宽适中)
服务端安装
请前往Frp的开源地址 https://github.com/fatedier/frp/releases 下载合适你服务器系统的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压缩包的指令,学到了哦! 上面的解压出来都基本是这样 然后再输入
cd frp_0.51.0_linux_amd64/
接下来就让我们来了解下 frps frps就是服务器端的程序了,您可以使用
./frps
来直接启动(当然,他只是启动了默认配置文件也就是 frps.ini) 又或者你可以指定配置文件
./frps -c xxx.ini
使用nano来编辑frps.ini
nano frps.ini
在具有公网 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查看!!!