Auto-sync: 2026-04-22 19:20
This commit is contained in:
112
wiki/concepts/TCP隧道.md
Normal file
112
wiki/concepts/TCP隧道.md
Normal file
@@ -0,0 +1,112 @@
|
||||
---
|
||||
title: "TCP 隧道"
|
||||
type: concept
|
||||
aliases: [TCP Tunnel, TCP端口转发, TCP代理]
|
||||
tags: [network, tunneling, protocol]
|
||||
---
|
||||
|
||||
# TCP 隧道
|
||||
|
||||
## Definition
|
||||
**TCP 隧道**是通过在两个端点之间建立虚拟连接,将本地 TCP 端口的流量透明传输到远程端点的技术。TCP 隧道是构建 VPN、反向代理和内网穿透的基础机制之一。
|
||||
|
||||
## How It Works
|
||||
|
||||
```
|
||||
┌─────────────┐ ┌─────────────┐
|
||||
│ 本地机器 │ │ VPS │
|
||||
│ │ │ │
|
||||
│ 应用 → :22 │ ──── TCP 隧道 ──── → │ :60022 ← ──│──── 外部 SSH 客户端
|
||||
│ │ (frp/nc/socat) │ │
|
||||
└─────────────┘ └─────────────┘
|
||||
```
|
||||
|
||||
## TCP vs HTTP/HTTPS 隧道
|
||||
|
||||
| 特性 | TCP 隧道 | HTTP/HTTPS 隧道 |
|
||||
|------|----------|----------------|
|
||||
| **协议** | 任意 TCP | HTTP/HTTPS |
|
||||
| **应用层解析** | ❌ 不解析 | ✅ 可解析 |
|
||||
| **WebSocket** | ❌ 不支持 | ✅ 支持 |
|
||||
| **使用场景** | SSH、数据库、任意 TCP | Web 服务 |
|
||||
| **Caddy 支持** | ❌ 不支持 | ✅ 支持 |
|
||||
|
||||
## frp TCP 映射
|
||||
|
||||
### 配置示例
|
||||
```ini
|
||||
# frpc.ini
|
||||
[ssh]
|
||||
type = tcp
|
||||
local_ip = 127.0.0.1
|
||||
local_port = 22
|
||||
remote_port = 60022
|
||||
```
|
||||
|
||||
### 访问链路
|
||||
```
|
||||
外部 SSH 客户端
|
||||
↓
|
||||
ssh -p 60022 user@vps-ip
|
||||
↓
|
||||
VPS :60022 (frps 监听)
|
||||
↓
|
||||
frp 隧道
|
||||
↓
|
||||
内网机器 :22
|
||||
↓
|
||||
本地 SSH 服务
|
||||
```
|
||||
|
||||
## Common Tools for TCP Tunneling
|
||||
|
||||
| 工具 | 特点 | 使用场景 |
|
||||
|------|------|---------|
|
||||
| **frp** | 高性能、支持 Dashboard | 内网穿透 |
|
||||
| **socat** | 简单单次转发 | 临时调试 |
|
||||
| **netcat (nc)** | 基础端口转发 | 快速测试 |
|
||||
| **ssh -L** | SSH 内置隧道 | 临时访问 |
|
||||
| **stunnel** | SSL 隧道加密 | 安全转发 |
|
||||
|
||||
## SSH 原生隧道 (替代方案)
|
||||
|
||||
### 临时隧道
|
||||
```bash
|
||||
# 本地端口转发:访问远程内网服务
|
||||
ssh -L 8080:internal:80 user@vps
|
||||
|
||||
# 远程端口转发:暴露本地服务到公网
|
||||
ssh -R 60022:localhost:22 user@vps
|
||||
```
|
||||
|
||||
### 持久化问题
|
||||
SSH 隧道在网络中断后不会自动重连,生产环境推荐使用 frp。
|
||||
|
||||
## Security Considerations
|
||||
|
||||
### TCP 隧道注意事项
|
||||
1. **不经过 HTTP 代理**:TCP 流量不被 Caddy/Nginx 解析
|
||||
2. **直接暴露端口**:SSH 22 端口不宜直接暴露,使用非标准端口
|
||||
3. **IP 白名单**:防火墙限制来源 IP
|
||||
4. **公钥认证**:禁用密码登录
|
||||
|
||||
### 建议配置
|
||||
```bash
|
||||
# VPS 防火墙:只允许特定 IP
|
||||
sudo ufw allow from <home_ip> to any port 60022 proto tcp
|
||||
|
||||
# SSH 配置:禁用密码
|
||||
sudo nano /etc/ssh/sshd_config
|
||||
PasswordAuthentication no
|
||||
PubkeyAuthentication yes
|
||||
```
|
||||
|
||||
## Related Concepts
|
||||
- [[内网穿透]] — TCP 隧道的典型应用场景
|
||||
- [[frp]] — 实现 TCP 隧道的工具
|
||||
- [[反向代理]] — HTTP/HTTPS 层面的代理(与 TCP 层互补)
|
||||
- [[VPS]] — TCP 隧道的公网端点
|
||||
|
||||
## References
|
||||
- frp TCP: https://gofrp.org/docs/features/common-address-types/#tcp
|
||||
- SSH Tunneling: https://www.ssh.com/academy/ssh/tunneling
|
||||
Reference in New Issue
Block a user