中治です。

NFSサーバは FreeBSD/i386 7-current
NFSクライアントは Solaris 10 8/07 (automount使用)

LANでローカルなDNSサーバを動かしており、互いにホスト名でIPv4/6アドレスを参
照できます。以下、IPv6アドレスだけ伏せ字にします。

クライアントで "ls /net/freebsd/home"を実行するとPermission deniedになり、
そのとき、サーバの /var/log/messages には

mountd[943]: mount request from 200x:**:5b57 from unprivileged port

と記録されます。また、クライアント側ではコンソールに

automountd[672]: freebsd:/home server not responding: RPC: 認証エラーです。; why = 
クライアントの資格が足りません。

と出ます。ところが、ホスト名ではなく、IPv4アドレスで接続するとエラーになり
ません。

## なので、実用上は困りません。^^;

client$ ls /net/192.168.111.63/home/ncvs
CVSROOT/      CVSROOT-ports/     CVSROOT-src/  doc/    projects/  src/
CVSROOT-doc/  CVSROOT-projects/  distrib/      ports/  root/      www/

サーバの/etc/exportsでは特にアクセス制限はせず、どこの誰でもread-onlyで使
えるように書いてあります。しかし、IPv6だとなぜかエラーになります。

$ cat /etc/exports
/home   -ro -maproot=nakaji

クライアントのSolarisは新規インストールで、NFSv4の設定も特に意識せず、デフォ
ルト設定だと思います。だから、Secure RPCが悪さしている可能性もあります。

Solaris 側の影響がとても大きいと思うのですが、このようなサーバ・クライアン
ト関係でIPv4/6を意識せずに使うためには、どうするのがよいでしょうか。

## 上記の通り、IPv4だと使えるので Solaris で/etc/hostsにサーバのIPv4アドレ
## スを書いておけばよいのですが…

念のために、クライアントで ls を実行したときの様子を tcpdump で見てみると、
IPv6のとき

12:27:54.393792 IP6 client.33872 > server.111: UDP, length 88
12:27:54.394126 IP6 server.111 > client.33872: UDP, length 52
12:27:54.394527 IP6 client.1190102800 > server.2049: 40 null
12:27:54.394591 IP6 server.2049 > client.1190102800: reply ok 24 null
12:27:54.396722 IP6 client.33873 > server.111: UDP, length 88
12:27:54.396996 IP6 server.111 > client.33873: UDP, length 156
12:27:54.398188 IP6 client.32896 > server.772: S 3021993911:3021993911(0) win 
50400 <mss 1440,nop,wscale 0,nop,nop,sackOK>
12:27:54.398226 IP6 server.772 > client.32896: S 687962190:687962190(0) ack 
3021993912 win 65535 <mss 1440,nop,wscale 8>
12:27:54.398480 IP6 client.32896 > server.772: . ack 1 win 50400
12:27:54.398634 IP6 client.32896 > server.772: P 1:45(44) ack 1 win 50400
12:27:54.399407 IP6 server.772 > client.32896: P 1:245(244) ack 45 win 258
12:27:54.399658 IP6 client.32896 > server.772: . ack 245 win 50400
12:27:54.399947 IP6 client.32896 > server.772: F 45:45(0) ack 245 win 50400
12:27:54.399998 IP6 server.772 > client.32896: . ack 46 win 258
12:27:54.400019 IP6 server.772 > client.32896: F 245:245(0) ack 46 win 258
12:27:54.400242 IP6 client.32896 > server.772: . ack 246 win 50400
12:27:54.402583 IP6 client.33874 > server.111: UDP, length 88
12:27:54.402902 IP6 server.111 > client.33874: UDP, length 52
12:27:54.403318 IP6 client.33874 > server.998: UDP, length 40
12:27:54.403990 IP6 server.998 > client.33874: UDP, length 24
12:27:54.404786 IP6 client.33874 > server.998: UDP, length 100
12:27:54.405448 IP6 server.998 > client.33874: UDP, length 20

となり、IPv4のとき

12:29:36.362814 IP 192.168.111.93.1013 > 192.168.111.63.2049: S 
3046952437:3046952437(0) win 49640 <mss 1460,nop,wscale 0,nop,nop,sackOK>
12:29:36.362863 IP 192.168.111.63.2049 > 192.168.111.93.1013: S 
709126372:709126372(0) ack 3046952438 win 65535 <mss 1460,nop,wscale 8>
12:29:36.363099 IP 192.168.111.93.1013 > 192.168.111.63.2049: . ack 1 win 49640
12:29:36.363393 IP 192.168.111.93.824803684 > 192.168.111.63.2049: 168 getattr 
[|nfs]
12:29:36.363469 IP 192.168.111.63.2049 > 192.168.111.93.824803684: reply ok 116 
getattr [|nfs]
12:29:36.363688 IP 192.168.111.93.1013 > 192.168.111.63.2049: . ack 117 win 
49640
12:29:36.364127 IP 192.168.111.93.824803685 > 192.168.111.63.2049: 168 getattr 
[|nfs]
12:29:36.364187 IP 192.168.111.63.2049 > 192.168.111.93.824803685: reply ok 116 
getattr [|nfs]
12:29:36.364421 IP 192.168.111.93.1013 > 192.168.111.63.2049: . ack 233 win 
49640

となっています。v4とv6でポート番号が違うのは、そういうものでしょうか。
-- 
NAKAJI Hiroyuki (中治 弘行)

メールによる返信