这些是我运行时看到的输出dmesg
[1373335.656608] device eth0 entered promiscuous mode
[1373364.891962] device eth1 entered promiscuous mode
[1374537.599978] IPv4: martian source 10.5.0.2 from 203.115.192.116, on dev eth0
[1374562.256536] device eth1 left promiscuous mode
[1375229.342282] device eth1 entered promiscuous mode
[1376178.967446] device eth0 left promiscuous mode
[1376182.455498] device eth0 entered promiscuous mode
- Q1) 我知道火星数据包的源地址使用不可路由的 IP。该主机是一个具有临时公共 IP 的 Google 计算实例。 “来自 203.115.192.116 的火星源 10.5.0.2”是什么意思?
- Q2)我应该 iptables 过滤这些(出于安全考虑)吗?
答案1
如果假设的回复数据包将通过不同的接口路由,则到达接口的数据包被视为“火星”。在您的情况下,203.115.192.116 向 10.5.0.2 发送了一个数据包,该数据包到达您的 eth0 接口。如果 10.5.0.2 是您的地址,ip route get 203.115.192.116
正确报告与 eth0 不同的接口,并且您实际上打算执行此类非对称路由,那么应该禁用这些 martian 日志,例如
echo 0 > /proc/sys/net/ipv4/conf/eth0/log_martians
并且rp_filter
也必须被禁用。否则(这似乎更有可能)某个地方存在路由问题,需要修复。如果无法修复(在托管云环境中很有可能),您可以像上面一样完全禁用日志记录,或者更有选择性地删除iptables
(筛选不过,连锁店可能已经太晚了)。
答案2
火星数据包是指在该接口中看到预期的本地地址(例如,本地网络的数据包与该数据包的网络不同)。
虽然这不是建议的网络设计,但某些网络可能会设计为具有“火星”数据包(例如具有多个逻辑网络的 VLAN/物理网络)。
如果您在服务器中使用iptables
,过滤掉您不应该看到的数据包可能不是一个坏主意。
但请注意,虽然我会在预生产设置中进行 martian 日志记录,但我宁愿不记录 martian,因为它通常会生成大量日志,并对您的 I/O 操作征税。