iptables使用小计,转发对外的请求
个人学习笔记,谢绝转载!!!
原文:https://www.cnblogs.com/wshenjin/p/12434171.html
场景1
A机器(1.1.1.1)的业务日志需要不断推送到B机器(2.2.2.2)。目前因特殊原因需要下架B机器,将业务迁移到C机器(3.3.3.3),但A机器代码里写死了IP没法改。
可以在A机器上使用iptables的DNAT实现转发:在OUTPUT链上做DNAT,例如:
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A OUTPUT -o eth0 -p tcp -m tcp -d 2.2.2.2 --dport 80 -j DNAT --to-destination 3.3.3.3:80
COMMIT
开启nat转发:
net.ipv4.ip_forward = 1
场景2
另外一个需求:A机器(外1.1.1.1,内10.10.10.10)需要连接B机器(外2.2.2.2, 内20.20.20.20)的MySQL3306。现在AB机器两个机房通过专线打通,需要把连接切到内网。
在不变更业务的情况下,可以在A机器上使用iptables的DNAT+SNAT实现转发:
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A OUTPUT -d 2.2.2.2 -p tcp -m tcp --dport 3306 -j DNAT --to-destination 20.20.20.20:3306
-A POSTROUTING -d 20.20.20.20 -p tcp --dport 3306 -j SNAT --to 10.10.10.10
COMMIT
开启nat转发:
net.ipv4.ip_forward = 1
两个场景的区别
场景1,因为三台机都用公网IP互联,只修改出向数据包的目的地址,数据包的源地址对于C机器来说是可路由的,因此C机器可以正常响应到A机器。
场景2,DNAT修改了出向数据包的目的地址,A机器通过路由表走内网请求到B机器。如果不进行SNAT,那么B机器就会用数据包原地址(A机器的外网IP)作响应,这时候B机器是用内网网卡对A机器做响应的,内网是无法路由到外网,这样就无法响应了(B无法响应)。因此A机器需要SNAT把出向数据包的源地址修改为A机器的内网IP,这样通过DNAT&SNAT后,A-->B的数据包就走了内网了。
(个人理解。。。)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能