(目前仅实现了SSH功能)
问题: 具有公网IP的计算机A需要访问仅有内网IP的gpu服务器C。
情况: 本来想通过具有内网和外网ip的跳板机D实现转发。但不知D做了何种设置,A始终连不上D。
解决方案: 使用了一台具有公网ip的云服务器B。保证A与B能ping通。在B和C之间建立frp。具有公网ip的B作为服务端,gpu服务器C作为客户端。
配置文件
frps.ini (B中配置):
[common]
bind_addr = 0.0.0.0
bind_port = 7000
# udp port to help make udp hole to penetrate nat
bind_udp_port = 7001
dashboard_port = 7500
# dashboard 用户名密码,默认都为 admin
dashboard_user = admin
dashboard_pwd = admin
vhost_http_port = 2780
subdomain_host = p2pnet.club
frpc.ini ( C中配置):
[common]
server_addr = X.X.X.X (云服务器B的ip)
server_port = 7000
admin_addr = 127.0.0.1
admin_port = 7400
[ssh]
local_ip = 127.0.0.1
local_port = 22
remote_port = 7022
[web]
type = http
local_port = 2780
subdomain = office
实现步骤:
- 下载frp工具,分别在B和C上安装/解压。
- 按上述配置修改配置文件
- 在B的frp相应目录
./frps -c frps.ini
- 这之后,在C的frp相应目录
./frpc -c frpc.ini
此时frp建立完毕。可以在A或者B访问gpu服务器C
使用方式
通过B访问服务器:
先从A登录B,在B端输入:
ssh -p <frpc.ini中remote_port> <C用户名>@localhost
例如:
ssh -p 7022 root@localhost
通过A访问服务器:
在A端,
ssh -p <frpc.ini中remote_port> <B用户名>@<B的公网ip>
例如:
ssh -p 7022 root@X.X.X.X
会要求你输入gpu服务器C的密码,无需知道服务器B的密码。
相当于将B的7022端口和C的22号端口绑定,A和C之间的消息通过B转发。