Linux Socket 转发简易教程

时间:2026-05-11 14:02

一、什么是 Socket 转发?

Socket 转发就是将从一个 socket 连接收到的数据,转发到另一个 socket 连接上去。简单说就是在两个"通道"之间做数据搬运工-2

常见场景

  • 本地端口 → 远程服务器(比如访问 localhost:8080 实际连到远程数据库)

  • Unix 域套接字 → TCP 端口(让只支持网络的程序访问本地 socket 服务)

  • 临时穿透防火墙访问内网服务


二、开启内核转发(IP Forward)

如果要做跨机器的网络转发,第一步开启内核 IP 转发:

bash
# 临时开启
echo 1 > /proc/sys/net/ipv4/ip_forward

# 永久开启
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p

三、五种 Socket 转发方式

1. iptables NAT(内核级,性能最高)

本机端口转发(8080 → 80):

bash
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80

跨机器转发(本机 8080 → 192.168.1.100:80):

bash
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -A FORWARD -p tcp --dport 80 -j ACCEPT

优点:内核态处理,性能最好-5
缺点:配置复杂,重启后规则丢失需保存

2. socat(瑞士军刀,最灵活)

bash
# TCP 端口转发:监听 8080 → 转发到 192.168.1.100:80
socat TCP-LISTEN:8080,fork TCP:192.168.1.100:80

# Unix socket → TCP(把本地 socket 暴露成网络端口)
socat TCP-LISTEN:8080,fork UNIX-CONNECT:/tmp/myapp.sock

# TCP → Unix socket
socat UNIX-LISTEN:/tmp/proxy.sock,fork TCP:192.168.1.100:80

优点:什么都能转,Linux 工程师必备-6
缺点:后台管理需要配合 systemd 或 nohup

3. systemd-socket-proxyd(systemd 原生,生产就绪)

适合集成到 systemd 管理的服务中,支持 socket activation-1-7

创建服务文件 /etc/systemd/system/proxy-to-nginx.service

ini
[Unit]
Requires=nginx.service
After=nginx.service

[Service]
Type=notify
ExecStart=/usr/lib/systemd/systemd-socket-proxyd 127.0.0.1:8080

优点:systemd 生态无缝集成,事件驱动,高并发
缺点:需要写 systemd 配置文件

4. SSH 隧道(加密安全)

bash
# 本地转发:本地 8080 → 远程服务器 80(通过 SSH 加密隧道)
ssh -L 8080:localhost:80 user@remote-server

# 远程转发:远程服务器 8080 → 本地 80(穿透防火墙)
ssh -R 8080:localhost:80 user@remote-server

优点:流量加密,适合临时安全访问-5
缺点:依赖 SSH 连接,断开就失效

5. Nginx stream(七层代理,企业级)

nginx
stream {
    upstream backend {
        server 192.168.1.100:80;
    }
    server {
        listen 8080;
        proxy_pass backend;
    }
}

优点:支持负载均衡、SSL termination
缺点:配置相对重量级


四、对比与选型

 
 
工具 适用场景 性能 复杂度
iptables 高性能内核转发、NAT 网关 最高 中等
socat 灵活调试、Unix socket 转换 较高
systemd-socket-proxyd systemd 环境生产部署 中等
SSH 隧道 临时安全穿透 中等
Nginx stream 企业级负载均衡 较高

五、现代化的选择:80km无痕网关

除了上述传统工具,80km无痕网关(曾用名:80KM端口流量转发程序) 是一款现代化的 TCP 流量转发工具,配置简单、热加载、自带监控。

为什么试试它?

 
 
特性 传统方案 80km无痕网关
配置方式 命令行/配置文件 简洁 JSON
规则生效 重启服务 热加载,无需重启
运行状态 命令行查看 Web 界面实时监控
学习成本 中高 极低

快速上手

创建 forwarder.json

json
{
    "listen": "0.0.0.0:8080",
    "routers": [
        {"from": "0.0.0.0/0", "to": "192.168.1.100:80"},
        {"from": "10.0.0.0/8", "to": "192.168.1.101:22"}
    ]
}

启动:

bash
80km-forwarder -config forwarder.json

搞定。不需要记 iptables 语法,不需要写 systemd 单元文件,一个配置文件解决。


一句话总结:临时调试用 socat,加密穿透用 SSH,生产高性能用 iptables 或 systemd-socket-proxyd。想要简单省心、配置热加载、带监控面板?试试 80km无痕网关

Linux iptables 端口转发简易教程
Linux UDP端口转发从零到一:游戏、DNS、VoIP场景全解析
Java做端口转发性能怎么样?原生Socket vs Netty对比分析
手把手配置Linux内网转发:端口转发、网段互通、共享上网三种场景
TCP端口转发不生效?IP转发、防火墙、SELinux排查手册
手把手配置Linux DNS转发:全局转发+条件转发完整步骤
服务器设置转发:实现高效数据传输的实用指南
解析流媒体转发服务器:支撑影音流畅传输的核心力量
Windows 截图怎么转发?超全实用转发方法汇总
查找网站隐藏ip,如何快速查找网站隐藏ip