firewalld 端口流量转发

场景一

需求说明

将本机 (IP: 192.168.174.193) 发往 192.168.174.165:443 的流量转发到 另一节点 192.168.174.149:20037(nginx 4层代理到192.168.174.165:443)

启用 IP 转发

# 节点IP: 192.168.174.193
sysctl -w net.ipv4.ip_forward=1

代理节点配置

# 节点IP:192.168.174.149
server {
    listen 20037;

    proxy_pass 192.168.174.165:443;

}

配置防火墙规则

# 节点IP: 192.168.174.193

DNAT 规则

sudo firewall-cmd --permanent --direct --add-rule ipv4 nat OUTPUT 0 -p tcp -s 192.168.174.193 -d 192.168.174.165 --dport 443 -j DNAT --to-destination 192.168.174.149:20037
详细说明:
-t nat:指定操作 nat表,用于网络地址转换

-A OUTPUT:将规则添加到 OUTPUT链,处理本机发出的数据包

-p tcp:匹配 TCP 协议的数据包

-s 192.168.174.193:匹配源 IP 地址为本机 IP 10.246.204.193

-d 192.168.174.165:匹配目标 IP 地址为 192.168.174.165

--dport 443:匹配目标端口为 443 (HTTPS)

-j DNAT:执行目标网络地址转换

--to-destination 192.168.174.149:20037:将目标地址重写为 192.168.174.149:20037
工作原理:
当本机应用程序尝试连接到 192.168.174.165:443时,这条规则会:

识别匹配的流量(源 IP 为本机,目标为指定 IP 和端口)

修改数据包的目标地址为 192.168.174.149:20037

数据包继续进入路由决策过程

FORWARD 规则

sudo firewall-cmd --permanent --add-rich-rule='rule family=ipv4 destination address=192.168.174.149 port port=20037 protocol=tcp accept'
详细说明:
-A FORWARD:添加到 FORWARD链,处理需要转发的数据包

-p tcp:匹配 TCP 协议

-d 192.168.174.149:匹配目标 IP 为 192.168.174.149

--dport 20037:匹配目标端口为 20037

-j ACCEPT:允许匹配的数据包通过
工作原理:
当数据包被 DNAT 修改后,它成为转发流量

这条规则明确允许转发到目标地址和端口的流量

如果防火墙默认策略是 DROP,这条规则是必需的

重新加载规则

sudo firewall-cmd --reload

验证配置

# 查看富规则
sudo firewall-cmd --list-rich-rules

# 查看直接规则
sudo firewall-cmd --direct --get-all-rules

# 查看所有规则
sudo firewall-cmd --list-all

完整数据流路径

+---------------------+          +---------------------+          +---------------------+
|    本机应用程序       |         | 192.168.174.193     |          |     目标服务器       |
| (192.168.174.193)    |          | (firewalld 防火墙)  |          | (192.168.174.149)    |
+----------+----------+          +----------+----------+          +----------+----------+
           |                                |                                |
           | 1. 请求:                      |                                |
           | SRC:192.168.174.193:54321      |                                |
           | DST:192.168.174.165:443       |                                |
           +------------------------------>|                                |
           |                                |                                |
           |                                | 2. OUTPUT链 DNAT:             |
           |                                | (firewalld 直接规则)          |
           |                                | DST改为192.168.174.149:20037   |
           |                                |--+                             |
           |                                |  |                             |
           |                                |  | 3. 路由决策: 需要转发       |
           |                                |  |                             |
           |                                |  | 4. FORWARD链: 允许         |
           |                                |  | (firewalld 富规则)          |
           |                                |  |                             |
           |                                |  | 5. POSTROUTING链 SNAT:     |
           |                                |  | (firewalld 直接规则)        |
           |                                |                                |
           |                                |                                | 6. 请求:
           |                                |                                | SRC:192.168.174.193:54321
           |                                |                                | DST:192.168.174.149:20037
           |                                +------------------------------->|
           |                                |                                |
           |                                |                                | 7. 响应:
           |                                |                                | SRC:192.168.174.149:20037
           |                                |                                | DST:192.168.174.193:54321
           |                                |<-------------------------------+
           |                                |                                |
           |                                | 8. 连接跟踪反向NAT:            |
           |                                | SRC还原为192.168.174.165:443    |
           |<------------------------------+                                |
           | 9. 响应:                       |                                |
           | SRC:192.168.174.165:443        |                                |
           | DST:192.168.174.193:54321       |                                |
           |                                |                                |
