本地端口转发

  • 机器与网络状况

    qbit 的开发机为 Q(192.168.1.Q),
    想要访问主机 D(192.168.2.D) 上的 MongoDB(27017)
    Q 不能直连 MongoDB 192.168.2.D:27017
    Q 可以通过 ssh 访问主机 J(192.168.2.J)
    J 可以直连 MongoDB 192.168.2.D:27017
  • 机器与网络状况示意图
    image.png
  • 在开发机 Q 上执行以下命令创建隧道

    # 参数 N: 只做端口转发,不执行远程命令
    # 参数 L: Local 本地转发
    ssh -NL 6666:192.168.2.D:27017 qbit@192.168.2.J
  • 在开发机 Q 上执行以下命令连接 MongoDB

    mongosh mongodb://localhost:6666

远程端口转发

  • 机器与网络状况

    qbit 的开发机为 Q(192.168.1.Q),
    想要将本机 6666 端口的服务暴露给主机 D(192.168.2.D) 访问
    D 不能直连 192.168.1.Q:6666
    D 可以与主机 J(192.168.2.J)建立 TCP 连接
    J 可以与 D 建立 TCP 连接
    J 不可以主动向 Q 发起连接
    Q 可以通过 ssh 访问 主机 J
  • 机器与网络状况示意图
    image.png
  • 在主机 J 上开放 /etc/ssh/sshd_config 配置里面的 GatewayPorts,否则只能监听 localhost
  • 在开发机 Q 上执行以下命令创建隧道

    # -q Quiet mode.
    # -f 输入密码之后,后台运行
    # -N 只做端口转发,不执行远程命令
    # -R Remote 远程转发
    ssh -NR 7777:192.168.1.Q:6666 qbit@192.168.2.J
  • 在主机 D 上执行以下命令访问 Q 机器 6666 端口的服务

    curl http://192.168.2.J:7777
  • ssh 自动断开连接的问题,可以修改服务端 /etc/ssh/sshd_config 以下配置项

    ClientAliveInterval 60
    ClientAliveCountMax 3
  • 如果报访问报类似以下错误,说明 ssh 服务器也不能访问对应端口

    channel 1: open failed: connect failed: Connection refused

动态端口转发

  • 动态端口转发主要用作 socks 代理
  • 机器与网络状况

    qbit 的开发机为 Q(192.168.1.Q),
    想要访问互联网主机 ip.sb 的 80 端口
    J 可以与 ip.sb 建立 TCP 连接
    Q 不能直连 ip.sb:80
    Q 可以通过 ssh 访问 主机 J
  • 机器与网络状况示意图
    image.png
  • 在开发机 Q 上执行以下命令创建隧道

    # 参数 N: 只做端口转发,不执行远程命令
    # 参数 D: dynamic 动态转发
    ssh -ND localhost:6666 qbit@192.168.2.J
  • 在主机 D 上执行以下命令访问 Q 机器 6666 端口的服务

    curl -x socks5h://localhost:6666 http://ip.sb
本文出自 qbit snap

qbit
268 声望279 粉丝

引用和评论

0 条评论