普通用户如何让内网服务器上网

普通用户如何让内网服务器上网

网络拓扑

Drawing 20220425 22.01.46.excalidraw.png

需求

  • 管理节点和计算节点都在一个内网当中,整个网络只有管理节点暴露了连接地址
  • 平时通过ssh访问gpu002,都只能通过登录管理节点ssh test@172.20.0.100,再ssh gpu002为跳板访问gpu002
  • 外部主机>>跳板机(管理节点)>>内部主机(计算节点)
  • 现在gpu002需要通过web页面管理数据(向外提供端口访问8888),并且需要联网验证许可证(需要联网)

问题

  1. 外部主机:
    • ip地址为172.20.0.123,可以开放全部端口,可以连接到管理节点MGT,但无法直接连接至gpu002
  2. 跳板机(管理节点):
    • ip地址为172.20.0.100(外),mgt(内)
  3. 内部主机(计算节点)
    • 可以暴露多个端口,但iptable和route都限制了路由

本地转发

  1. 使用管理节点(172.20.0.100,mgt)为跳板机,将gpu002的8000端口映射到本地2121端口
  2. 命令格式
ssh -L <本地端口>:<内部主机>:<内部主机的端口> <跳板机> -N

-L:开启本地转发
<本地端口>:2121 (选择本地任意一个未使用的端口即可)
<内部主机>:隐藏在跳板机之后的节点,如gpu002,可以通过跳板机访问
<内部主机的端口>:本例中为8000,为计算节点提供的web服务端口
<跳板机>:格式为ssh访问格式,账户@ip地址,本例中为test@172.20.0.100

# 在本地节点上执行
ssh -L 2121:gpu002:8000 test@172.20.0.100 -N
  1. 通过访问http://localhost:2121,借助跳板机访问gpu002的服务

远程转发

  1. 使用跳板机,将172.20.0.0123的7890端口,映射到gpu002
  2. 再将本地端口设置为代理,从而使内网gpu002可以上网
ssh -R 8000:172.20.0.123:7890 -N gpu002
export http_proxy='http://127.0.0.1:8000'