使用 SSH 端口转发实现内网穿透

使用 SSH 端口转发实现内网穿透

尽意
2025-01-08 / 0 评论 / 7 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2025年01月08日,已超过15天没有更新,若内容或图片失效,请留言反馈。
SSH 端口转发是一种高效、安全的方式,可以将本地服务暴露到远程服务器,或者将远程服务映射到本地。

SSH 端口转发的类型

  1. 本地端口转发 (-L)
    将远程服务器上的服务映射到本地端口,用于访问远程服务。

    ssh -L [本地地址:本地端口]:[远程地址:远程端口] user@your-server

    示例:

    ssh -L 8080:localhost:80 user@your-server
    • 本地 8080 端口映射到远程服务器的 80 端口。
    • 本地访问 http://localhost:8080,即访问远程服务器的 http://localhost:80
  2. 远程端口转发 (-R)
    将本地服务映射到远程服务器的端口,用于将本地服务暴露到外网。

    ssh -R [远程地址:远程端口]:[本地地址:本地端口] user@your-server

    示例:

    ssh -R 0.0.0.0:8888:localhost:8080 user@your-server
    • 远程服务器的 8888 端口映射到本地的 8080 端口。
    • 外部访问 http://your-server:8888,即可访问本地的 http://localhost:8080
  3. 动态端口转发 (-D)
    将本地端口作为 SOCKS 代理,用于动态访问任意远程服务。

    ssh -D [本地地址:本地端口] user@your-server

    示例:

    ssh -D 127.0.0.1:1080 user@your-server
    • 本地 127.0.0.1:1080 作为 SOCKS 代理,可通过浏览器等工具配置访问外网。

配置 /etc/ssh/sshd_config 文件

为了使远程端口转发(-R)正常工作,可能需要修改远程服务器的 SSH 配置文件 /etc/ssh/sshd_config

关键配置项

  1. 允许 TCP 转发
    确保以下配置为 yes

    AllowTcpForwarding yes
  2. 启用网关端口
    使远程端口可以绑定到非本地地址:

    GatewayPorts yes
    • GatewayPorts no:默认值,只允许绑定到 127.0.0.1(本地回环地址)。
    • GatewayPorts yes:允许绑定到所有地址。
    • GatewayPorts clientspecified:根据客户端的 -R 命令指定绑定地址。
  3. 重启 SSH 服务
    修改配置后,重启 SSH 服务使其生效:

    sudo systemctl restart sshd

常用组合参数

1. 保持连接活跃 (-fN)

  • -f:在连接建立后,SSH 会后台运行。
  • -N:只建立端口转发,不执行远程命令。

    ssh -fN -L 8080:localhost:80 user@your-server

2. 指定绑定地址

  • -L 本地绑定地址127.0.0.1 仅本地访问,0.0.0.0 外部可访问。
  • -R 远程绑定地址:同样使用 127.0.0.10.0.0.0

    ssh -R 0.0.0.0:8888:localhost:8080 user@your-server

3. 动态端口转发 + 指定 SOCKS 代理

  • 使用 -D 开启动态端口转发,将本地端口作为 SOCKS 代理:

    ssh -D 127.0.0.1:1080 user@your-server

4. 禁用伪终端

  • -T:禁用伪终端分配,用于纯端口转发:

    ssh -T -R 8888:localhost:8080 user@your-server

5. 指定配置文件

  • -F:使用自定义 SSH 配置文件:

    ssh -F ~/.ssh/custom_config -L 8080:localhost:80 user@your-server

远程端口转发的安全性考虑

  1. 限制绑定地址
    如果不需要外网访问,建议远程端口绑定到 127.0.0.1,避免暴露服务:

    ssh -R 127.0.0.1:8888:localhost:8080 user@your-server
  2. 强制使用 SSH 密钥认证
    配置服务器强制使用密钥认证,避免账户被暴力破解:

    PasswordAuthentication no
  3. 监控转发端口的使用
    在远程服务器上监控端口转发的使用情况:

    netstat -tlnp

完整案例

1. 将本地服务暴露到远程服务器并开放外网访问

ssh -R 0.0.0.0:8888:localhost:8080 user@your-server
  • 在远程服务器的 8888 端口监听,外部可通过 http://your-server:8888 访问。

2. 映射远程服务到本地

ssh -L 8080:localhost:80 user@your-server
  • 将远程服务器的 80 端口映射到本地 8080,本地访问 http://localhost:8080

3. 配置 SOCKS 代理

ssh -D 127.0.0.1:1080 user@your-server
  • 本地 127.0.0.1:1080 作为 SOCKS 代理,可代理访问外网。
2

评论 (0)

取消