Internet DRAFT - draft-stefanha-nfsv4-rpc-over-vsock
draft-stefanha-nfsv4-rpc-over-vsock
Network File System Version 4 S. Hajnoczi, Ed.
Internet-Draft Red Hat, Inc.
Intended status: Informational November 23, 2017
Expires: May 27, 2018
Remote Procedure Call (RPC) over AF_VSOCK
draft-stefanha-nfsv4-rpc-over-vsock-00
Abstract
This document describes how to transfer Remote Procedure Call (RPC)
messages over AF_VSOCK sockets. This allows RPC services such as
Network File System (NFS) to operate over AF_VSOCK.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on May 27, 2018.
Copyright Notice
Copyright (c) 2017 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents
(https://trustee.ietf.org/license-info) in effect on the date of
publication of this document. Please review these documents
carefully, as they describe your rights and restrictions with respect
to this document. Code Components extracted from this document must
include Simplified BSD License text as described in Section 4.e of
the Trust Legal Provisions and are provided without warranty as
described in the Simplified BSD License.
Hajnoczi Expires May 27, 2018 [Page 1]
Internet-Draft Remote Procedure Call (RPC) over AF_VSOCK November 2017
Table of Contents
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
2. Status of AF_VSOCK . . . . . . . . . . . . . . . . . . . . . 2
3. Requirements Language . . . . . . . . . . . . . . . . . . . . 3
4. Intended Use . . . . . . . . . . . . . . . . . . . . . . . . 3
5. Network Addresses . . . . . . . . . . . . . . . . . . . . . . 4
6. Use of netids for AF_VSOCK . . . . . . . . . . . . . . . . . 4
7. Uaddr Format for AF_VSOCK . . . . . . . . . . . . . . . . . . 4
8. Record Marking on Connection-oriented Sockets . . . . . . . . 4
9. Security Considerations . . . . . . . . . . . . . . . . . . . 4
10. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 5
10.1. Netids for AF_VSOCK . . . . . . . . . . . . . . . . . . 5
10.2. Uaddr Format for AF_VSOCK . . . . . . . . . . . . . . . 6
11. References . . . . . . . . . . . . . . . . . . . . . . . . . 6
11.1. Normative References . . . . . . . . . . . . . . . . . . 6
11.2. Informative References . . . . . . . . . . . . . . . . . 6
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 7
1. Introduction
The AF_VSOCK address family facilitates socket communication between
a hypervisor and virtual machines running on the hypervisor. It was
implemented in Linux 3.9 with initial support for VMware. Further
hypervisor support was added for KVM and Hyper-V later. AF_VSOCK
services can run on any supported hypervisor because semantics remain
the same across hypervisors.
ONC RPC services are bound to transport addresses [RFC1833].
Transport addresses are described by network identifiers (netids) and
universal address strings. This standard representation of transport
addresses allows address information to be communicated between
client programs and RPC services, including the RPCBIND program.
It is necessary to define a network identifier and universal address
representation so that ONC RPC may be used over AF_VSOCK. This
document describes string representations for the AF_VSOCK netids and
universal addresses.
2. Status of AF_VSOCK
This section provides background information that may help reviewers
suggest how to proceed with this document. It is not intended to be
included unchanged in the final document.
The Linux AF_VSOCK address family does not have a specification
document. AF_VSOCK is purely an implementation that first became
available in Linux in 2013.
Hajnoczi Expires May 27, 2018 [Page 2]
Internet-Draft Remote Procedure Call (RPC) over AF_VSOCK November 2017
The Linux community generally uses VMware's AF_VSOCK driver as a
reference for how sockets should behave. This tends to mirror TCP
for SOCK_STREAM and UDP for SOCK_DGRAM so that porting applications
from AF_INET to AF_VSOCK is easy.
There is currently momentum towards creating a man page for AF_VSOCK
and a shared test suite. This will provide a stronger basis for both
users and implementors to work from in the future.
VMware has published reference documentation to their own API, which
is called vSockets and encompasses additional header files and APIs
not shipped as part of Linux. For the purposes of this document the
VMware material is out of scope but might be interesting to those
wishing to see a manual on using the vSockets technology that is
based on AF_VSOCK: https://code.vmware.com/doc/preview?id=5521.
This raises the question of how this document should reference
AF_VSOCK since no external document exists.
3. Requirements Language
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
document are to be interpreted as described in [RFC2119] [RFC8174]
when, and only when, they appear in all capitals, as shown here.
4. Intended Use
The intended use of RPC over AF_VSOCK is Network File System (NFS)
v4.1 [RFC5661] to export file systems from the hypervisor into
virtual machines. It is possible that other RPC services will also
be offered by hypervisors to virtual machines.
RPC services can also be provided by virtual machines to the host.
Such software is often called a guest agent.
The need for RPC over AF_VSOCK arises because management tools
require the ability to deploy RPC services for virtual machines in an
automated fashion. Existing TCP/IP network interface configuration,
including firewall configuration, is difficult to automate without
risk of interfering with the virtual machine owner's networking
configuration. AF_VSOCK provides a zero-configuration communications
channel with the dedicated purpose of communicating between a
hypervisor and virtual machines without these configuration
difficulties. This makes it possible to deploy RPC services without
requiring manual steps by hypervisor and virtual machine
administrators.
Hajnoczi Expires May 27, 2018 [Page 3]
Internet-Draft Remote Procedure Call (RPC) over AF_VSOCK November 2017
5. Network Addresses
AF_VSOCK addresses contain an unsigned 32-bit integer called the
Context Identifier (CID) that is the network address. An unsigned
32-bit integer port number acts as the transport selector so that
multiple services can be offered on a single network address.
CID values in the range [0, 2] are reserved. Virtual machines are
assigned values outside this range. The hypervisor has the well-
known CID value 2.
Ports in the range [0, 1023] are privileged and can only be bound by
programs that have sufficient privilege.
6. Use of netids for AF_VSOCK
Initial use of RPC over AF_VSOCK is expected to be over connection-
oriented sockets since NFS v4.1 [RFC5661] requires reliable, in-order
delivery offered by AF_VSOCK connection-oriented sockets. The
possibility of using datagram sockets in the future is acknowledged
by also reserving a netid for this purpose.
7. Uaddr Format for AF_VSOCK
The format of the uaddr for AF_VSOCK is the US-ASCII string:
cid.port
The "cid" prefix is the ASCII-decimal representation of the CID
network address. The "port" suffix is the ASCII-decimal
representation of the port number transport selector.
8. Record Marking on Connection-oriented Sockets
Connection-oriented AF_VSOCK sockets have in-order, guaranteed
delivery semantics. RPC messages must be delimited so that message
boundaries can be detected. The Record Marking Standard, defined in
[RFC5531], is used for this purpose since connection-oriented
AF_VSOCK sockets are byte streams.
9. Security Considerations
AF_VSOCK addresses are local to the hypervisor that the virtual
machine is running on. Traffic is point-to-point with no routing or
forwarding through components external to the hypervisor. This makes
AF_VSOCK traffic immune to eavesdropping, replay, message insertion,
deletion, modification, and man-in-the-middle attacks as long as the
virtual machine and hypervisor are not compromised.
Hajnoczi Expires May 27, 2018 [Page 4]
Internet-Draft Remote Procedure Call (RPC) over AF_VSOCK November 2017
Source address (CID) spoofing by the virtual machine is not possible
because the hypervisor enforces the virtual machine's assigned
address. RPC services running on the hypervisor MAY use the source
CID for authentication since it cannot be faked.
The privileged port range prevents unprivileged processes from
binding to low-numbered ports. The privileged port range is a scarce
resource but MAY be used to authenticate privileged processes. This
allows messages from unprivileged processes to be refused or treated
as unathenticated. In particular, RPC AUTH_UNIX authentication MUST
only be trusted when the RPC message was sent from a privileged port.
Only AUTH_NULL and AUTH_UNIX flavors are supported although [RFC5531]
states that "Standards Track RPC services MUST mandate support for
RPCSEC_GSS". Due to the point-to-point nature of AF_VSOCK described
above, there are different security considerations than for RPC
services deployed on the Internet or even on local networks. RPC
services provided by the hypervisor establish the identity of the
client by inspecting the source CID and port number. An NFS service
facilitates access to an exported file system for which the virtual
machine has authorization. The AUTH_UNIX uid and gid are used for
NFS file operations but do not give the client access to other
virtual machine's file systems. Therefore isolation can be achieved
with just AUTH_UNIX.
10. IANA Considerations
10.1. Netids for AF_VSOCK
IANA is asked to assign the following netids from the ONC RPC Netids
Registry [RFC5665] on a Standards Action basis:
+----------+-----------+------------------------------+------+------+
| Netid | Constant | RFC(s) and Description | PoC | CR |
| | Name | | | |
+----------+-----------+------------------------------+------+------+
| "vsockc" | NC_VSOCKC | Netid for AF_VSOCK | IESG | TBD1 |
| | | connection-oriented sockets. | | |
| | | Section 6 of this document. | | |
| "vsockd" | NC_VSOCKD | Netid for AF_VSOCK datagram | IESG | TBD1 |
| | | sockets. Section 6 of this | | |
| | | document. | | |
+----------+-----------+------------------------------+------+------+
PoC: Point of Contact. CR: Cross Reference to the Uaddr Format
Registry.
Table 1: Netids for AF_VSOCK
Hajnoczi Expires May 27, 2018 [Page 5]
Internet-Draft Remote Procedure Call (RPC) over AF_VSOCK November 2017
10.2. Uaddr Format for AF_VSOCK
IANA is asked to assign the following uaddr format from the ONC RPC
Uaddr Format Registry [RFC5665] on a Standards Action basis:
+-------+---------------------------------------------+------+------+
| Basis | Description and/or Reference | PoC | CR |
+-------+---------------------------------------------+------+------+
| STDS | Uaddr format for AF_VSOCK. Section 7 of | IESG | TBD1 |
| | this document. | | |
+-------+---------------------------------------------+------+------+
PoC: Point of Contact. CR: Cross Reference to the Uaddr Format
Registry.
Table 2: Uaddr format for AF_VSOCK
11. References
11.1. Normative References
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<http://www.rfc-editor.org/info/rfc2119>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <http://www.rfc-editor.org/info/rfc8174>.
11.2. Informative References
[RFC1833] Srinivasan, R., "Binding Protocols for ONC RPC Version 2",
RFC 1833, DOI 10.17487/RFC1833, August 1995,
<http://www.rfc-editor.org/info/rfc1833>.
[RFC5531] Thurlow, R., "RPC: Remote Procedure Call Protocol
Specification Version 2", RFC 5531, DOI 10.17487/RFC5531,
May 2009, <https://www.rfc-editor.org/info/rfc5531>.
[RFC5661] Shepler, S., Ed., Eisler, M., Ed., and D. Noveck, Ed.,
"Network File System (NFS) Version 4 Minor Version 1
Protocol", RFC 5661, DOI 10.17487/RFC5661, January 2010,
<https://www.rfc-editor.org/info/rfc5661>.
Hajnoczi Expires May 27, 2018 [Page 6]
Internet-Draft Remote Procedure Call (RPC) over AF_VSOCK November 2017
[RFC5665] Eisler, M., "IANA Considerations for Remote Procedure Call
(RPC) Network Identifiers and Universal Address Formats",
RFC 5665, DOI 10.17487/RFC5665, January 2010,
<https://www.rfc-editor.org/info/rfc5665>.
Author's Address
Stefan Hajnoczi (editor)
Red Hat, Inc.
100 East Davie Street
Raleigh, NC 27601
USA
Email: stefanha@redhat.com
Hajnoczi Expires May 27, 2018 [Page 7]