@kpatrick
2019-10-25T16:07:46.000000Z
字数 1599
阅读 74
work
网络
阅读材料:
- Ubuntu使用ssh反向通道登陆内网机器
- How系列-公网如何ssh到内网的Linux系统中?
- 使用 frp 轻松实现内网穿透
- frp[github page]
想要对深度学习模型demo进行测试,需要用外网访问,但是目前只有内网有GPU设备,想要借用内网的硬件完成部署工作,需要如何做呢?
解决方案就是网络穿透。
反向ssh:通过一台公网服务器,通过ssh
命令建立反向隧道
正向与反向的区别在于正向连接是使用者通过自己的客户端操作服务器资源;反向连接是使用者通过服务器操作客户端资源。结合上图理解:
客户端1
ssh
连接公网服务器时,所有的操作都在服务器上,所以称为正向隧道;
客户端2ssh
连接公网服务器的2244
端口时,公网服务器全部转发客户端1,使用者通过公网服务器操作客户端1,所以公网服务器到客户端1的连接称为反向隧道。
使用:
在客户端1执行一条命令即可建立反向隧道:
$ssh -N -f -R *:2244:localhost:22 106.10.10.xxx
其中-N
表示不执行命令,只转发;-f
表示后台运行;-R
表示反向隧道;*:2244:localhost:22
表示监听服务器的2244
端口,所有包转发到本地的22
端口;106.10.10.xxx
为服务器IP。我只要在客户端2执行
ssh -p 2244 xxx@106.10.10.xxx
就能连接客户端1的电脑了。实际使用中会发现,该通道会经常自动断开,这是正常现象。可通过
autossh
实现断开重连。使用autossh
之前,必须确保该客户端与服务器连接使用了无密码的密钥对登陆。
$autossh -M 5678 -N -f -R *:2244:localhost:22 106.10.10.xxx
其中-M 5678
表示通过5678
端口监听连接状态,有问题就重连。
注意事项:需要在公网ip机器上配置GatewayPorts
首先需要在公网IP的这台机器上配置ssh服务, 使能其端口转发:
sudo vi /etc/ssh/sshd_config
添加如下行:
GatewayPorts yes
重启sshd生效:
sudo service ssh restart
frp:frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https协议。
使用:
准备工作:
首先,你需要一台有公网IP的服务器(下文称服务端),一台需要实现内网穿透的电脑(下文称客户端),以及一个域名,如果你只是用于建立SSH反向代理可以不需要域名。
安装使用:
服务端(公网ip机器)和客户端(内网机器)分别git clone下来,其中frps是服务端相关文件,frpc是客户端用的。
root@HDP01:/usr/local/frp/frp_0.20.0_linux_amd64# tree .
.
├── frpc
├── frpc_full.ini
├── frpc.ini
├── frps
├── frps_full.ini
├── frps.ini
└── LICENSE
服务器和客户端的配置:
server端的配置让运维处理(待补充),client的配置如下
vim frpc.ini
[common]
server_addr = 61.175.241.55 # server公网ip
server_port = 8001 # frps的端口
token = a12345678 # 密码
tls_enable = true
[translate]
type = tcp # client端注册的穿透类型
local_ip = 127.0.0.1 # 本地ip
local_port = 9888 # 本地port
remote_port = 8002 # 远程port
分别根据配置启动server和client:
./frps -c ./frps.ini
./frpc -c ./frpc.ini
http方式访问即可。