目录

内网穿透介绍及教务系统上的应用

什么是内网穿透?

内网穿透(NAT Traversal)是一种通过公网服务器访问内网服务的技术。由于校园网、企业局域网等内部网络通常采用 NAT(网络地址转换)隔离外部互联网,导致外部用户无法直接访问内网资源。内网穿透通过建立加密隧道,将内网服务的端口映射到公网服务器的指定端口,从而实现外部访问。

SSH 与内网穿透

SSH(Secure Shell)不仅是安全的远程登录协议,还支持端口转发功能(SSH Tunnel),使其成为实现轻量级内网穿透的理想工具。通过 SSH 的本地端口转发(Local Port Forwarding)和远程端口转发(Remote Port Forwarding),可以安全地将内网服务暴露到公网。


实践:将校内教务系统映射至阿里云服务器

场景描述

  • 目标内网服务:教务系统(194.168.4.17:80,假设为 HTTP 服务)
  • 公网服务器:阿里云(182.92.83.1:30226
  • 使用工具:SSH(需一台可访问校内服务的机器和公网服务器)

步骤 1:建立 SSH 远程端口转发

在能访问校内教务系统的机器(如实验室电脑)上执行:

ssh -R 30226:194.168.4.17:80 root@182.92.83.1-N
  • -R 30226:194.168.4.17:80:将公网服务器的 30226 端口转发到内网服务的 80 端口
  • root@182.92.83.1:公网服务器的登录账号和地址
  • -N:不执行远程命令,仅建立隧道

步骤 2:通过公网访问服务

此时通过浏览器访问 http://182.92.83.1:30226 即可间接访问校内教务系统。


解决资源加载失败问题:额外端口转发

若教务系统页面加载时出现 CSS/JS 等静态资源失败(可能因为资源使用绝对路径指向其他内网端口),需进一步转发相关端口。

示例:资源端口为 8080

假设发现资源请求指向 194.168.4.17:8080,需额外映射该端口到公网(如 30227):

ssh -R 30226:194.168.4.17:80 -R 30227:194.168.4.17:8080 root@182.92.83.1-N

优化方案:反向代理

若资源端口不固定,可在公网服务器配置 Nginx 反向代理,统一将请求转发到内网:

nginx

Nginx 配置示例(公网服务器)

    server {
        listen 30226;
        location / {
        proxy_pass http://194.168.4.17:80;
        proxy_set_header Host $host;
        }
    }

随后通过 SSH 建立基础隧道即可:

ssh -L 本地端口:194.168.4.17:80 root@182.92.83.1-N

注意事项

  1. 网络安全:暴露内网服务到公网需获得授权,并配置防火墙限制访问 IP。
  2. 稳定性:SSH 隧道可能因网络波动中断,建议使用 autossh 等工具自动重连。
  3. 性能:公网服务器带宽和延迟会影响访问速度。

总结

通过 SSH 端口转发,可快速实现内网穿透,但需注意资源路径和端口问题。对于复杂场景,结合反向代理能更灵活地解决多端口或协议转换需求。