使用Frp进行内网穿透
由于工作需要,我们通常需要远程连接内网的服务器,两个没有公网IP的机器很难直接互联,因此,我们需要一个中介来进行内网穿透。本文将介绍使用FRP进行内网穿透
准备工作
假设我们有三台机器,A、B、C,分别是远程服务器A(只有内网IP),中继服务器B(具有公网IP),本地客户端C
- A: 远程内网服务器 IP:
10.0.0.1
- B: 中继服务器 IP:
123.123.123.123
- C: 本地机器
我们的目标是在A上面通过SSH到A上面,或者在A上通过浏览器访问B的某个端口(例如8001)
为实现这个目标,需要开放B的两个端口,一个是数据传输端口X,另一个是需要代理的端口Y。
这里我们分别设置X=7000
和Y=8001
。
简单的来说就是在云服务器的安全组中打开7000
和8001
端口,记得把入方向和出方向都打开。
FRP内网穿透
- 下载FRP工具包https://github.com/fatedier/frp/releases,并解压后放在A和B上。注意A和B上Frp的版本必须一致
- 在服务器B上,编辑
frps.ini
,并修改为以下内容:
[common]
bind_port = 7000
执行以命令启动服务端,nohup ./frps -c frps.ini > 1.log 2>&1 &
这个时候服务端就启动了,可以访问日志文件1.log
查看运行状态
3. 在内网服务器A上,编辑frpc.ini
,并修改为以下内容
[common]
server_addr = 123.123.123.123
server_port = 7000
kcp_bind_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 8001
[web0]
type = tcp
local_ip = 127.0.0.1
local_port = 8002
remote_port = 8002
common
是监听端口,需要和服务器B上的7000
保持一致;ssh
表示ssh
登录的端口,tcp
表示使用tcp
连接,local_ip
和local_port
是指要登录的机器和端口,也就是本机的22
端口;remote_port
表示远方端口。这个部分可以实现将远程服务器的8001
端口转发到本地的22
端口上,即可实现ssh
登录web0
是web
服务端口,这个名称web0
可以自定义,这个部分可以实现将远程服务器的8002
端口映射到本地的8002
端口上。
在A上执行以命令启动客户端,nohup ./frpc -c frpc.ini > 1.log 2>&1 &
4. 在本地机器上,通过以下命令连接服务器:
ssh username@123.123.123.123 -P 8001
这里username
是内网服务器A上的用户名,123.123.123.123
是公网服务器的IP。
这条命令先访问公网服务器B的8001端口,然后通过端口frp的端口映射,将8001端口转为内网服务器的22端口,这样就在外网通过ssh连上内网的服务器A了。
也可以访问远程服务器的8002端口,来访问内网服务器A上的8002端口,前提是A上的8002端口开启了相关服务。
123.123.123.123:8002