ubuntu系统跳转或透明转发实现的几种方式
非常好的问题 👍
你现在的需求可以理解为:
所有访问 47.236.101.216:6011 的流量,都透明地转发(或跳转)到 47.241.11.4:6011。
在 Ubuntu 14.04(内核 3.x 时代)下,可以有几种成熟的实现方式,取决于你希望“转发”的层次(L3/L4)与透明度。
下面我给你推荐几种方案,按推荐优先级从高到低排列👇
✅ 方案一:使用 iptables DNAT(推荐)
如果两台服务器在公网都可访问,最简洁、最稳定的方式就是 iptables DNAT 转发。
1️⃣ 编辑转发规则:
# 启用IP转发
echo 1 > /proc/sys/net/ipv4/ip_forward
sed -i '/net.ipv4.ip_forward/d' /etc/sysctl.conf
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
# 清空旧规则(可选)
iptables -t nat -F
# 设置DNAT转发规则:将所有访问本机6011端口的流量转发到另一台服务器
iptables -t nat -A PREROUTING -p tcp --dport 6011 -j DNAT --to-destination 47.241.11.4:6011
# SNAT确保返回流量走回原服务器
iptables -t nat -A POSTROUTING -p tcp -d 47.241.11.4 --dport 6011 -j SNAT --to-source 47.236.101.216
2️⃣ 保存规则
Ubuntu 14.04 默认没 iptables-persistent,可以手动保存:
apt-get install iptables-persistent -y
service netfilter-persistent save
或使用:
iptables-save > /etc/iptables.rules
然后在 /etc/network/interfaces 的 post-up 中添加:
post-up iptables-restore < /etc/iptables.rules
✅ 方案二:用 socat 实现 TCP 端口中继
若不想修改系统防火墙(或仅临时转发),socat 是轻量好用的方案。
1️⃣ 安装
apt-get install socat -y
2️⃣ 启动转发
socat TCP-LISTEN:6011,fork TCP:47.241.11.4:6011
这会将所有到 6011 的连接直接中继到 47.241.11.4:6011。
3️⃣ 后台运行(长期服务)
可以写入 /etc/rc.local:
/usr/bin/socat TCP-LISTEN:6011,fork TCP:47.241.11.4:6011 &
或者用 screen / nohup:
nohup socat TCP-LISTEN:6011,fork TCP:47.241.11.4:6011 >/var/log/socat_6011.log 2>&1 &
✅ 方案三:使用 Nginx TCP 反向代理(更可控)
如果你已有 Nginx,可以用它转发 TCP 流量。
1️⃣ 安装 stream 模块版本:
apt-get install nginx-extras -y
2️⃣ 编辑 /etc/nginx/nginx.conf 增加:
stream {
server {
listen 6011;
proxy_pass 47.241.11.4:6011;
}
}
3️⃣ 重新加载配置:
nginx -t && service nginx restart
⚙️ 对比建议
| 方案 | 性能 | 持久性 | 调试便利性 | 推荐场景 |
|---|---|---|---|---|
| iptables DNAT | ⭐⭐⭐⭐ | 永久有效 | 略复杂 | 系统级透明转发(生产推荐) |
| socat | ⭐⭐ | 临时转发方便 | 简单易改 | 测试或过渡用 |
| nginx stream | ⭐⭐⭐ | 稳定可控 | 日志支持好 | 若已有 Nginx 环境 |
🔍 验证
在另一主机上测试:
telnet 47.236.101.216 6011
或:
curl http://47.236.101.216:6011
然后查看 47.241.11.4 是否收到请求。
我建议你优先用 iptables DNAT,因为它在内核层转发,性能最好、透明度最高、适合生产服务器。
如果你告诉我:
-
两台服务器是否在同一内网或仅公网互通,
-
是否需要保持源 IP(即被转发请求的真实来源 IP),
我可以进一步给出优化方案(比如保留原始客户端 IP 的 DNAT + SNAT 精细配置)。
是否希望我帮你写一版完整可执行、带日志与开机自启的 iptables 方案脚本?
No Comments