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


# 什么是内网穿透？

内网穿透（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 远程端口转发

在能访问校内教务系统的机器（如实验室电脑）上执行：

```bash
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）：

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

## 优化方案：反向代理

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

nginx

Nginx 配置示例（公网服务器）

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

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

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

---

# 注意事项

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

---

# 总结

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

