背景

由于有些时候我们无法直接连接到应用机器的某些端口,所以需要使用流量包/连接转发才能实现。

 

解决方案

由于linux有iptables这个工具,而且iptables可以编写nat转发规则,所以我们选择iptables的nat表来实现转发效果。

 

实现原理

由于连接内部端口(如Mysql或postgres)需要一次完整的tcp连接,所以我们需要在nat表中加入两条相反的规则。一条负责外部向内的通路,一条负责内部向外的通路。当一个完整的tcp连接被模拟出来的时候,就可以实现端口的转发了。

 

具体操作

按照以下模板修改具体信息,并执行。

MYSQLIP='x.x.x.x'           #修改此ip为Mysql主机的内网ip
NGINX='x.x.x.x'             #修改此ip为nginx主机的内网ip
iptables -t nat -A PREROUTING -p tcp --dport 5432 -j DNAT --to-destination $MYSQLIP             #从外向内的规则
iptables -t nat -A POSTROUTING -p tcp --dst $MYSQLIP --dport 5432 -j SNAT --to-source $NGINX    #从内向外的规则

iptables-save > /etc/iptables      #保存iptables规则到/etc/iptables文件
iptables-restore < /etc/iptables   #加载刚才保存的文件到系统内核,修改iptables规则

 

补充

iptables的nat表里,有3个不同的规则链,分别是:
POSTROUTING
FORWARD
PREROUTING

这三个规则的意思分别是:

POSTROUTING: 用于修改源地址,即将源地址的公网ip修改为内网ip。

FORWARD: 流量转发。

PREROUTING: 用于修改目的地址,即将目的地址的内网ip修改为公网ip。

 

流量包从外网进来,会依次经过POSTROUTING->FORWARD->PREROUTING三条链,然后才可以正确地进行转发。

posted on   eryoung2  阅读(457)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示