如何强制 rpcbind 使用 tcp 而不是 udp?

如何强制 rpcbind 使用 tcp 而不是 udp?

我尝试rpcbind在 Debian Wheezy 下使用 tcp/111 而不是 udp/111。Squeezeportmap中的 tcp/111 无需任何特殊配置即可使用,但 Wheezy 失败了。

甚至许多网站(以及 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
#

我该如何设置rpcbind才能仅使用 TCP?

答案1

如果使用 进行挂载,则查询实际挂载vers=3,proto=tcp时将使用 TCP :rpcbind

$ 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 实用程序showmount.c但之后就迷路了clnt_call(),抱歉。

相关内容