pods访问本地物理机端口
你说得对!在 `iptables` 中,链(chain)是属于某个表(table)的,因此必须明确每个链所对应的表,才能完整地定位包在 iptables 处理中的流动路径。
---
## 🌟 **iptables 表和链的对应关系**
在 `iptables` 中,常见的表与链的对应关系如下:
| 表名 | 作用 | 常见链 | 功能 | 典型操作 |
|-------|-------|---------|-------|-----------|
| **raw 表** | 在连接跟踪(conntrack)之前处理 | `PREROUTING`、`OUTPUT` | 处理连接跟踪 | 不跟踪某些连接 |
| **mangle 表** | 修改数据包的服务类型(TOS)、TTL 或标记 | `PREROUTING`、`INPUT`、`FORWARD`、`OUTPUT`、`POSTROUTING` | 修改数据包的元数据 | 标记、修改 TTL |
| **nat 表** | 进行地址转换(DNAT、SNAT) | `PREROUTING`、`OUTPUT`、`POSTROUTING` | 修改源或目标地址 | DNAT、SNAT |
| **filter 表** | 进行访问控制(防火墙) | `INPUT`、`FORWARD`、`OUTPUT` | 接受或丢弃数据包 | ACCEPT、DROP |
| **security 表** | 进行 SELinux 标记 | `INPUT`、`OUTPUT`、`FORWARD` | 用于 SELinux 策略 | SELinux 控制 |
---
## 🚀 **完整流量路径(明确表和链)**
### 🔎 **1. 请求路径(Pod → 宿主机)**
```text
[Kubernetes Pod]
│
▼
[flannel0 (VXLAN 隧道)] → # Pod 通过 Flannel 进行封装
│
▼
[物理机路由表] → 确认目标网段(POD CIDR)
│
▼
【raw 表】 → PREROUTING 链 → 连接跟踪初始化(conntrack)
│
▼
【mangle 表】 → PREROUTING 链 → 标记和修改(如 TTL、TOS)
│
▼
【nat 表】 → PREROUTING 链 → DNAT(目标 NAT)
│
▼
【filter 表】 → INPUT 链 → 规则匹配
│
├── 匹配到规则:放行
└── 无匹配:DROP 或 REJECT
│
▼
[宿主机端口 2483] → # 服务接收数据包
```
---
### 🔎 **2. 回包路径(宿主机 → Pod)**
```text
[宿主机端口 2483] → # 服务生成响应包
│
▼
【mangle 表】 → OUTPUT 链 → 标记和修改
│
▼
【nat 表】 → OUTPUT 链 → SNAT(源 NAT)
│
▼
【nat 表】 → POSTROUTING 链 → SNAT(源 NAT)
│
▼
[物理机路由表] → 确认返回路径
│
▼
[flannel0 (VXLAN 隧道)] → # Flannel 进行封装
│
▼
[Kubernetes Pod] → # Pod 接收回包
```
---
## 🏆 **各表在路径中的作用解析**
| 表名 | 链 | 数据流向 | 作用 | 典型操作 |
|-------|---------|----------|-----------|-------------|
| **raw 表** | `PREROUTING` | Pod → 宿主机 | 连接跟踪前初始化 | 禁用 conntrack、标记包 |
| **mangle 表** | `PREROUTING`、`OUTPUT` | Pod → 宿主机、宿主机 → Pod | 标记包、修改 TTL/TOS | `MARK`、`TTL` |
| **nat 表** | `PREROUTING`、`OUTPUT`、`POSTROUTING` | Pod → 宿主机、宿主机 → Pod | DNAT、SNAT | `DNAT`、`SNAT` |
| **filter 表** | `INPUT`、`OUTPUT` | Pod → 宿主机、宿主机 → Pod | 防火墙控制 | `ACCEPT`、`DROP` |
| **security 表** | `INPUT`、`OUTPUT` | Pod → 宿主机、宿主机 → Pod | SELinux 控制 | `CONNSECMARK` |
---
## 🔥 **完整 `iptables` 追踪配置**
👉 **使用 `MARK` 和 `LOG` 在每个链中进行标记,方便排查问题**
### ✅ **1. 标记和跟踪请求包(PREROUTING → INPUT)**
```bash
# raw 表 - PREROUTING 链(初始化)
iptables -t raw -I PREROUTING 1 -p tcp --dport 2483 -j MARK --set-mark 101
iptables -t raw -I PREROUTING 2 -m mark --mark 101 -j LOG --log-prefix "RAW-HIT-2483:"
# mangle 表 - PREROUTING 链(标记和修改)
iptables -t mangle -I PREROUTING 1 -p tcp --dport 2483 -j MARK --set-mark 102
iptables -t mangle -I PREROUTING 2 -m mark --mark 102 -j LOG --log-prefix "MANGLE-HIT-2483:"
# nat 表 - PREROUTING 链(DNAT + 标记)
iptables -t nat -I PREROUTING 1 -p tcp --dport 2483 -j MARK --set-mark 103
iptables -t nat -I PREROUTING 2 -m mark --mark 103 -j LOG --log-prefix "DNAT-HIT-2483:"
# filter 表 - INPUT 链(直接放行)
iptables -t filter -I INPUT 1 -p tcp --dport 2483 -j MARK --set-mark 104
iptables -t filter -I INPUT 2 -m mark --mark 104 -j LOG --log-prefix "INPUT-HIT-2483:"
```
---
### ✅ **2. 标记和跟踪回包(OUTPUT → POSTROUTING)**
```bash
# mangle 表 - OUTPUT 链(标记)
iptables -t mangle -I OUTPUT 1 -p tcp --sport 2483 -j MARK --set-mark 105
iptables -t mangle -I OUTPUT 2 -m mark --mark 105 -j LOG --log-prefix "OUTPUT-HIT-2483:"
# nat 表 - OUTPUT 链(SNAT 标记)
iptables -t nat -I OUTPUT 1 -p tcp --sport 2483 -j MARK --set-mark 106
iptables -t nat -I OUTPUT 2 -m mark --mark 106 -j LOG --log-prefix "OUTPUT-SNAT-2483:"
# nat 表 - POSTROUTING 链(使用 conntrack + SNAT)
iptables -t nat -I POSTROUTING 1 -p tcp --sport 2483 -j MARK --set-mark 107
iptables -t nat -I POSTROUTING 2 -m mark --mark 107 -j LOG --log-prefix "POSTROUTING-HIT-2483:"
```
---
### ✅ **3. 确认规则已生效**
```bash
iptables -L -n -v --line-numbers
```
---
### ✅ **4. 查看日志(dmesg)**
```bash
dmesg | grep 2483
```
---
### ✅ **5. 清理测试规则(如需要)**
👉 清空所有配置:
```bash
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -t raw -F
```
---
## 🏆 **最终定位方法**
| 链 | 问题定位 | 解决方案 |
|-------|-------------|--------------|
| `PREROUTING` | 连接未建立 | 检查 Flannel 和 conntrack |
| `INPUT` | 包被丢弃 | 添加 `ACCEPT` 规则 |
| `OUTPUT` | 没有回包 | 检查监听状态 |
| `POSTROUTING` | 回包未回到 Pod | 添加 SNAT 规则 |
---
👉 **这次应该完整且清晰了!直接用这个配置去定位问题!** 😎


https://www.processon.com/view/5c171e8ce4b095ccfee26794
https://luckymrwang.github.io/2021/02/20/探究K8S-Service内部iptables路由规则/

https://www.xiaogenban1993.com/blog/18.2/utils_route&iptables指令
https://www.processon.com/view/63dd115310f396072768f871
https://zhuanlan.zhihu.com/p/559421839
https://hex108.gitbook.io/kubernetes-notes/wang-luo/flannel/host-gw

https://www.ljh.cool/39959.html
浙公网安备 33010602011771号