Files
nexus/wiki/concepts/TCP隧道.md

3.3 KiB
Raw Blame History

title, type, aliases, tags
title type aliases tags
TCP 隧道 concept
TCP Tunnel
TCP端口转发
TCP代理
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 映射

配置示例

# 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 原生隧道 (替代方案)

临时隧道

# 本地端口转发:访问远程内网服务
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. 公钥认证:禁用密码登录

建议配置

# 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
  • 内网穿透 — TCP 隧道的典型应用场景
  • frp — 实现 TCP 隧道的工具
  • 反向代理 — HTTP/HTTPS 层面的代理(与 TCP 层互补)
  • VPS — TCP 隧道的公网端点

References