前置条件
- 一台公网服务器(阿里云或者腾讯云等等)
- 一台内网服务器(实验室服务器),且需保证在相同内网能够通过 ssh 访问
具体工作
具体参考了一篇关于 frp 内网穿透的博客
使用 frp 对内网服务器做内网穿透,frp 支持 tcp, udp, http, https 协议,通过 frp 可以远程用 ssh 登入内网主机
frp 安装
首先从 frp下载链接 上下载 frp 安装包,解压后可见多个文件,大致可分为 frpc* 和 frps,frps 主要在公网服务器上使用,frpc* 则是在内网服务器上使用。
在公网服务器上配置并启动
修改配置文件 frps.ini,如下:
[common]
bind_port = 7000 #frp服务端端口(必须)
然后启动 frps:
./frps -c frps.ini
查看 nohup.out 的信息,success
# tail -f nohup.out
2018/09/14 05:33:15 [I] [service.go:130] frps tcp listen on 0.0.0.0:7000
2018/09/14 05:33:15 [I] [root.go:207] Start frps success
2018/09/14 05:49:47 [I] [service.go:130] frps tcp listen on 0.0.0.0:7000
2018/09/14 05:49:47 [I] [root.go:207] Start frps success
2018/09/14 06:28:59 [I] [service.go:319] client login info: ip [125.71.219.33:37092] version [0.21.0] hostname [] os [linux] arch [amd64]
2018/09/14 06:28:59 [I] [proxy.go:217] [93eec0dde173fc68] [ssh] tcp proxy listen port [6000]
2018/09/14 06:28:59 [I] [control.go:335] [93eec0dde173fc68] new proxy [ssh] success
在内网服务器上配置并启动
修改配置文件 frpc.ini,如下:
[common]
server_addr = 0.0.0.0 #frp服务端地址,可以填ip或者域名,这里假设为0.0.0.0
server_port = 7000 #frp服务端端口,即填写服务端配置中的 bind_port
[ssh]
type = tcp #连接类型,填tcp或udp
local_ip = 127.0.0.1 #填127.0.0.1或内网ip都可以
local_port = 22 #需要转发到的端口,ssh端口是22
remote_port = 6000 #frp服务端的远程监听端口,即你访问服务端的remote_port就相当于访问客户端的 local_port,如果填0则会随机分配一个端口
然后在公网服务器上配置防火墙,允许 server_port 和 remote_port 这两个端口通流量
然后启动 frpc:
./frpc -c frpc.ini
查看 nohup.out 的信息,success
$ tail -f nohup.out
2018/09/14 14:28:58 [I] [proxy_manager.go:300] proxy removed: []
2018/09/14 14:28:58 [I] [proxy_manager.go:310] proxy added: [ssh]
2018/09/14 14:28:58 [I] [proxy_manager.go:333] visitor removed: []
2018/09/14 14:28:58 [I] [proxy_manager.go:342] visitor added: []
2018/09/14 14:28:59 [I] [control.go:246] [93eec0dde173fc68] login to server success, get run id [93eec0dde173fc68], server udp port [0]
2018/09/14 14:29:00 [I] [control.go:169] [93eec0dde173fc68] [ssh] start proxy success
测试
在本地电脑上执行 ssh 命令:
ssh -oPort=remote_port username@server_addr
或者
ssh -p remote_port username@server_addr
上面登录使用的 username 是内网机器的用户名,server_addr是公网服务器的IP,port remote_port就是设置的 remote_port,最后的登录密码是内网机器的密码,而不是公网机器的密码,这一点一定要注意。