今天调公司里的 VPN 时,发现我的 freebsd 机器 traceroute 老是失败。
控制台报告
traceroute: sendto: Permission denied
(以上错误信息用来引导 google 同类问题的同学)
一开始是 ping 都不行,我查看了 firewall 的设置,允许 icmp 包通过。ping 就可以用了,但是 traceroute 还是不行。
这让我很疑惑,后来用 tcpdump 查了一下,发现 freebsd 的 traceroute 默认是用 udp 协议做的。真是惯性思维害人啊。windows 和 linux 下都是使用 icmp 的。
man 了一下,发现 freebsd 的 traceroute 可以用 -P ICMP 选择 icmp 协议。然后一切正常,不需要修改 firewall 的设置了。