NetBSD 1.6Zにしたら、net.inet6.ip6.v6only=0 にしていると、 IPv4アドレスでrpcbindに繋ぎに行ったときにも ipv4-mapped IPv6 アドレスで 解釈されてしまう。結局、名前解決できず不明なホストとして リクエストに答えられずにおしまい。困り。
かといって、net.inet6.ip6.v6only=1 にすると、tcpserver で ホストアドレスを0にしても、IPv6アドレスしかLISTENしなくなってしまう。
悲しい。
結局、tcpserver を起動するスクリプトで一時的に net.inet6.ip6.v6only を書き換えることで対処。
/service/smtpd/run
#!/bin/sh v6only=`sysctl -n net.inet6.ip6.v6only` csh -c "(sleep 10; sysctl -w net.inet6.ip6.v6only=$v6only)&" sysctl -w net.inet6.ip6.v6only=0 exec env - \ PATH=/var/qmail/bin:/var/qmail/smtpd:/bin:/usr/bin:/usr/sbin:/usr/local/bin/DJBdns:/usr/local/bin/UCSPI:/usr/local/bin/Daemontools \ envuidgid qmaild softlimit -d250000 \ tcpserver -vR -c40 -U -x smtp.cdb 0 smtp qmail-smtpd 2>&1
て感じ。うーん、なんか違うような…