需求说明
将本机 (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.193DNAT 规则
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
















