arp相关
你关心的几个 Linux 网络内核参数的作用、设置效果以及如何验证它们的生效情况,我给你详细梳理一遍,帮你理解它们的核心作用,和怎么在生产环境尤其是 Kubernetes 节点上验证。
1. 参数作用说明和典型设置建议
| 参数 | 取值范围 | 作用与关键现象 | 生产环境建议 |
|---|---|---|---|
| ip_forward | 0 / 1 | 是否开启 IP 转发(路由和 NAT 功能)关闭时无法路由转发数据包 | 网关或路由器节点必须设为 1,普通主机一般 0 |
| arp_filter | 0 / 1 | 多网卡情况下是否只响应收到 ARP 请求的那个接口对应的 IP防止错误 ARP 响应 | 多网卡服务器建议设为 1,避免 ARP 混乱 |
| rp_filter | 0 / 1 / 2 | 源地址验证(逆向路径过滤)防止 IP 欺骗攻击2 表示严格模式 | 云环境或对安全要求高建议设为 1(或 2) |
| bridge-nf-call-iptables | 0 / 1 | 是否让桥接(bridge)网络流量经过 iptables 过滤影响容器网络策略(如 K8s NetworkPolicy) | Kubernetes 节点必须设为 1,确保网络策略生效 |
| arp_ignore | 0 ~ 8 | ARP 响应行为控制控制设备在哪些接口响应 ARP 请求,细粒度控制 ARP 响应 | LVS DR 模式建议设为 1 |
| proxy_arp | 0 / 1 | 是否启用代理 ARP设备代理回答不属于自身的 IP 的 ARP 请求 | 大多数情况下设为 0(关闭) |
2. 参数详细作用与现象举例
| 参数 | 作用举例 | 现象说明 |
|---|---|---|
| ip_forward=0 | 关闭 IP 转发,节点不能作为路由器 | 两个网段间通信失败,无法跨接口转发包 |
| ip_forward=1 | 开启 IP 转发,允许做路由和 NAT | 多网卡服务器或网关设备正常转发流量 |
| arp_filter=0 | 网络接口收到 ARP 请求都会响应 | 多网卡时可能导致错误响应,产生网络问题 |
| arp_filter=1 | 只响应本接口 IP 的 ARP 请求 | 多网卡环境避免 ARP 冲突 |
| rp_filter=0 | 不做逆向路径验证,可能存在 IP 欺骗风险 | 网络安全风险增加 |
| rp_filter=1 | 做逆向路径验证,丢弃非正常路径来的包 | 增强安全性,阻止伪造源 IP |
| rp_filter=2 | 严格模式,所有接口均验证源 IP | 最严格安全检测,可能导致多路径路由失败 |
| bridge-nf-call-iptables=0 | 容器之间通信绕过 iptables,网络策略失效 | Kubernetes NetworkPolicy 不生效 |
| bridge-nf-call-iptables=1 | 让桥接网络流量进入 iptables | 容器网络策略生效,安全隔离正常工作 |
| arp_ignore=1 | 只响应发到本接口 IP 的 ARP 请求 | LVS DR 模式下避免 IP 伪装和混乱 |
| proxy_arp=0 | 不响应非本机 IP 的 ARP 请求 | 正常主机模式,安全 |
| proxy_arp=1 | 响应非本机 IP 的 ARP 请求,代理跨子网访问 | 用于特殊网络代理场景,非普通场景 |
3. 如何验证这些参数生效和网络现象?
下面给出具体的验证思路和示例命令。
3.1 ip_forward
sysctl net.ipv4.ip_forward
cat /proc/sys/net/ipv4/ip_forward
验证方法:
-
关闭
ip_forward=0时,从一块网卡接收的数据包不会转发到另一块网卡。 -
开启后,能做路由转发。
实测验证:
-
配置两块网卡,设置不同子网,Ping 另一网卡 IP 测试是否通畅。
3.2 arp_filter
sysctl net.ipv4.conf.all.arp_filter
sysctl net.ipv4.conf.eth0.arp_filter
验证方法:
-
arp_filter=1 时,只有收到请求的接口会响应 ARP,防止多网卡响应冲突。
-
arp_filter=0 时,多接口可能同时响应。
3.3 rp_filter
sysctl net.ipv4.conf.all.rp_filter
验证方法:
-
关闭 rp_filter 后,路由表错误或者 IP 欺骗包可能通过。
-
开启后,内核丢弃来源 IP 路径异常的数据包。
3.4 bridge-nf-call-iptables
sysctl net.bridge.bridge-nf-call-iptables
验证方法:
-
设置为0时,iptables 规则不作用于 bridge 流量,K8s 网络策略不生效。
-
设置为1时,iptables 能过滤容器间的桥接流量,网络策略正常。
3.5 arp_ignore
sysctl net.ipv4.conf.all.arp_ignore
验证方法:
-
设为1时,ARP 只在收到请求的接口响应,适合 LVS DR 模式,避免 IP 伪装。
3.6 proxy_arp
sysctl net.ipv4.conf.all.proxy_arp
验证方法:
-
设为1时,设备会代替其他设备响应 ARP 请求,实现代理 ARP 功能。
-
一般关闭为0。
4. 总结
| 参数 | 常见生产设置 | 主要作用 | 验证方法/现象 |
|---|---|---|---|
| ip_forward | 1 (网关设备) | 路由/NAT开关 | 两网卡跨网段通信是否正常 |
| arp_filter | 1 (多网卡服务器) | 控制多网卡ARP响应 | 多网卡时避免ARP冲突 |
| rp_filter | 1 (云环境) | 源IP验证,防止IP欺骗 | 严格丢弃异常源IP包 |
| bridge-nf-call-iptables | 1 (K8s节点) | 让bridge流量经过iptables,保障网络策略生效 | K8s网络策略是否生效 |
| arp_ignore | 1 (LVS DR) | 限制ARP响应范围 | LVS DR模式下ARP是否只在特定接口响应 |
| proxy_arp | 0 (默认关闭) | 是否代理ARP | 是否允许设备代理回应非本机IP的ARP请求 |
如果你需要,我还能帮你写自动检测这些参数并验证网络行为的脚本,或者给你 Kubernetes DaemonSet 方式批量检测方案。你看需要吗?
浙公网安备 33010602011771号