calico all in one 环境中的 localdns 相关的 iptables 规则
root@u22:~# iptables-save | grep 169.254
-A PREROUTING -d 169.254.25.10/32 -p udp -m udp --dport 53 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK
-A PREROUTING -d 169.254.25.10/32 -p tcp -m tcp --dport 53 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK
-A OUTPUT -s 169.254.25.10/32 -p tcp -m tcp --sport 8080 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK
-A OUTPUT -d 169.254.25.10/32 -p tcp -m tcp --dport 8080 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK
-A OUTPUT -d 169.254.25.10/32 -p udp -m udp --dport 53 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK
-A OUTPUT -d 169.254.25.10/32 -p tcp -m tcp --dport 53 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK
-A OUTPUT -s 169.254.25.10/32 -p udp -m udp --sport 53 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK
-A OUTPUT -s 169.254.25.10/32 -p tcp -m tcp --sport 53 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK
-A INPUT -d 169.254.25.10/32 -p udp -m udp --dport 53 -m comment --comment "NodeLocal DNS Cache: allow DNS traffic" -j ACCEPT
-A INPUT -d 169.254.25.10/32 -p tcp -m tcp --dport 53 -m comment --comment "NodeLocal DNS Cache: allow DNS traffic" -j ACCEPT
-A OUTPUT -s 169.254.25.10/32 -p udp -m udp --sport 53 -m comment --comment "NodeLocal DNS Cache: allow DNS traffic" -j ACCEPT
-A OUTPUT -s 169.254.25.10/32 -p tcp -m tcp --sport 53 -m comment --comment "NodeLocal DNS Cache: allow DNS traffic" -j ACCEPT
root@u22:~#
这些规则均围绕 “NodeLocal DNS Cache” (节点本地 DNS 缓存,IP 为 169.254.25.10)设计,核心目的是优化DNS 流量的处理效率并确保其正常通行。
一、iptables链的处理顺序基础
iptables的规则按“链”分组,不同链在数据包生命周期中按固定顺序触发。涉及的关键链及顺序如下:
- PREROUTING(nat 表):入站数据包到达后,最先经过的链**(在路由判断前),常用于修改地址或控制连接跟踪。**
- INPUT(filter 表):入站数据包经路由判断为“目标是本机”后进入的链,用于过滤是否允许数据包进入本机。
- OUTPUT(nat表):本机生成的出站数据包在路由判断前经过的链,常用于控制连接跟踪。
- OUTPUT(filter表):本机生成的出站数据包经路由判断后进入的链,用于过滤是否允许数据包出站。
规则在链内按从上到下的顺序匹配,一旦匹配到某条规则,就执行该规则的动作(如 NOTRACK/ACCEPT),后续规则不再处理。
二、具体规则解析(按处理流程排序)
1. 入站 DNS 流量的处理(外部→NodeLocal DNS Cache)
场景:其他进程/容器向 169.254.25.10(DNS缓存)发送 DNS 查询(端口53,UDP/TCP)。
-
步骤1:跳过连接跟踪(nat 表 PREROUTING 链)
-A PREROUTING -d 169.254.25.10/32 -p udp -m udp --dport 53 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK -A PREROUTING -d 169.254.25.10/32 -p tcp -m tcp --dport 53 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK- 作用:对“目标IP为169.254.25.10、目标端口53(DNS默认端口)”的UDP/TCP数据包,执行
NOTRACK(不进行连接跟踪)。 - 原因:DNS 查询频率极高,连接跟踪(conntrack)会记录每个连接的状态,可能消耗大量内核资源。跳过跟踪可减少开销,提高性能。
- 作用:对“目标IP为169.254.25.10、目标端口53(DNS默认端口)”的UDP/TCP数据包,执行
-
步骤2:允许入站(filter 表 INPUT 链)
-A INPUT -d 169.254.25.10/32 -p udp -m udp --dport 53 -m comment --comment "NodeLocal DNS Cache: allow DNS traffic" -j ACCEPT -A INPUT -d 169.254.25.10/32 -p tcp -m tcp --dport 53 -m comment --comment "NodeLocal DNS Cache: allow DNS traffic" -j ACCEPT- 作用:经过 PREROUTING 后,数据包被路由到本机,进入 INPUT 链。规则明确允许“目标IP为169.254.25.10、目标端口53”的UDP/TCP数据包进入本机(即被DNS缓存服务接收)。
- 原因:确保外部 DNS 查询不会被防火墙默认策略(如 DROP)阻挡。
2. 出站 DNS 响应的处理(NodeLocal DNS Cache→外部)
场景:169.254.25.10(DNS缓存)向外部回复 DNS 查询结果(源端口53,UDP/TCP)。
-
步骤1:跳过连接跟踪(nat表OUTPUT链)
-A OUTPUT -s 169.254.25.10/32 -p udp -m udp --sport 53 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK -A OUTPUT -s 169.254.25.10/32 -p tcp -m tcp --sport 53 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK- 作用:对“源 IP 为169.254.25.10、源端口53”的UDP/TCP数据包(即DNS响应),执行
NOTRACK,跳过连接跟踪。 - 原因:同入站逻辑,减少高频DNS响应的连接跟踪开销。
- 作用:对“源 IP 为169.254.25.10、源端口53”的UDP/TCP数据包(即DNS响应),执行
-
步骤2:允许出站(filter表OUTPUT链)
-A OUTPUT -s 169.254.25.10/32 -p udp -m udp --sport 53 -m comment --comment "NodeLocal DNS Cache: allow DNS traffic" -j ACCEPT -A OUTPUT -s 169.254.25.10/32 -p tcp -m tcp --sport 53 -m comment --comment "NodeLocal DNS Cache: allow DNS traffic" -j ACCEPT- 作用:DNS 响应数据包经路由判断后进入OUTPUT链,规则允许其出站(被外部接收)。
- 原因:确保 DNS 缓存的回复不会被防火墙阻挡。
3. 本地到 DNS 缓存的查询处理(本机→NodeLocal DNS Cache)
场景:本机进程向169.254.25.10发送DNS查询(目标端口53,UDP/TCP)。
- 步骤:跳过连接跟踪(nat表OUTPUT链)
-A OUTPUT -d 169.254.25.10/32 -p udp -m udp --dport 53 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK -A OUTPUT -d 169.254.25.10/32 -p tcp -m tcp --dport 53 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK- 作用:对“目标IP为169.254.25.10、目标端口53”的本机出站查询数据包,执行
NOTRACK。 - 原因:本地查询同样高频,跳过跟踪减少内核负担。
- 作用:对“目标IP为169.254.25.10、目标端口53”的本机出站查询数据包,执行
4. 8080端口流量的处理(管理/监控相关)
场景:169.254.25.10的8080端口(可能用于DNS缓存的管理/监控)的出入站流量。
- 规则
-A OUTPUT -s 169.254.25.10/32 -p tcp -m tcp --sport 8080 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK -A OUTPUT -d 169.254.25.10/32 -p tcp -m tcp --dport 8080 -m comment --comment "NodeLocal DNS Cache: skip conntrack" -j NOTRACK- 作用:对“源/目标IP为169.254.25.10、端口8080”的TCP流量,执行
NOTRACK。 - 原因:8080端口可能是DNS缓存的健康检查或配置接口,流量频率较低但仍需优化,跳过跟踪以减少资源消耗。
- 作用:对“源/目标IP为169.254.25.10、端口8080”的TCP流量,执行
三、总结
这些规则的核心目标是保障NodeLocal DNS Cache的高效运行:
- 通过
NOTRACK跳过DNS相关流量的连接跟踪,减少内核资源占用(避免连接跟踪表过载)。 - 通过
ACCEPT规则明确允许DNS查询(入站)和响应(出站),确保流量不被防火墙拦截。 - 规则按数据包处理顺序(PREROUTING→INPUT/OUTPUT)匹配,优先处理跟踪控制,再处理过滤,逻辑清晰且高效。