Plantre Plantre
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

plantre

一个后端开发者
首页
后端
技术
硬件
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 技术

    • 技术文档
    • GitHub技巧
    • Nodejs
    • 博客搭建
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • 《Vue》
    • 《React》
    • 《TypeScript 从零实现 axios》
    • 《Git》
    • TypeScript
    • JS设计模式总结
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 虚拟化

  • Git

  • 可视化

  • Linux

  • 远程串流等

  • SWF

  • 网络

    • ​​内网穿透(NAT穿透)

    • 代理(Proxy)

    • VPN(Virtual Private Network)

    • 代理和vpn的区别
    • 内网穿透和代理什么区别
    • iperf3网络性能测试
    • iptables

      • 可以在A主机上修改路由表实现吗
      • 以具体的ip数据包说明
      • nginx可以实现吗
      • 透明 TCP 代理-重定向
        • 🎯 目标说明
        • ✅ 实现方式:使用 iptables + 内核转发 + NAT
        • 🛠️ 操作步骤(在主机 A 上执行)
          • 1️⃣ 开启内核 IP 转发
          • 2️⃣ 添加 DNAT 转发规则(将请求 115.236.18.198 转到 C)
          • 3️⃣ 设置 SNAT(可选,一般不需要)
        • ✅ 整体流程说明:
        • 🧪 测试建议
        • 🔁 如果想让其他主机的请求也被转发怎么办?
        • ✅ 总结方案(你的场景)
  • 网站收藏
  • 技术
  • 网络
  • iptables
plantre
2025-05-24
目录

透明 TCP 代理-重定向

你现在的目标是:


# 🎯 目标说明

在主机 A(192.168.2.53) 上,有一个应用发起 TCP 请求到:

目标地址:115.236.18.198:11111(公网 IP,其实已经不可用)
1

你想让:

  • 这个请求实际上被透明地重定向到内网主机 C(192.168.2.10)
  • C 能够完整接收到请求,正常建立 TCP 连接,并响应

# ✅ 实现方式:使用 iptables + 内核转发 + NAT

这是一个典型的 透明 TCP 代理/重定向 场景,使用 iptables 做 DNAT(目的地址转换),将请求从公网 IP 转发到内网 IP。


# 🛠️ 操作步骤(在主机 A 上执行)

# 1️⃣ 开启内核 IP 转发

sudo sysctl -w net.ipv4.ip_forward=1
1

临时生效。想永久生效,编辑 /etc/sysctl.conf 加入:

net.ipv4.ip_forward = 1
1

# 2️⃣ 添加 DNAT 转发规则(将请求 115.236.18.198 转到 C)

sudo iptables -t nat -A OUTPUT -p tcp -d 115.236.18.198 --dport 11111 -j DNAT --to-destination 192.168.2.10:11111
1

说明:

  • OUTPUT 链适用于本机发出的连接(你的应用就在 A 上)
  • 所有目标为公网 IP 115.236.18.198 的请求将被改写为 192.168.2.10

# 3️⃣ 设置 SNAT(可选,一般不需要)

如果你发现 C 无法正常响应请求,可添加这条 SNAT(伪装源 IP 为 A):

sudo iptables -t nat -A POSTROUTING -p tcp -d 192.168.2.10 --dport 11111 -j MASQUERADE
1

# ✅ 整体流程说明:

步骤 数据包 说明
应用发起连接 源:192.168.2.53
目标:115.236.18.198:11111
应用仍然以为在访问公网
iptables(OUTPUT 链)重写 修改目标地址 → 192.168.2.10 实际连接转向 C
建立连接 A ↔ C 完成三次握手
C 回复响应 源地址为 C,目标仍是 A
应用收到响应 应用以为来自公网 IP,但其实是 C

# 🧪 测试建议

  1. 在 C 上运行监听服务:
nc -l 11111
1
  1. 在 A 上用你原本的程序发起请求,或使用:
telnet 115.236.18.198 11111
# 或
curl http://115.236.18.198:11111
1
2
3
  1. C 上应该能看到连接建立。

# 🔁 如果想让其他主机的请求也被转发怎么办?

你需要改用:

iptables -t nat -A PREROUTING -p tcp -d 115.236.18.198 --dport 11111 -j DNAT --to-destination 192.168.2.10:11111
1

但这要求:

  • A 是这些主机的网关
  • 或者你将这些主机的流量强制经过 A(静态路由或网桥)

# ✅ 总结方案(你的场景)

在主机 A 上执行以下命令即可:

# 1. 启用 IP 转发
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

# 2. NAT 规则 - 本地应用发出的请求
sudo iptables -t nat -A OUTPUT -p tcp -d 115.236.18.198 --dport 11111 -j DNAT --to-destination 192.168.2.10:11111
1
2
3
4
5

这会让本机所有访问 115.236.18.198:11111 的 TCP 请求都发给 192.168.2.10:11111,完全透明。


编辑 (opens new window)
上次更新: 2025/06/10, 09:18:05
nginx可以实现吗
网站收藏

← nginx可以实现吗 网站收藏→

最近更新
01
集成loki
07-04
02
TCP的ESTABLISHED是什么意思
06-24
03
安装1panel
06-24
更多文章>
Theme by Vdoing | Copyright © 2025-2025 plantre | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式