RFC 4173
Bootstrapping Clients using the Internet Small Computer System Interface (iSCSI) Protocol
RFC 4173: Bootstrapping Clients using the Internet Small Computer System Interface (iSCSI) Protocol π
Okay bestie, this is RFC 4173, and it's a Standards Track doc from September 2005 π The authors are P. Sarkar (IBM), D. Missimer (Hewlett-Packard Company), and C. Sapuntzakis (Stanford University). It's filed under Network Working Group. The title block doesn't list anything it obsoletes or updates, so it's standalone π§
Status of This Memo β¨
This document specifies an Internet standards track protocol for the Internet community, and it asks for discussion and suggestions for improvements. Check the current edition of "Internet Official Protocol Standards" (STD 1) for the standardization state and status of this protocol π Distribution of this memo is unlimited π
Copyright Notice π
Copyright (C) The Internet Society (2005).
Abstract π¦
Okay so iSCSI is a proposed transport protocol for SCSI that runs on top of TCP π₯ This memo describes a standard way for clients to bootstrap themselves using iSCSI. The goal is to let iSCSI boot clients get the info they need to open an iSCSI session with the iSCSI boot server. It's giving main character energy π
1. Introduction β¨
SCSI is a super popular family of protocols for talking to I/O devices, especially storage devices π You can describe it as a request/response messaging protocol with a standard architecture and componentized command sets for different device classes π
iSCSI is a proposed transport protocol for SCSI that runs on top of TCP π¦ It exists because the system interconnect moved from a shared bus to a switched network. IP networks meet the architectural and performance requirements for carrying SCSI, which paves the way for iSCSI πΈ
Lots of diskless clients bootstrap off remote SCSI devices π These diskless entities are lightweight, space efficient, and power-conserving, so they're getting more popular in all kinds of environments β¨
This memo describes a standard mechanism for clients to bootstrap themselves using iSCSI π The goal is to let iSCSI boot clients obtain the information needed to open an iSCSI session with the iSCSI boot server. Not all of that info may be available right at the start, so the memo describes steps for getting the information needed to bootstrap clients off an iSCSI boot server π«Ά
1.1. Keywords π
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 RFC 2119 [Bradner97] π
2. Requirements π
- There must be no restriction of network topology between the iSCSI boot client and the boot server, other than whatever is in effect for establishing the iSCSI session π¦ So an iSCSI boot client can boot from an iSCSI boot server behind gateways or firewalls, as long as it's possible to establish an iSCSI session between the client and the server β¨
- These are the minimum pieces of information an iSCSI boot client needs to contact an iSCSI boot server π: (a) the client's IP address (IPv6 or IPv4); (b) the server's iSCSI Target Name; and (c) mandatory iSCSI initiator capability π
The list above assumes that the default LUN for the boot process is 0, and that the default port for the iSCSI boot server is the well-known iSCSI port [Satran02] πΈ Both of those can be overridden at configuration time, though π§
Additional information may be required at each stage of the boot process π
- It's possible for the iSCSI boot client to have none of the above information or capability when it starts up π
- The client should be able to finish booting without user intervention (for boots that happen during an unattended power-up) π Even so, there should be a way for the user to input values so they can skip stages of the boot protocol π
- Additional protocol software (for example, BOOTP or DHCP) may be necessary if the minimum information required for an iSCSI session isn't provided π«Ά
3. Related Work πΈ
Okay, so RARP [Finlayson84] and its extension, Dynamic RARP (DRARP) [Brownell96], directly tackle network address discovery, and they include an automatic IP address assignment mechanism π¦ TFTP [Sollins81] handles transport of a boot image from a boot server β¨
BOOTP [Croft85, Reynolds93, Wimer93] is a transport mechanism for a collection of configuration information π It's also extensible, and official extensions exist for several configuration parameters π
DHCPv4 [Droms97, Droms93] and DHCPv6 [Droms02] are the standards for dynamically configuring hosts in an IP network π₯ SLP handles location of higher-level services [Guttman99] π
4. Software Stage π§
Some iSCSI boot clients might not have the resources to boot up with the mandatory iSCSI initiator capability π Those clients can choose to get iSCSI initiator software from a boot server π Lots of established protocols already support this kind of service so clients can load software images π For example, BOOTP and DHCP servers can give out the locations of servers that serve software images when boot clients ask π
Note that this document doesn't recommend any of the protocols above π«Ά Which boot protocol gets used to load iSCSI initiator software is left up to the implementor π¦
5. DHCP Stage π
To use an iSCSI boot server, the following pieces of information are required for an iSCSI boot client π
- The IP address of the iSCSI boot client (IPv4 or IPv6) πΈ
- The IP transport endpoint for the iSCSI Target Port on the iSCSI boot server. If the transport is TCP, for example, this has to resolve to an IP address and a TCP port number π TCP is currently the only transport approved for iSCSI π₯
- The eight-byte LUN structure that identifies the Logical Unit within the iSCSI boot server π§
At boot time, all or none of this information may be stored in the iSCSI boot client β¨ This section explains how to get the required information through the DHCP stage. If the iSCSI boot client already has all of the information, it can go straight to the Boot stage π
An iSCSI boot client that doesn't know its IP address at power-on can get it through BOOTP or DHCP (v4 or v6), or through IPv6 address autoconfiguration π¦ Heads up: DHCP settings (like the RA settings in DHCPv6) may prohibit using DHCP to distribute iSCSI boot information, and in that case the DHCP stage can't be used π
Unless this section says otherwise, BOOTP or DHCP fields like the client ID and gateway information are used the same way as they are for applications other than iSCSI π
A BOOTP or DHCP server (v4 or v6) MAY tell an iSCSI client how to reach its boot device π This happens through the variable-length option named Root Path [Alexander93, Reynolds93] π The option field is reserved for iSCSI boot use by putting iscsi: in front of the string π«Ά The Root Path option isn't currently defined for DHCPv6 πΈ If it does get defined for DHCPv6 later, the way the option is used for iSCSI boot will apply π
The option field is a UTF-8 [Yergeau98] string π It's built like this:
"iscsi:"<servername>":"<protocol>":"<port>":"<LUN>":"<targetname>
The fields "servername", "port", "protocol", and "LUN" are OPTIONAL and should be left blank when there are no corresponding values π The "targetname" field is not optional and MUST be provided π₯
The "servername" is the name of the iSCSI server, and it's either a valid domain name, a literal IPv4 address, or a literal IPv6 address π§ It must follow the specs in Section 3.2.2 of the URI Specification [Lee98] [Hinden99], and the allowed characters must conform to Section 2.2 of that same spec β¨ Servername compression MUST NOT be used in this field π
The "protocol" field is the decimal representation of the IANA-approved string for the transport protocol used for iSCSI π¦ If the protocol field is left blank, the default value is assumed to be "6" for TCP π The transport protocol MUST have been approved for use in iSCSI, and right now the only approved protocol is TCP π
The "port" is the decimal representation of the port the iSCSI boot server is listening on π If it's not specified, the port defaults to the well-known iSCSI port [Satran02] π
The "LUN" field is a hexadecimal representation of the LU number π«Ά If the LUN field is blank, then LUN 0 is assumed πΈ If the LUN field isn't blank, the representation MUST be divided into four groups of four hexadecimal digits, separated by "-" π Digits above 9 may be lowercase or uppercase π
Here's an example of that format: 4752-3A4F-6b7e-2F99 π For the sake of brevity, at most three leading zero ("0") digits MAY be omitted in any group of hexadecimal digits π§ So the LUN representation 6734-9-156f-127 is equivalent to 6734-0009-156f-0127 β¨ Trailing groups containing only the "0" digit MAY also be omitted, along with the "-" before them π So 4186-9 is equivalent to 4186-0009-0000-0000 π¦ Other concise representations of the LUN field MUST NOT be used π₯
Heads up: SCSI targets are allowed to present different LU numberings to different SCSI initiators π So as far as we know, nothing stops a SCSI target from exporting several different LUs to several different SCSI initiators, each as its own LUN 0 π
The "targetname" field is an iSCSI Name defined by the iSCSI standard [Satran02] to uniquely identify an iSCSI target π The approved characters for the targetname field are listed in the iSCSI String Profile document [Bakke04] π«Ά
If BOOTP or DHCP provides the "servername" field, that field gets used together with the other associated fields to contact the boot server in the Boot stage (Section 7) πΈ But if the "servername" field isn't provided, then the "targetname" field gets used in the Discovery Service stage, together with other associated fields (Section 6) πβ¨
6. Discovery Service Stage πβ¨
okay so this stage is required if the BOOTP or DHCP server (v4 or v6) doesn't know about any iSCSI boot servers, or if it can't give you the minimum info you need to connect to the iSCSI boot server, other than the targetname π₯Ί
the Discovery Service can be based on the SLP protocol [Guttman99, Bakke02], where it's an instantiation of the SLP Service or Directory Agent π or it can be based on the iSNS protocol [Tseng03], where it's an instantiation of the iSNS Server π§
the iSCSI boot client might already have the targetname of the iSCSI boot server from the DHCP stage (Section 5) π in that case, the client asks the SLP Discovery Service with query string 1 of the iSCSI Target Concrete Service Type Template, as specified in Section 6.2 of the iSCSI SLP interaction document [Bakke02], to turn that targetname into an IP address and port number π or it can send the iSNS Discovery Service a Device Attribute Query with the targetname as the query parameter [Tseng03]. once it has that, it moves on to the Boot stage (Section 7) π¦
β οΈ the port number from the Discovery Service might clash with the one from the DHCP stage π if that happens, the implementor gets to choose whether to try both port numbers in the Boot stage π«Ά
if the iSCSI boot client doesn't have any targetname info, it can ask the SLP Discovery Service with query string 4 of the iSCSI Target Concrete Service Type Template, as specified in Section 6.2 of the iSCSI SLP interaction document [Bakke02] πΈ the SLP Discovery Service then hands the boot client a list of iSCSI boot servers it's allowed to access π or, instead, the client can ask the iSNS Discovery Service whether the targets in a particular Discovery Domain are bootable [Tseng03] π
if that list of iSCSI boot servers is empty, what happens next is up to the implementor π otherwise the boot client may contact any iSCSI boot server on the list, and the order it reaches them in is also up to the implementor π
7. Boot Stage π
okay bestie, once the iSCSI boot client has the minimum info it needs to open an iSCSI session with the iSCSI boot server, the actual booting can start π
the exact sequence of iSCSI commands needed to finish booting is left to the implementor π this was done because different vendors and equipment have different requirements, so it would be super hard to pin down a common subset of the iSCSI standard that everybody would be happy with π©
the iSCSI session that was set up for boot may be taken over by the booted software in the iSCSI boot client β¨
8. Security Considerations ππ
the security discussion is all about keeping the communication safe during the iSCSI boot process π‘οΈ
BUT, the question of applying credentials to a boot image that gets loaded through the iSCSI boot mechanism is outside the scope of this document π one big difference between the iSCSI boot mechanism and BOOTP-based image loading is that the identity of a boot image may not be known when the Boot stage starts π³ the identity of certain boot images and where they live is only known after the contents of a boot disk exposed by the iSCSI boot service have been examined π§ and images can recursively load other images based on hardware configurations and user input, which is a whole chaotic situation π so a practical way to verify loaded boot images is to make sure that each image-loading software verifies the image it's about to load, using whatever mechanism it likes π«Ά
the considerations for designing a security architecture for the iSCSI boot process include configuration, deployment, and provisioning issues, on top of the typical security considerations π enabling iSCSI boot creates a critical operational dependence on an external system with obvious security implications, so administrator awareness of this is extremely important π¨ which is why iSCSI boot SHOULD NOT be enabled or put high in the boot order without an explicit administrative action π ββοΈ
in all phases of the boot process, a client must make sure that a server is authorized to send it certain information π§Ύ that means the authenticated identity of a server must come with an authorization indication β a list of authorized servers can be pre-configured into a client, or the list can be downloaded in an authenticated form from a prior stage in the boot process π₯
the software stage SHOULD NOT be involved in a secure iSCSI boot process π ββοΈ because doing so would add the extra complexity of trying to secure the process of loading the software needed to run the later stages of iSCSI boot π΅βπ« authentication and integrity protection of downloaded boot software has proven to be difficult and complex, thanks to administrative issues and the limitations of the BIOS environment π₯ so it's assumed that all the necessary software is already resident on the iSCSI boot client πΎ
π¨ if the DHCP stage is implemented using the DHCP protocol, the iSCSI boot client SHOULD implement the DHCP authentication ([Droms01], [Droms02] for IPv6) π in this case, an administration interface SHOULD be provided for configuring the DHCP authentication credentials, both when the network interface is on the motherboard and when it's removable π οΈ also, DHCP authentication ([Droms01],[Droms02] for IPv6) is focused on intra-domain authentication, which is assumed to be enough for iSCSI boot scenarios π in the context of the secure iSCSI boot process, the reply from the DHCP server in the DHCP stage SHOULD include the serverName in IPv4 (or IPv6) format, so there's no reliance on a DNS server for resolving names or a Discovery Service entity for looking up targetnames π this cuts down the number of entities involved in the secure iSCSI boot process π
if the Discovery Service stage is implemented using SLP, the iSCSI boot client SHOULD provide IPsec support (OPTIONAL to use) for the SLP protocol, as defined in [Bakke02] and [Aboba03] π if the Discovery Service stage is implemented using iSNS, the iSCSI boot client SHOULD provide IPsec support (OPTIONAL to use) for the iSNS protocol, as defined in [Tseng03] and [Aboba03] π when iSNS or SLP are used to distribute security policy or configuration information, at a minimum, per-packet data origin authentication, integrity, and replay protection SHOULD be used to protect the discovery protocol π‘οΈ
for the final communication between the iSCSI boot client and the iSCSI boot server in the Boot stage, IPsec and in-band authentication SHOULD be implemented according to the guidelines in the main iSCSI draft [Satran02] and [Aboba03] π due to memory constraints, it's expected that iSCSI boot clients will only support pre-shared key authentication in IKE π§ and where the host IP address is assigned dynamically, IKE main mode SHOULD NOT be used, as explained in [Satran02] and [Aboba03] π ββοΈ regardless of how the parameters from the previous stages (DHCP, SLP, iSNS) were obtained, securely or not, the iSCSI boot session is vulnerable just like any iSCSI session (see [Satran02] and [Aboba03] for iSCSI security threats) π± so security for this session SHOULD be configured and used according to the [Satran02] and [Aboba03] guidelines π«Ά
note, bestie: if a boot image inherits an iSCSI session from a previously loaded boot image, it also inherits the security properties of that iSCSI session π
Acknowledgements π·
we wish to thank John Hufferd for taking the initiative to form the iSCSI boot team π we also wish to thank Doug Otis, Julian Satran, Bernard Aboba, David Robinson, Mark Bakke, Ofer Biran, and Mallikarjun Chadalapaka for helpful suggestions and pointers regarding the draft document π₯°
Normative References π
[Aboba03] Aboba, B., Tseng, J., Walker, J., Rangan, V., and F.
Travostino, "Securing Block Storage Protocols over
IP", RFC 3723, April 2004.
[Alexander93] Alexander, S. and R. Droms, "DHCP Options and BOOTP
Vendor Extensions", RFC 2132, March 1997.
[Bakke02] Bakke, M., Hufferd, J., Voruganti, K., Krueger, M.,
and T. Sperry, "Finding Internet Small Computer
Systems Interface (iSCSI) Targets and Name Servers by
Using Service Location Protocol version 2 (SLPv2)",
RFC 4018, April 2005.
[Bakke04] Bakke, M., "String Profile for Internet Small Computer
Systems Interface (iSCSI) Names", RFC 3722, April
2004.
[Bradner97] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
[Croft85] Croft, W. and J. Gilmore, "Bootstrap Protocol", RFC
951, September 1985.
[Droms93] Droms, R., "Interoperation Between DHCP and BOOTP",
RFC 1534, October 1993.
[Droms97] Droms, R., "Dynamic Host Configuration Protocol", RFC
2131, March 1997.
[Droms01] Droms, R. and W. Arbaugh, "Authentication for DHCP
Messages", RFC 3118, June 2001.
[Droms02] Droms, R., Bound, J., Volz, B., Lemon, T., Perkins,
C., and M. Carney, "Dynamic Host Configuration
Protocol for IPv6 (DHCPv6)", RFC 3315, July 2003.
[Guttman99] Guttman, E., Perkins, C., Veizades, J., and M. Day,
"Service Location Protocol, Version 2", RFC 2608, June
1999.
[Hinden99] Hinden, R., Carpenter, B., and L. Masinter, "Format
for Literal IPv6 Addresses in URL's", RFC 2732,
December 1999.
[Lee98] Berners-Lee, T., Fielding, R., and L. Masinter,
"Uniform Resource Identifiers (URI): Generic Syntax",
RFC 2396, August 1998.
[Reynolds93] Reynolds, J., "BOOTP Vendor Information Extensions",
RFC 1497, August 1993.
[Satran02] Satran, J., Meth, K., Sapuntzakis, C., Chadalapaka,
M., and E. Zeidner, "Internet Small Computer Systems
Interface (iSCSI)", RFC 3720, April 2004.
[Tseng03] Tseng, J., Gibbons, K., Travostino, F., Du Laney, C.,
and J. Souza, "Internet Storage Name Service (iSNS)",
RFC 4171, April 2005.
[Yergeau98] Yergeau, F., "UTF-8, a transformation format of ISO
10646", STD 63, RFC 3629, November 2003.
[Wimer93] Wimer, W., "Clarifications and Extensions for the
Bootstrap Protocol", RFC 1542, October 1993.
Informative References π§Έ
[Brownell96] Brownell, D., "Dynamic RARP Extensions for Automatic
Network Address Acquisition", RFC 1931, April 1996.
[Finlayson84] Finlayson, R., Mann, T., Mogul, J., and M. Theimer,
"Reverse Address Resolution Protocol", STD 38, RFC
903, June 1984.
[Sollins81] Sollins, K., "The TFTP Protocol (Revision 2)", STD 33,
RFC 1350, July 1992.
Authors' Addresses β¨
Meet the squad behind this spec π Here's where to find them:
Prasenjit Sarkar
IBM Almaden Research Center
650 Harry Road
San Jose, CA 95120, USA
Phone: +1 408 927 1417
EMail: psarkar@almaden.ibm.com
Duncan Missimer
Hewlett-Packard Company
10955 Tantau Ave
Cupertino, CA 95014, USA
EMail: duncan.missimer@ieee.org
Constantine Sapuntzakis
Stanford University
353 Serra Hall #407
Stanford, CA 94305, USA
EMail: csapuntz@alum.mit.edu
Full Copyright Statement π
Okay, the legal bit, but make it cute π The Internet Society owns the copyright here, and it's dated 2005 πΈ
This document is still under the rights, licenses and restrictions in BCP 78. Outside of what BCP 78 says, the authors keep all their rights π«Ά
Now the important disclaimer, bestie π This document and everything in it is handed over "AS IS". The contributor, the organization they represent or are sponsored by (if any), the Internet Society, and the Internet Engineering Task Force all disclaim every warranty, whether it's express or implied. That includes, but isn't limited to, any promise that using the information won't infringe anyone's rights, and any implied warranty of merchantability or fitness for a particular purpose π
Intellectual Property π¦
The IETF doesn't take a side on whether any Intellectual Property Rights or other rights that someone might claim over the tech in this document are valid, or how wide they are π§ It also doesn't say whether any license for those rights is available, and it hasn't done its own digging to find out whether such rights exist π If you want the rules on rights in RFC documents, check out BCP 78 and BCP 79 β¨
IPR disclosures sent to the IETF Secretariat are a thing π¬ So are assurances that licenses will be available, plus the results of any attempt to get a general license or permission to use those proprietary rights for implementers or users of this spec. You can find all of that in the IETF online IPR repository at http://www.ietf.org/ipr π
The IETF also really wants to hear from you π If you know about any copyrights, patents, patent applications, or other proprietary rights that could cover tech you'd need to implement this standard, tell the IETF at ietf-ipr@ietf.org π
Acknowledgement πΈ
Huge thanks to the Internet Society, which currently funds the RFC Editor function π
π¦ where this page comes from
- ietf: rfc4173 2005-09
- π girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms