内网穿透

外网 访问内网服务器。

1. frp(提供软件服务)

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

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

frp github | bilibili 视频教程 | frp中文文档 | frp下载地址 | 官方示例

1.1. 阅读frp中文文档

移步到官网 -> frp中文文档

frp需要配置两端,客户端和服务端,服务端是具有公网ip的服务器,客户端是内网中的服务器。

1.2. 下载

frp下载地址

根据操作系统选择对应的版本。

1.3. 配置 服务端和客户端

目录介绍:frpc前缀的文件是内网服务需要的;frps前缀的文件是公网IP需要的。

可以查看官网示例,这里也简单的做一些介绍。

1.3.1. 公网服务需要配置frps.ini文件

1
2
[common]
bind_port = 7000

参数描述:

  • bind_port:表示frp服务对应端口,后续需要在内网服务器对应frpc.ini文件也对应上。

1.3.2. 内网服务需要配置frpc.ini文件

按需求进行配置信息,除基础信息配置common外,其他的根据自己需求进行摘选(每一个标签都是一个独立的模块)。

例子:

1
2
3
4
5
6
7
8
9
[common]
server_addr = ********
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

基础配置参数描述:

  • server_addr表示公网服务器的IP/域名。
  • server_port表示对应公网frp服务的端口。
1.3.2.1. ssh

通过 SSH 访问内网机器

1
2
3
4
5
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

参数描述:

  • type表示对应类型。
  • local_iplocal_port 配置为本地需要暴露到公网的服务地址和端口。
  • remote_port 表示在 frp 服务端监听的端口,访问此端口的流量将会被转发到本地服务对应的端口。
1.3.2.2. web

配置web服务

1
2
3
4
5
6
7
8
9
10
11
[web]
type = tcp
local_ip = 127.0.0.1
local_port = 9002
remote_port = 9002

[web2]
type = tcp
local_ip = 127.0.0.1
local_port = 9101
remote_port = 9101

参数描述:

可支持多个web服务。

  • type表示对应类型。
  • local_iplocal_port 配置为本地需要暴露到公网的服务地址和端口。
  • remote_port 表示在 frp 服务端监听的端口,访问此端口的流量将会被转发到本地服务对应的端口。

1.4. frp服务启动

先通过 ./frps -c ./frps.ini 启动服务端,再通过 ./frpc -c ./frpc.ini 启动客户端。如果需要在后台长期运行,建议结合其他工具使用,例如 systemdsupervisor

1.5. frp服务设置 后台启动 / 开机启动

systemctl来控制启动

以服务端为例子:

sudo vim /lib/systemd/system/frps.service
在frps.service里写入以下内容

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=fraps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/your/path/frps -c /your/path/frps.ini

[Install]
WantedBy=multi-user.target

然后就启动frps
sudo systemctl start frps
再打开自启动
sudo systemctl enable frps

  • 如果要重启应用,可以这样,sudo systemctl restart frps
  • 如果要停止应用,可以输入,sudo systemctl stop frps
  • 如果要查看应用的日志,可以输入,sudo systemctl status frps

2. Ngrok(提供线上隧道和线上管理平台)

2.1. 注册/登陆Ngork

点击进入Ngrok官网

2.2. 购买隧道(有免费的)

image-20210718150645562

配置相关信息

2.3. 下载/使用Ngork客户端

不同系统,使用不同,详情需要查看官方文档。

Mac 版本

1
./sunny clientid 隧道id