一、前置条件
- 本地计算机A
- 具有公网IP的跳板机B
- 内网服务器C
二、步骤
1. 在内网服务器上启动Web服务
以大模型部署为例,在内网服务器C上使用LLama-Factory,在其8000端口启动大模型调用API服务:
CUDA_VISIBLE_DEVICES=0 API_PORT=8000 llamafactory-cli api examples/inference/qwen1_5_1_8B.yaml
启动服务后,可以先在内网服务器C上测试服务是否正常:
curl http://localhost:8000/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "qwen", "messages": [{"role": "user", "content": "hello"}], "temperature": 0.7}'
若有文本结果返回,说明服务启动成功。
2. 搭建SSH反向代理
为了让本地计算机A访问内网服务器,需要构建SSH反向代理,利用具有公网IP的服务器作为跳板机,访问内网服务器。
1.在内网服务器C上配置ssh config文件,方便后续连接。在内网服务器C上,为~/.ssh/config添加跳板机别名:
Host t1
HostName 跳板机IP
User 跳板机用户名
ServerAliveInterval 120
2.将内网服务器C的公钥添加到跳板机B上。
3.在内网服务器C上运行反向代理命令(以2000端口为例):
ssh -R 2000:localhost:22 t1
若能够连接到跳板机B上,且登录跳板机B后,运行ssh 内网服务器用户名@localhost -p 2000
,在输入内网服务器用户对应的密码后可以正常连接,说明反向代理建立成功。
注意:
- 为了让该命令持续运行,可以使用nohup、tmux等方法。
- 为了让该命令稳定运行,可以使用autossh工具。
3. 在本地计算机上调用内网服务器上的API
1.为方便连接,在本地计算机上配置ssh config文件,即添加以下内容:
Host t1
HostName 跳板机IP
User 跳板机用户名
ServerAliveInterval 120
Host c1
HostName localhost
User 内网服务器用户名
ProxyJump t1
ServerAliveInterval 120
Port 2000
2.在本地计算机A上进行端口转发,以3000端口为例:
ssh -L 3000:localhost:8000 c1
3.测试本地计算机上api调用:
在本地计算机A上运行:
curl http://localhost:3000/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "qwen", "messages": [{"role": "user", "content": "hello"}], "temperature": 0.7}'
若有文本结果返回,说明端口转发成功。