IPv6 网络中,如何通过 mac 地址取 ipv6 地址?

@Ta 07-05 02:38 3680点击

有一台支持DHCPv6的路由器
下接了 ubuntu、windows、centos等主机

现需在 ubuntu 上通过 windows/centos 的 mac 地址 获取相应的 ipv6 地址

有无大佬知晓? @老虎会游泳

IPv4 中是直接 ping 一下广播地址,获取到网段中所有 mac 地址及其ipv4;
然而 ipv6 好像不能直接 ping 组播地址,我也不知道如何构造相应的 NS 报文
小米MIX2s(白)

回复列表(16)
  • @Ta / 07-05 03:06 / /

    @天蓝,IPv6使用邻居发现协议,在线的机器都会出现在邻居表中:

    ip -6 neigh
    
  • @Ta / 07-05 03:20 / /

    @天蓝,邻居发现协议确实有一个扩展,用于从mac地址找到IPv6地址。不过我不知道有没有实用工具实现了该功能。

    https://www.rfc-editor.org/rfc/rfc3122.html

  • @Ta / 07-05 03:25 / /

    @天蓝,Linux不支持反向邻居发现。所以如果未与对方进行通信,就无法发现对方IPv6地址。

    https://superuser.com/questions/911494/ipv6-inverse-neighbor-discovery-doesnt-work

  • @Ta / 07-05 03:29 / /

    @天蓝,如果知道对方的主机名(计算机名),可以使用mdns来解析出对方的IPv6地址。

    https://baike.baidu.com/item/mdns/7544078

  • @Ta / 07-05 03:32 / /

    @天蓝,向udp://[FF02::FB]:5353(组播)发送对主机名.lan的AAAA记录查询请求,应该就能收到对方的IPv6地址。

  • @Ta / 07-05 03:40 / /

    @天蓝,有三种用于发现本地设备的服务:
    NBNS、MDNS、LLMNR
    后两种都可以获取到IPv6地址。
    不过设备会不会回应这些查询请求取决于设备功能和配置。

  • @Ta / 07-05 03:42 / /

    @天蓝,LLMNR用于主机名解析可能比MDNS更可靠,因为Linux支持是通过systemd实现的,所以基本上都能支持。Windows当然也支持。不过这应该也只有主机名查询,得知道对方主机名才行。

  • @Ta / 07-05 03:44 / /

    @天蓝,其实还有另一个方法,就是直接发起抓包,这样就能监听到所有局域网组播、广播流量,从而发现其他设备的IPv6地址。

    当然,如果其他设备完全保持静默,不发起广播、组播通信,则感知不到它。

  • @Ta / 07-05 03:54 / /

    @天蓝,你也可以考虑使用mac地址直接算出对方的IPv6地址。不过不一定管用,如果对方开了IPv6地址隐私扩展,或者局域网不使用无状态地址自动配置,可能就不管用。

    算法叫做EUI-64,从mac地址直接生成IPv6地址的后64位,然后加上路由器给的前64位(所有设备都一样)就是完整的IPv6地址了。

    但是这样有隐私问题,网站可以借此获取你的mac地址对你进行跟踪。所以后来设备不会主动用EUI-64生成的地址进行互联网通信了,而是改用随机生成的另一个地址进行互联网通信。不过EUI-64生成的地址通常还是有效的,所以如果你去连,应该能连上。

    在这种情况下,ip -6 addr会看到设备有两个公网IPv6地址,一个是EUI-64生成的,一个是随机生成的。

    Screenshot_20220705_035441.jpg

  • @Ta / 07-05 09:44 / /

    其实还有另一个方法,就是直接发起抓包,这样就能监听到所有局域网组播、广播流量,从而发现其他设备的IPv6地址。

    当然,如果其他设备完全保持静默,不发起广播、组播通信,则感知不到它。


    如此的话,操作系统应该已经知道了一些 MAC IPV6之间的映射,为什么不加入到邻居表中,而是要与对方通信之后再加入邻居表呢?
    我的ubuntu接入IPv6网络后,其邻居表中就只有一条到网关的信息
    小米MIX2s(白)

  • @Ta / 07-05 09:56 / /

    @老虎会游泳
    小米MIX2s(白)

  • @Ta / 07-05 10:26 / /

    @天蓝,你自己用wireshark抓包看看嘛,也许并没有可用信息泄露。

  • @Ta / 07-05 13:05 / /

    顺便一提,fe80::本地链路地址是可以ping的,不过需要加%网卡序号或名称

    对于Windows,假设局域网使用网卡1:

    ping fe80::xxxx%1
    

    对于Linux,假设局域网使用网卡eth0:

    ping fe80::xxxx%eth0
    
  • @Ta / 07-10 00:25 / /

    感谢老虎,目前正则使用 llmnr 通过 mac 获取局域网内 ipv6 地址,但是有一些主机并不会响应 llmnr 请求,所以我正在打算通过 ipv4 ssh 登录这些主机,然后获取其 ipv6 地址,详见:https://hu60.cn/q.php/bbs.topic.103460.html
    小米MIX2s(白)

  • @Ta / 07-10 17:32 / /

    @天蓝,用证书登录啊,就不需要输入密码了。

  • @Ta / 07-10 18:13 / /

    @老虎会游泳,我想写一个通用的,这样可以登录多台主机 SSH,不用为每台主机做配置
    小米MIX2s(白)

添加新回复
回复需要登录