# 使用frp做内网穿透
# 简述
之前用过ngrok,将内网的某个http服务暴露到公网。今天试试frp,将内网的服务器的ssh端口暴露到公网,实现外网直接访问内网服务器。
过程和ngrok一样:
- 内网服务器(192.168.5.211)可以上网
- 外网有一台服务器,固定ip是1.2.3.4
- 通过frp将这两台服务器连接起来,1.2.3.4这台服务器会暴露出一个端口8090,用户通过这个端口,即可连接到内网服务器192.168.5.211的22端口
# 配置过程
服务器需要安装好go
本次使用的go版本是:go1.6.2
frp版本是:frp_0.21.0_linux_amd64
frp的地址是https://github.com/fatedier/frp,在上面下载好对应的版本,解压后的文件如下:
frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini
各个文件的作用如下:
文件名 | 用途 |
---|---|
frpc | 客户端 |
frpc_full | 客户端的详细配置 |
frpc.ini | 客户端的简洁配置 |
frps | 服务端 |
frps_full.ini | 服务端的详细配置 |
frps.ini | 服务端的简洁配置 |
# 服务端配置
进入frp_0.21.0_linux_amd64目录,修改frps.ini内容如下:
[common]
bind_addr = 0.0.0.0
bind_port = 9090 #客户端连接的端口
log_file = ./frps.log
log_level = info
log_max_days = 3
token = 123456 #token验证
allow_ports = 2000-3000,3001,3003,4000-50000,8090 #用于暴露到公网的端口
max_pool_count = 5
max_ports_per_client = 0
authentication_timeout = 900
tcp_mux = true
启动服务
./frps -c ./frps.ini
如果看到类似如下信息,则是启动成功
2018/10/11 18:17:54 [I] [service.go:130] frps tcp listen on 0.0.0.0:9090
2018/10/11 18:17:54 [I] [root.go:207] Start frps success
可用nohup来启动,这样即使终端断开了,服务也会继续运行
nohup ./frps -c ./frps.ini &
# 客户端配置
进入frp_0.21.0_linux_amd64目录,修改frpc.ini内容如下:
[common]
server_addr = 1.2.3.4
server_port = 9090
token = 123456 #和服务端设置的token一致
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 8090 #暴露在公网的端口
启动客户端
./frpc -c ./frpc.ini
如果看到类似如下信息,则是启动成功
2018/10/11 06:31:23 [I] [proxy_manager.go:300] proxy removed: []
2018/10/11 06:31:23 [I] [proxy_manager.go:310] proxy added: [ssh]
2018/10/11 06:31:23 [I] [proxy_manager.go:333] visitor removed: []
2018/10/11 06:31:23 [I] [proxy_manager.go:342] visitor added: []
2018/10/11 06:31:23 [I] [control.go:246] [0a66cb717f83f5dd] login to server success, get run id [0a66cb717f83f5dd], server udp port [0]
2018/10/11 06:31:23 [I] [control.go:169] [0a66cb717f83f5dd] [ssh] start proxy success
在另一台外网机器上连接1.2.3.4的8090端口,如果能正常连接,并且访问的是192.168.5.211,则是配置成功了。 同样,也可用nohup来启动,保证服务正常运行。
nohup ./frpc -c ./frpc.ini &
如果要映射多个端口,需要启动多个frp服务,一个服务对应一组端口
# 参考
https://www.hi-linux.com/posts/25686.html