安装步骤
1 | sudo apt-get update |
问题描述:
tcpdump在网口抓包和读取pcap文件,相同的filter表达式”icmp“,对vlan报文有不同的处理结果。
在网口上抓包可以看到vlan和非vlan两种流量, 而读取pcap只能看到非vlan流量一种流量。
原因:
kernel里在tcpdump抓包之前会把报文的vlan提前解析掉,并把vlan信息放到skb的metadata里了。
所以tcpdump(内核的af_packet对应的ptype_all)处理的报文都是不带vlan的,因此这两类报文都会被过滤出来。
而读取pcap时候,因为vlan报文并没有被剥离掉,所以vlan报文不满足过滤条件,被丢弃了。
国外已经有人发现并分析过这个问题https://andreaskaris.github.io/blog/networking/bpf-and-tcpdump/
1 | ip netns exec ns1 ip l s veth1 down |
这部分详见ip rule命令帮助手册,
https://man7.org/linux/man-pages/man8/ip-rule.8.html
简要总结:
SELECTOR
和ACTION
。SELECTOR
支持多种形式,比如IP、PORT、进出网口、tos以及非操作(not
)ACTION
中几个重要的类型:rule route是支持优先级的。 通过 ip rule show
命令我们可以看到每条rule对应的优先级。添加rule时候,默认的是当前除0以外最高优先级的值-1, 即默认新建的rule优先级高。
IPv6协议栈里, 当一个网口被down之后,网口上对应的IP地址也会一起被flush掉。
面对IPv6跟IPv4不同的行为方式,内核提供了一个规避的开关。
在4.6内核之后提供了一个开关,用来避免IPv6地址别清理掉。
这个开关既有全局的设置,也有每个interface粒度的单独开关。