我正在尝试寻找一种工具,使我能够找到进入设备的具有特定目标地址的数据包所采用的路由。
ip route get
可以满足我大部分的期望。
问题是,我想测试在相当复杂的路由环境中当数据包具有 fwmark 时它们是否能找到正确的路由。
理想的工具将允许使用 fwmark(或其他属性)欺骗通用数据包,并可以将其发送到整个 IpTables 链和 ip 路由/ip 规则集,或者仅找到将返回的路由。
我希望能够运行一个命令来验证特定的一组路线是否按预期工作。
最低要求类似,ip route get
但支持 fwmark。
不过,在这一点上,任何有关测试路由实用程序的建议都会受到极大的赞赏!随着路线的堆积,它很快就会变得复杂起来。
答案1
您可以在“ip route get”命令中使用 mark 选项。您还可以在此命令中指定源地址和输入和输出接口。
例子:
ip route get 8.8.8.8 mark 0x20
- 检查标记数据包到 8.8.8.8 地址的路由。
ip route get 8.8.8.8 from 192.168.0.200 iif eth1
- 检查通过 eth1 接口接收的来自 192.168.0.200 主机的转发数据包的路由。在这种情况下,如果“发件人”地址不在此主机上(不是本地),则应指定 iif。
ip route get 8.8.8.8 from 192.168.0.100 iif eth1 mark 0x30
- 与前面的例子类似,但带有标记指定。
要通过 netfilter 规则集测试数据包的路径,您可以使用 TRACE 目标和 scapy 来构建所需的数据包。
答案2
您正在寻找的工具的技术名称是“数据包制作者”
具体的产品推荐与 ServerFault 无关,但有一个包含他们自己的 nping 替代工具的列表,由nmap 项目可以在http://SecTools.org/tag/packet-crafters/另一个维基百科。
答案3
除了ip route get
尝试https://github.com/zhangyoufu/fwmark
此 Python3 脚本创建了一个新的 cgroup 并附加 eBPF 程序以在创建套接字后立即强制执行 fwmark (SO_MARK)。灵感来自ip vrf exec
。
这对于诊断多宿主网络/策略路由应该很有用。