我一直在尝试了解我们的路由/防火墙设置中的特殊行为,但并不真正明白发生了什么。
我们有一个防火墙/路由器设备,它有两个面向外部的接口和多个内部 VLAN。
f4:f5:d8:d2:f2:4c
当我们的访客 WiFi 网络 VLAN 99 上的客户端(本例中为 MAC、IP 10.99.154.254)向某个我们禁止的互联网主机 8.8.8.8 发送 ping 回显请求时,会观察到特定行为。
路由器从其vlan99
接口(MAC 00:08:a2:0d:00:70
,IP 10.99.0.2)向客户端发回一个 ICMP 主机不可达数据包,与此同时,我们看到火星包裹在外部接口上eth-ext1
:
tcpdump
显示如下:
$ tcpdump -i vlan99 -vvvvn 'icmp and host 10.99.154.254'
11:59:21.555564 f4:f5:d8:d2:f2:4c > 00:08:a2:0d:00:70, ethertype IPv4 (0x0800), length 98: (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
10.99.154.254 > 8.8.8.8: ICMP echo request, id 2303, seq 1, length 64
11:59:21.555651 00:08:a2:0d:00:70 > f4:f5:d8:d2:f2:4c, ethertype IPv4 (0x0800), length 126: (tos 0xc0, ttl 64, id 8585, offset 0, flags [none], proto ICMP (1), length 112)
10.99.0.2 > 10.99.154.254: ICMP host 8.8.8.8 unreachable, length 92
(tos 0x0, ttl 63, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
10.99.154.254 > 8.8.8.8: ICMP echo request, id 2303, seq 1, length 64
这里没有什么奇怪的,这是来自客户端的原始 ping 以及返回给客户客户端的 ICMP 数据包,通知他们主机不可访问。
同时,内核日志中出现一条条目:
Feb 21 11:59:21 ganymede kernel: IPv4: martian source 10.99.154.254 from 8.8.8.8, on dev eth-ext1
Feb 21 11:59:21 ganymede kernel: ll header: 00000000: 00 08 a2 0d 00 70 f4 f5 d8 d2 f2 4c 08 00 .....p.....L..
链路层信息显示该以太网帧来自从客户端设备到路由器的vlan99
接口,这让我很疑惑为什么它会出现在一个火星包上eth-ext1
源地址为 8.8.8.8。
到目前为止,我都无法获得来自火星源的数据包的踪迹,这让我怀疑火星源日志记录是否也发生在出口接口上,然后才有tcpdump
机会看到它?
我很乐意根据要求提供更多信息(路由表或类似物),并希望您能指点一下这里发生的事情。
答案1
内核正在使用 icmp 不可达消息将 ping 请求修补到 8.8.8.8,并且有帮助地告诉您源是火星人。
这是它正在标记的数据包...
11:59:21.555651 00:08:a2:0d:00:70 > f4:f5:d8:d2:f2:4c, ethertype IPv4 (0x0800), length 126: (tos 0xc0, ttl 64, id 8585, offset 0, flags [none], proto ICMP (1), length 112)
10.99.0.2 > 10.99.154.254: ICMP host 8.8.8.8 unreachable, length 92
正如您通过链接层看到的MAC 00 08 a2 0d 00 70 to f4 f5 d8 d2 f2 4c 08 00
......
Feb 21 11:59:21 ganymede kernel: ll header: 00000000: 00 08 a2 0d 00 70 f4 f5 d8 d2 f2 4c 08 00
火星源 - 我认为它混淆了它作为代理对 8.8.8.8 进行响应的事实 - 无法从这里到达那里。