なんかうまく動かないんですよね。
おうちのネット環境は TimeCapsule をルータに iMac, MacBook と AirMac Express x2 と、すっかりマカーになってしまいました。AirMac Express の先にいる Atom な Debian sid も、やっぱ smb より afp だよね、ってことで。
どう動かないかというと、でびあんマシンの count.local で
ichii386@count% sudo avahi-daemon --debug Found user 'avahi' (UID 110) and group 'avahi' (GID 117). Successfully dropped root privileges. chroot.c: chroot() helper started avahi-daemon 0.6.23 starting up. Successfully called chroot(). Successfully dropped remaining capabilities. chroot.c: chroot() helper got command 02 Loading service file /services/afpd.service. (snip)
と avahi-daemon を動かした状態で、たとえば count (自分自身、 debian) と elmo (iMac) に ping を打つと
ichii386@count% ping -c1 count.local PING count.local (192.168.1.3) 56(84) bytes of data. 64 bytes from count.local (192.168.1.3): icmp_seq=1 ttl=64 time=0.047 ms --- count.local ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.047/0.047/0.047/0.000 ms ichii386@count% ping -c1 elmo.local ping: unknown host elmo.local
てなかんじ。avahi-daemonの出力は
simple-protocol.c: Got RESOLVE-HOSTNAME-IPV4 request for 'count.local'. simple-protocol.c: Got RESOLVE-ADDRESS request for '192.168.1.3'. simple-protocol.c: Got RESOLVE-HOSTNAME-IPV4 request for 'elmo.local'.
だけでした。
ナゾ
で、すっごいナゾで「うまく動かない」なんて微妙な言い方をした理由が、tcpdumpするととたんに動き出すんです。
ichii386@count% sudo tcpdump -v 'not (src port 22 or dst port 22)' tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 10:26:42.624870 IP6 (hlim 255, next-header UDP (17) payload length: 36) fe80::21c:c0ff:fe8e:13b5.mdns > ff02::fb.mdns: [udp sum ok] 0 A (QM)? elmo.local. (28) 10:26:42.635510 IP (tos 0x0, ttl 255, id 0, offset 0, flags [DF], proto UDP (17), length 56) count.local.mdns > 224.0.0.251.mdns: 0 A (QM)? elmo.local. (28)
avahiは
simple-protocol.c: Got RESOLVE-HOSTNAME-IPV4 request for 'elmo.local'. simple-protocol.c: Got RESOLVE-ADDRESS request for '192.168.1.11'.
と期待してる出力をするし、もちろん ping もうまく通りました。
ネットワーク詳しいかた、「あーこれね」って感じだったりしませんか??
どうでもいい話
むかし google code search ができた頃に id:moriyoshi がなんか書いてた気がしますが、 simple-protocol.c から一部引用。
if (strcmp(cmd, "HELP") == 0) { client_output_printf(c, "+ Available commands are:\n" "+ RESOLVE-HOSTNAME <hostname>\n" "+ RESOLVE-HOSTNAME-IPV6 <hostname>\n" "+ RESOLVE-HOSTNAME-IPV4 <hostname>\n" "+ RESOLVE-ADDRESS <address>\n" "+ BROWSE-DNS-SERVERS\n" "+ BROWSE-DNS-SERVERS-IPV4\n" "+ BROWSE-DNS-SERVERS-IPV6\n"); c->state = CLIENT_DEAD; } else if (strcmp(cmd, "FUCK") == 0 && n_args == 1) { client_output_printf(c, "+ FUCK: Go fuck yourself!\n"); c->state = CLIENT_DEAD; } else if (strcmp(cmd, "RESOLVE-HOSTNAME-IPV4") == 0 && n_args == 2) {
んーと、うーん。