web-dev-qa-db-ja.com

rpcbindにudpの代わりにtcpを強制的に使用するにはどうすればよいですか?

Udp/111の代わりにDebianWheezyでrpcbindにtcp/111を使用しようとしています。 Squeezeのportmapは特別な設定なしでtcp/111を使用しますが、Wh​​eezyは失敗します。

多くのサイト(およびRFC)でさえ、TCPまたはUDPが動的に選択される、またはUDPが失敗した場合にTCPが使用される...-私がiptablesを使用してWheezyクライアントでudp/111(rpcbindを使用)を拒否すると、エラーが発生します。

# showmount -e server
Export list for server:
....
# iptables -I OUTPUT -j REJECT -d server -p udp --dport 111 --reject-with icmp-port-unreachable
# showmount -e server
clnt_create: RPC: Port mapper failure - Unable to send: errno 1 (Operation not permitted)
# rpcinfo -p
 program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
#

TCPのみ)を使用するようにrpcbindを設定するにはどうすればよいですか?

4
Matej Kovac

_vers=3,proto=tcp_でマウントする場合、実際のマウントをrpcbindに照会するときに、TCPが使用されます。

_$ tshark -nr nfs.pcap "tcp.stream eq 0"
 2  192.168.1.89 36200 192.168.1.60   111 TCP 74 [SYN]
 3  192.168.1.60   111 192.168.1.89 36200 TCP 74 [SYN, ACK]
 4  192.168.1.89 36200 192.168.1.60   111 TCP 66 [ACK]
 5  192.168.1.89 36200 192.168.1.60   111 Portmap 126 V2 GETPORT Call
 6  192.168.1.60   111 192.168.1.89 36200 TCP 66 [ACK]
 7  192.168.1.60   111 192.168.1.89 36200 Portmap 98 V2 GETPORT Reply (Call In 5)
 8  192.168.1.89 36200 192.168.1.60   111 TCP 66 [ACK]
 9  192.168.1.89 36200 192.168.1.60   111 TCP 66 [FIN, ACK]
10  192.168.1.60   111 192.168.1.89 36200 TCP 66 [FIN, ACK]
11  192.168.1.89 36200 192.168.1.60   111 TCP 66 [ACK]
_

showmountがUDPを使用するようにハードコードされているとしか思えません。 nfs-utils のソースを読み取ろうとしましたが、clnt_call()の後の_showmount.c_で失われました。申し訳ありません。

1
suprjami