Linux - 查找路由器 IPv6 全局地址
Linux - find router IPv6 global address
我正在尝试找到一种可靠地找到本地路由器的全局 IPv6 地址的方法。命令 "ip -6 neigh show" 不显示它。我发现以下工作,只要路由器使用 EUI-64 生成主机地址:
NET=$(ip -6 route|egrep "^[23]"|cut -d':' -f1-4)
EUI=$(ip -6 route|egrep "^default.*metric 1 "|cut -d':' -f3-6|cut -d' ' -f1)
ping6 $NET:$EUI -B -c 1 > /dev/null 2>&1
然而,当不使用 EUI-64 时,这显然不起作用。有没有其他方法可以找到它?
没有可靠的方法来确定这一点,因为您的本地路由器根本不需要有全球 IPv6 地址。最佳实践表明应该这样做,而且那里的绝大多数路由器都会这样做,但从技术上讲,您的路由器可能在两个接口上都只有 link-本地地址,并且仍然路由全局前缀。 (是的,我以前做过。是的,这是邪恶的。)
除非您手动添加指向全局地址的默认路由,否则您可能通过路由器通告了解您的默认路由,这意味着路由 table 和邻居 table(正如您在上面指出的)将仅包含 link-本地地址。
但是,如果您执行 traceroute,第一跳可能是(关键词:可能 - 有可能欺骗这些东西)您的本地路由器。
traceroute to 2600:: (2600::), 30 hops max, 80 byte packets
1 2001:db8:1::1 0.534 ms 0.510 ms 0.749 ms
2 2001:db8:2::1 32.494 ms 33.944 ms 35.406 ms
3 2600:: 36.935 ms 38.102 ms 39.860 ms
TL;DR 无法可靠地确定这一点,所以简短的回答是“否”。
我正在尝试找到一种可靠地找到本地路由器的全局 IPv6 地址的方法。命令 "ip -6 neigh show" 不显示它。我发现以下工作,只要路由器使用 EUI-64 生成主机地址:
NET=$(ip -6 route|egrep "^[23]"|cut -d':' -f1-4)
EUI=$(ip -6 route|egrep "^default.*metric 1 "|cut -d':' -f3-6|cut -d' ' -f1)
ping6 $NET:$EUI -B -c 1 > /dev/null 2>&1
然而,当不使用 EUI-64 时,这显然不起作用。有没有其他方法可以找到它?
没有可靠的方法来确定这一点,因为您的本地路由器根本不需要有全球 IPv6 地址。最佳实践表明应该这样做,而且那里的绝大多数路由器都会这样做,但从技术上讲,您的路由器可能在两个接口上都只有 link-本地地址,并且仍然路由全局前缀。 (是的,我以前做过。是的,这是邪恶的。)
除非您手动添加指向全局地址的默认路由,否则您可能通过路由器通告了解您的默认路由,这意味着路由 table 和邻居 table(正如您在上面指出的)将仅包含 link-本地地址。
但是,如果您执行 traceroute,第一跳可能是(关键词:可能 - 有可能欺骗这些东西)您的本地路由器。
traceroute to 2600:: (2600::), 30 hops max, 80 byte packets
1 2001:db8:1::1 0.534 ms 0.510 ms 0.749 ms
2 2001:db8:2::1 32.494 ms 33.944 ms 35.406 ms
3 2600:: 36.935 ms 38.102 ms 39.860 ms
TL;DR 无法可靠地确定这一点,所以简短的回答是“否”。