我使用“a.alpha”之类的名称作为我的 linux 机器的主机名,但这些名称似乎并不完全可用。hostname
shell 命令的响应是正确的 (a.alpha)。但是在我的用户帐户之后打印的名称是“user@a”而不是“user@a.alpha”。当我使用 avahi 时,我可以到达(通过hostname
)“a.alpha”,但不能到达“b.alpha”。这是正常的吗?
在 DreamPlug(这是一台运行 Ubuntu Jaunty 的插件计算机)上使用 Avahi 时,我遇到了以下非常奇怪的问题。
在花了几天的时间之后,我想我已经设法缩小了问题的范围。
DreamPlug 充当 WiFi 接入点,具有主机名plug
和 IP 地址192.168.1.1
(在/etc/hosts
和 中设置/etc/hostname
)并运行 lighttpd。
现在我的 Mac 可以直接http://plug.local
在 Chrome 中访问,但是如果我尝试http://plug.local
在 iPad 上加载,它就不起作用。也就是说,直到我在桌面上加载页面时它才起作用。
出于某种原因,iPad 永远无法解析主机名,直到在 Mac 上首次解析主机名......这很奇怪,因为 iPad 和 Mac 之间没有连接,除了它们连接到相同的接入点(DreamPlug)。
所以再次澄清一下:访问时 iPad 上的 Safari 将挂起(直到它报告浏览失败),http://plug.local
除非我http://plug.local
在 Mac 上访问、运行ping plug.local
、执行ssh root@plug.local
或基本上执行任何其他解析主机名的操作,此时 iPad 会立即解析主机名,它开始正常工作。
如果我的理解是正确的,当 iPad 连接时,它们会广播plug.local
. 无论出于何种原因,该请求都会被 DreamPlug 忽略(或者它永远不会被接收到)。但是,Mac确实设法广播了它的请求。它广播一个解析请求,DreamPlug 广播返回结果 …
CentOS 5.2
我的 VPS 主机重新启动(现在检查主机支持),我在 /var/log/messages 中注意到以下内容
Aug 28 11:57:52 echo avahi-daemon[21633]: **Found user 'avahi' (UID 70) and group 'avahi' (GID 70).**
Aug 28 11:57:52 echo avahi-daemon[21633]: **Successfully dropped root privileges.**
Aug 28 11:57:52 echo avahi-daemon[21633]: **avahi-daemon 0.6.16 starting up.**
Aug 28 11:57:52 echo avahi-daemon[21633]: WARNING: No NSS support for mDNS detected, consider installing nss-mdns!
Aug 28 11:57:52 echo avahi-daemon[21633]: dbus_bus_get(): Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
Aug 28 11:57:52 echo avahi-daemon[21633]: WARNING: Failed to …
Run Code Online (Sandbox Code Playgroud) 首先是一些背景知识:我们有一个实验室,其中包含一些运行在隔离 LAN 上的专用 Linux 服务器。所有服务器运行相同的操作系统 (Debian Linux) 和相同的专有服务器软件,服务器进程相互通信以保持数据同步。这意味着就任何客户端而言,客户端连接到哪个服务器并不重要——任何服务器都将返回与其他任何服务器相同的数据。
这些 Linux 服务器都运行 avahi-daemon 来为自己发布 mDNS 主机名,这意味着客户端可以输入例如“ http://linux-server-1.local”。进入他的 Web 浏览器并连接到 Linux 服务器 #1,依此类推。
这一切都很好,只是这意味着坐在客户端机器上的用户(通常是安装了 Bonjour 的 Mac 或 Windows 笔记本电脑)必须知道(或弄清楚)哪些 Linux 服务器当前在线,并且他必须确保他连接到其中之一。例如,如果服务器#2 今天离线,并且客户端输入“ http://linux-server-2.local”。进入他的网址栏,他不会得到回应。当然,这不是世界末日,但对于希望一切“正常工作”的新手用户来说,这很烦人,而且它还使健壮的客户端脚本的开发变得更加复杂(因为客户端脚本需要知道如何明确处理离线服务器)。
考虑到这一点,我的问题是:是否可以配置 Avahi 来发布任播风格的 mDNS 主机名别名?目标是任何人都可以坐在他的笔记本电脑上,输入“ http://any-linux-server.local”。(或类似的),并连接到当前在线的服务器之一(同样,哪个服务器无关紧要)。
请注意,这需要在客户端笔记本电脑没有任何特殊配置的情况下工作,因为我们无法控制它们(除了需要安装 Bonjour 之外)。
另请注意,我们不能依赖单独的名称服务器或代理框的存在,或依赖任何特定 Linux 服务器的存在,因为这会引入我们试图避免的单点故障。
avahi-daemon 继续绑定到 eth0 端口 5353 和 53791。有没有办法告诉 avahi-daemon 只绑定到 localhost 而不是 eth0 ?
/etc/avahi/avahi-daemon.conf
use-ipv4=yes
use-ipv6=no
allow-interfaces=lo
deny-interfaces=eth0
Run Code Online (Sandbox Code Playgroud)
netstat -nap
udp 0 0 0.0.0.0:53791 0.0.0.0:* 3145/avahi-daemon:
udp 0 0 0.0.0.0:5353 0.0.0.0:* 3145/avahi-daemon:
Run Code Online (Sandbox Code Playgroud) 我有一个 FreeBSD 9 路由器(Soekris net6501)通过 dsl 调制解调器(桥接)连接到互联网,为两个内部子网 10.0.1.0/24(LAN)和 10.0.2.0/24(wifi 网)执行 NAT。
有子网之类的东西之间的路线ssh host-A.wifi
从host-B.lan
作品。
但是,10.0.2.0/24 网络上的无线客户端(如 iPad 和 iPhone)似乎无法在 LAN 上找到东西(例如,在 LAN 上播放到 Apple-TV)。
我不完全确定,但我认为这是因为 Apple 使用 Bonjour,Bonjour 使用多播来查找内容,而多播不跨子网路由。
根据FreeBSD 手册,要路由多播,我需要编译内核options MROUTING
并创建一个/etc/mrouted.conf
,但我找不到任何好的配置文件示例。
mrouted
FreeBSD 中启用路由的首选解决方案吗?/etc/mrouted.conf
在 10.0.1.0/24 和 10.0.2.0/24 之间创建路由?通常(可能 80% 的时间),当我重新启动运行 Avahi 的机器时,它开始使用machinename-2.local
它的主机名。我网络上的所有机器都有唯一的主机名,所以没有冲突。
如何防止 Avahi 附加-2
到主机名?
(事实证明,这对谷歌来说是一件非常困难的事情......)
在我的 LAN 上,我有三个基本相同的 Debian Linux 机器运行 Avahi。其中一个既有IPv4地址又有IPv6地址,另外两个只有IPv6地址。它们都显示在我 Mac 上的 Bonjour 浏览器中,如下所示:
Workgroup Manager (_workstation._tcp.) - 4
box-1 [00:60:2b:02:45:f8]
[fe80::260:2bff:fe02:45f8]:9
192.168.1.78:9
box-2 [00:60:2b:02:46:1b]
[fe80::260:2bff:fe02:461b]:9
box-3 [00:60:2b:02:42:e2]
[fe80::260:sbff:fe02:42e2]:9
Run Code Online (Sandbox Code Playgroud)
在我的 Mac 上,一切都很好……我可以解析 box-1.local.、box-2.local. 和 box-3.local.、ping6 到其中任何一个、ssh 到其中任何一个等.
然而,我的 Windows 7 机器只能看到 box-1。例如,在命令提示符窗口中执行 dns-sd 会让我得到这个:
C:\>dns-sd -B _ssh._tcp
Browsing for _ssh._tcp
Timestamp A/R Flags if Domain Service Type Instance Name
12:41:14.492 Add 2 17 local. _ssh._tcp. box-1 SSH
Run Code Online (Sandbox Code Playgroud)
通过其 Bonjour 名称和 IPv6 ping 该框有效:
C:\>ping -6 msli-dcm-2-10330688.local.
Pinging msli-dcm-2-10330688.local. [fe80::260:2bff:fe02:45f8%17] with 32 bytes of …
Run Code Online (Sandbox Code Playgroud) 我有几个虚拟机(运行 Scientific Linux 6.2)发布工作站记录,以便可以在网上轻松找到它们。一些虚拟机在几分钟后停止发布,即我可以通过 hostname.local 访问它们几分钟,然后任何发现都会超时。他们仍然可以通过他们的 IP 地址访问。重新启动会avahi-daemon
导致相同的行为。
/var/log/messages 中没有任何内容表明存在问题:
Nov 27 08:07:33 vm01 avahi-daemon[2836]: Got SIGTERM, quitting.
Nov 27 08:07:33 vm01 avahi-daemon[2836]: Leaving mDNS multicast group on interface eth0.IPv4 with address 10.100.200.226.
Nov 27 08:07:33 vm01 avahi-daemon[2880]: Found user 'avahi' (UID 70) and group 'avahi' (GID 70).
Nov 27 08:07:33 vm01 avahi-daemon[2880]: Successfully dropped root privileges.
Nov 27 08:07:33 vm01 avahi-daemon[2880]: avahi-daemon 0.6.25 starting up.
Nov 27 08:07:33 vm01 avahi-daemon[2880]: WARNING: No NSS support for mDNS detected, …
Run Code Online (Sandbox Code Playgroud) 我有一个在 Fedora 20 机器上运行的服务,它在启动时尝试向 Avahi 注册服务。如果我的服务在 SELinux 处于许可模式时启动,这将非常有效,但在 SELinux 强制执行时该服务不会注册。
我知道httpd_dbus_avahi
SELinux中的布尔值。这非常适用于允许 Apache 注册服务,但我一直无法找到有关如何允许其他特定服务与 Avahi 通信的大量信息。
更具体地说,我试图允许 tvheadend 向 Avahi 注册其 HTSP 服务,但我也很好奇如何允许任何特定服务与 Avahi 通信而不会被 SELinux 停止。我对关闭 SELinux 或允许想要与 Avahi 通信的进程不感兴趣。
编辑:添加了与 tvheadend 相关的所有 SELinux 和服务单元信息
---SELinux---
审计日志消息
执行semodule -DB
并重新启动 tvheadend 服务后。以下是审计日志中出现的所有消息。最后一条消息似乎是问题所在,但我不知道该怎么做...
type=SERVICE_STOP msg=audit(1393282994.012:512): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg=' comm="tvheadend" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
type=SERVICE_START msg=audit(1393283083.635:513): pid=1 uid=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:init_t:s0 msg=' comm="tvheadend" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
type=USER_AVC msg=audit(1393283084.291:514): pid=752 uid=81 auid=4294967295 ses=4294967295 …
Run Code Online (Sandbox Code Playgroud) 如何配置Avahi 和 nss-mdns以与 Windows 使用NetBIOS或最近LLMNR相同的方式解析我的小型家庭网络中的名称。
对于 Linux,有两种选择:
我尝试了 Avahi。
它已经在 /etc/nsswitch.conf 中预先配置好。守护进程运行,发现运行,查找 - 排序。
但有一个问题。
ping foopc1
不工作 -未知主机
ping foopc2.local
工作!
我个人不介意使用“后缀”名称,但有些系统会这样做。特别是桑巴。无法安装 cifs 网络共享。Smb4k 可以很好地识别其他计算机,但是在尝试挂载共享 (smb/cifs) 时失败:
could not resolve address for foopc1
似乎对于 samba 客户端 (mount.cifs),主机名解析器 (?) 接受的网络名称与 nmblookup (??) 获得的名称之间必须匹配,如果我错了,请纠正我!
如何使 ping 将我的计算机识别为 foopc1 和 foopc2 而不是 foopc1.local 和 foopc2.local?
根据 nss-mdns 项目主页
http://0pointer.de/lennart/projects/nss-mdns/我创建/etc/mdns.allow …
我不清楚如何在服务器启动时启动服务,我阅读了有关将脚本添加到的其他一些问题/etc/init.d
,但这只是我需要在命令行中执行的一行:
sudo /etc/init.d/avahi-daemon restart
Run Code Online (Sandbox Code Playgroud)
但是我对此有一些问题,首先,我显然需要使用 sudo,它给了我以下内容:
ngl-server-01:~% sudo /etc/init.d/avahi-daemon start
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service avahi-daemon start
Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the start(8) utility, e.g. start avahi-daemon
Run Code Online (Sandbox Code Playgroud)
但是当我尝试时,avahi-daemon start
我得到:
Too many arguments
Run Code Online (Sandbox Code Playgroud)
为什么是这样?您将如何启动这项服务?
更新
同样,如何在启动时挂载磁盘?