+----------+----------+          +----------+----------+          +----------+----------+

关键机制说明

连接跟踪 (conntrack)

# 内核自动维护连接状态

原始请求: 192.168.174.193:54321 -> 192.168.174.165:443
修改后请求: 192.168.174.193:54321 -> 192.168.174.149:20037
响应: 192.168.174.149:20037 -> 192.168.174.193:54321
还原后响应: 192.168.174.165:443 -> 192.168.174.193:54321

监控连接

# 查看连接跟踪
conntrack -L

# 实时监控
conntrack -E

场景二

内网地址: 192.168.174.100
公网代理地址: 192.168.174.200

内网需要通过NAT访问 http://www.baidu.com  
# 需要在同一网段内。

代理节点配置

echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

firewall-cmd --permanent  --add-rich-rule='rule family="ipv4" source address="192.168.174.100" destination address="192.168.174.200" masquerade'

内网节点配置

ip route add 220.181.111.232/32 via 192.168.174.200

流程图

+-----------------------+           +-----------------------+           +-----------------------+
|    客户端机器         |           |    网关/转发机器      |           |    外部服务器         |
|  (192.168.174.100)     |           |  (192.168.174.200)     |           |  (220.181.111.232)     |
+-----------+-----------+           +-----------+-----------+           +-----------+-----------+
            |                                   |                                   |
            | 1. 客户端添加路由:                |                                   |
            |    ip route add 220.181.111.232/32  |                                   |
            |    via 192.168.174.200              |                                   |
            |                                   |                                   |
            | 2. 请求数据包:                    |                                   |
            |    SRC: 192.168.174.100:54321     |                                   |
            |    DST: 220.181.111.232:80         |                                   |
            +---------------------------------->|                                   |
            |                                   |                                   |
            |                                   | 3. 接收并转发数据包              |
            |                                   |    (IP转发已开启)               |
            |                                   |                                   |
            |                                   | 4. 应用firewalld MASQUERADE规则: |
            |                                   |    - 源地址192.168.174.100        |
            |                                   |    - 目标地址220.181.111.232       |
            |                                   |    -> 执行SNAT                  |
            |                                   |    SRC改为192.168.174.200         |
            |                                   |                                   |
            |                                   | 5. 转发后数据包:                |
            |                                   |    SRC: 192.168.174.200:54321     |
            |                                   |    DST: 220.181.111.232:80       |
            |                                   +--------------------------------->|
            |                                   |                                   |
            |                                   |                                   | 6. 服务器处理请求
            |                                   |                                   |
            |                                   |                                   | 7. 响应数据包:
            |                                   |                                   |    SRC: 220.181.111.232:80
            |                                   |                                   |    DST: 192.168.174.200:54321
            |                                   |<---------------------------------+
            |                                   |                                   |
            |                                   | 8. 连接跟踪反向NAT:              |
            |                                   |    根据conntrack表还原地址       |
            |                                   |    DST还原为192.168.174.100:54321 |
            |<----------------------------------+                                   |
            | 9. 响应数据包:                    |                                   |
            |    SRC: 220.181.111.232:80         |                                   |
            |    DST: 192.168.174.100:54321     |                                   |
            |                                   |                                   |
+-----------+-----------+           +-----------+-----------+           +-----------+-----------+

 

posted @ 2025-09-23 18:27  小吉猫  阅读(57)  评论(0)    收藏  举报