我正在尝试找到一种方法来可靠地找到本地路由器的全局 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
Run Code Online (Sandbox Code Playgroud)
然而,当不使用 EUI-64 时,这显然不起作用。我还有其他方法可以找到吗?
没有可靠的方法来确定这一点,因为您的本地路由器根本不需要具有全局 IPv6 地址。最佳实践表明应该这样做,而且绝大多数路由器都会这样做,但从技术上讲,您的路由器可能只能在两个接口上都有链路本地地址,但仍然路由全局前缀。(是的,我以前这样做过。是的,它\xe2\x80\x99s 是邪恶的。)
\n\n除非您手动添加指向全局地址的默认路由,否则您可能通过路由器通告获悉默认路由,这意味着路由表和邻居表(正如您上面指出的)将仅包含链路本地地址。
\n\n但是,如果您执行跟踪路由,第一跳可能是(关键字:可能 \xe2\x80\x94 it\xe2\x80\x99s 可能会欺骗这个东西)您的本地路由器。
\n\ntraceroute to 2600:: (2600::), 30 hops max, 80 byte packets\n 1 2001:db8:1::1 0.534 ms 0.510 ms 0.749 ms\n 2 2001:db8:2::1 32.494 ms 33.944 ms 35.406 ms\n 3 2600:: 36.935 ms 38.102 ms 39.860 ms\nRun Code Online (Sandbox Code Playgroud)\n\nTL;DR \xe2\x80\x99s 不可能可靠地确定这一点,所以简短的答案是 \xe2\x80\x9cno\xe2\x80\x9d。
\n| 归档时间: |
|
| 查看次数: |
2367 次 |
| 最近记录: |