配置静态 IP 时无法发现 IPv4 链路本地地址

配置静态 IP 时无法发现 IPv4 链路本地地址

当与 DHCP 结合使用时,我的本地链路地址可以立即使用,因为当没有 DHCP 时,设备不会获得 IP,而只会获得本地链路地址。尽管如此,即使我静态设置接口,我也需要让本地链路地址正常工作。我不确定我应该怎么做。这是我所做的:

auto eth0
allow-hotplug eth0
        iface eth0 inet static
        gateway 192.168.0.1
        address 192.168.0.25
        netmask 255.255.255.0
        post-up /usr/sbin/avahi-autoipd --force-bind --daemonize --wait $IFACE 2> /dev/null
        pre-down /usr/sbin/avahi-autoipd --kill $IFACE 2> /dev/null

结果如下:

$ ifconfig
eth0      Link encap:Ethernet  HWaddr d0:63:b4:00:88:1f
          inet addr:192.168.0.25  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::d263:b4ff:fe00:881f/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:243 errors:0 dropped:0 overruns:0 frame:0
          TX packets:554 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:33114 (33.1 KB)  TX bytes:56243 (56.2 KB)

eth0:avahi Link encap:Ethernet  HWaddr d0:63:b4:00:88:1f
          inet addr:169.254.5.135  Bcast:169.254.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

一切顺利,我的目标有 2 个本地 IP。现在,我想通过直接连接网线来访问它。我无法使用 avahi-browse 浏览它,“avahi-browse -alr”仅返回 192.168.0.25 静态地址或 IPv6 本地链路,从不返回 IPv4 本地链路。我能够使用 169.254.5.135 本地链路地址 ssh 目标!我无法使用 avahi-browse 报告的静态地址来做到这一点,因为它没有路由,它只是一个电缆连接。我只是不知道我该怎么做发现这个链接本地 IP... 这是这个难题的最后一块拼图,因为链接本地 IP 正在工作。就像静态配置优先于发现一样。

请注意,所有机器都在报告 avahi 工作站服务。

编辑

啊,我忘了在目标 avahi-daemon.conf 上设置发布工作站服务。因此,设置此设置后,行为发生了变化。avahi-browse -ar,即使从目标内部执行,也不会列出其自己的链接本地地址,而只会列出其 IPv6 和静态 IPv4。因此,如果目标本身无法再浏览此链接本地地址,连接的机器如何才能做到这一点。我不知道如何让 avahi-browse 列出这个有效的地址。

~ ❯❯❯ ssh [email protected]                                                                                                                  archlinux ✱
[email protected]'s password:
  ____      _                 _ ____     __  __
 / ___|   _| |__   _____  __ (_)___ \ ___\ \/ /
| |  | | | | '_ \ / _ \ \/ / | | __) / _ \\  /
| |__| |_| | |_) | (_) >  <  | |/ __/  __//  \
 \____\__,_|_.__/ \___/_/\_\ |_|_____\___/_/\_\


Welcome to ARMBIAN Ubuntu 14.04.4 LTS 3.14.60-cubox

System load:   0.00             Up time:       35 min
Memory usage:  5 % of 3788Mb    IP:            192.168.0.25
CPU temp:      47°C
Usage of /:    4% of 29G

Last login: Wed Feb 24 04:19:27 2016 from 169.254.4.29
francisco@cubox-i:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether d0:63:b4:00:88:1f brd ff:ff:ff:ff:ff:ff
    inet 169.254.5.135/16 brd 169.254.255.255 scope link eth0:avahi
       valid_lft forever preferred_lft forever
    inet 192.168.0.25/24 brd 192.168.0.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::d263:b4ff:fe00:881f/64 scope link
       valid_lft forever preferred_lft forever
3: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default
    link/ether f6:4b:80:39:3e:0b brd ff:ff:ff:ff:ff:ff
4: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether 6c:ad:f8:1d:4b:87 brd ff:ff:ff:ff:ff:ff
francisco@cubox-i:~$ avahi-browse -ar
+   eth0 IPv6 cubox-i [d0:63:b4:00:88:1f]                   Workstation          local
+   eth0 IPv4 cubox-i [d0:63:b4:00:88:1f]                   Workstation          local
=   eth0 IPv6 cubox-i [d0:63:b4:00:88:1f]                   Workstation          local
   hostname = [cubox-i.local]
   address = [fe80::d263:b4ff:fe00:881f]
   port = [9]
   txt = []
=   eth0 IPv4 cubox-i [d0:63:b4:00:88:1f]                   Workstation          local
   hostname = [cubox-i.local]
   address = [192.168.0.25]
   port = [9]
   txt = []

答案1

事实是,我可以访问静态 IP 192.168.0.25!问题是,当我的笔记本电脑连接到 WiFi 时,我尝试使用直接电缆进行通信,位于 192.168.0.0/24 网络内。关闭 WiFi 后,我能够访问 192.168.0.25。

答案2

我遇到了同样的问题,我明白为什么你的陈述

这就像静态配置优先于发现。

部分正确。至少这种行为是可以解释的。

Avahi 仅发布链接本地地址,如果它们是链接上唯一的地址,请参阅[https://github.com/lathiat/avahi/blob/1cc2b8e8d62e939b8bd683f795794878863931af/avahi-core/iface.c#L707][1]。在接口配置上运行 avahi-daemon 时,您也可以观察到此行为,输出会指出已发布的地址。由于有两个 IPv4 地址(静态和本地链接),因此不会发布本地地址。对于 IPv6,您只有一个本地链接地址,因此您可以在 avahi-browse 上看到它。

正如维基百科所述

RFC 3927 警告不要同时使用不同范围的 IPv4 地址[6],例如在同一接口上配置链路本地地址和全局可路由地址。因此,主机在分配链路本地地址之前会在网络上搜索 DHCP 服务器。

所以我认为这种行为是有意的,并且不鼓励强制使用静态配置的链路本地地址。

相关内容