当与 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 服务器。
所以我认为这种行为是有意的,并且不鼓励强制使用静态配置的链路本地地址。