使用iptables双重DNAT

使用iptables双重DNAT

一、需求

由于企业内部网络安全问题,往往只开启一个端口供企业外部业务与也企业内部服务器访问。因此需要在企业网关的前端接一个前置机(192.168.0,91),用于供端口映射处理。

整体架构如下,其中:

前置机:192.168.0.91

企业网关:192.168.0.2,开发端口9000

企业内部服务器:192.168.0.92

客户端 → 192.168.0.91:2001192.168.0.2:9000192.168.0.92:2001
客户端 → 192.168.0.91:2002192.168.0.2:9000192.168.0.92:2002

二、实现步骤

步骤1,前置机(192.168.0.91)设置第一层转发

# 清除可能产生干扰的现有规则 (谨慎操作)
# iptables -t nat -F
# iptables -t mangle -F

# 在mangle表的PREROUTING链给数据包打上标记
iptables -t mangle -A PREROUTING -p tcp --dport 2001 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp --dport 2002 -j MARK --set-mark 2

# 将包标记保存到连接标记中
iptables -t mangle -A PREROUTING -p tcp -m mark --mark 1 -j CONNMARK --save-mark
iptables -t mangle -A PREROUTING -p tcp -m mark --mark 2 -j CONNMARK --save-mark

# 您原有的DNAT和MASQUERADE规则保持不变
iptables -t nat -A PREROUTING -p tcp --dport 2001 -j DNAT --to-destination 192.168.0.2:9000
iptables -t nat -A PREROUTING -p tcp --dport 2002 -j DNAT --to-destination 192.168.0.2:9000
iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.2 --dport 9000 -j MASQUERADE

步骤2,在企业网关(192.168.0.2)上设置第二层转发 

# 在mangle表的PREROUTING链恢复连接标记到数据包
iptables -t mangle -A PREROUTING -p tcp --dport 9000 -j CONNMARK --restore-mark

# 基于数据包标记进行DNAT,不再使用--sport
iptables -t nat -A PREROUTING -p tcp --dport 9000 -m mark --mark 1 -j DNAT --to-destination 192.168.0.92:2001
iptables -t nat -A PREROUTING -p tcp --dport 9000 -m mark --mark 2 -j DNAT --to-destination 192.168.0.92:2002

# 您原有的SNAT规则保持不变
iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.92 -j MASQUERADE 

 

posted @ 2025-11-02 16:44  钟齐峰  阅读(9)  评论(0)    收藏  举报