如何使用 专门从网络命名空间内的网络接口捕获流量tshark
?就我而言,网络接口tun0
被移动到名为 的网络命名空间中vpn
。
通常运行tshark -f "port 53"
会使输出混乱,因为它包含来自网络命名空间最终使用的主接口的 DNS 查询。
这是我的网络命名空间设置(就其价值而言,这是来自此处的 openvpn netns-up 脚本:http://www.naju.se/articles/openvpn-netns.html)
$ ip netns add vpn
$ ip netns exec vpn ip link set dev lo up
$ ip link set dev tun0 up netns vpn mtu 1500
$ ip netns exec vpn ip addr add dev tun0 "10.14.0.3/16"
$ ip netns exec vpn ip addr add dev tun0 "$ifconfig_ipv6_local"/112
$ ip netns exec vpn ip route add default via 10.14.0.1
$ ip netns exec vpn ip route add default via "$ifconfig_ipv6_remote"
答案1
您可以继续使用与在使用以下命令创建的网络命名空间内执行命令时所使用的相同的未缩短语法ip netns add
:
ip netns exec vpn <command-for-capture>
喜欢:
ip netns exec vpn tshark -i tun0 -n -f 'port 53'
注意避免触发DNS解析tshark
的选项-n
,在捕获DNS流量时尤其重要,否则tshark
本身引起的级联DNS解析和捕获会污染原始流量。
附带说明一下,该ip
命令本身有一个快捷方式,允许替换ip netns exec FOO ip BAR ...
为ip -n FOO BAR ...
,但当然这不能用于任何其他命令。很多OP的设置可以缩短为ip -n vpn ...
而不是ip netns exec vpn ip ...
.