1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
|
Independent Submission S. Cheshire
Request for Comments: 6886 M. Krochmal
Category: Informational Apple Inc.
ISSN: 2070-1721 April 2013
NAT Port Mapping Protocol (NAT-PMP)
Abstract
This document describes a protocol for automating the process of
creating Network Address Translation (NAT) port mappings. Included
in the protocol is a method for retrieving the external IPv4 address
of a NAT gateway, thus allowing a client to make its external IPv4
address and port known to peers that may wish to communicate with it.
From 2005 onwards, this protocol was implemented in Apple products
including Mac OS X, Bonjour for Windows, and AirPort wireless base
stations. In 2013, NAT Port Mapping Protocol (NAT-PMP) was
superseded by the IETF Standards Track RFC "Port Control Protocol
(PCP)", which builds on NAT-PMP and uses a compatible packet format,
but adds a number of significant enhancements.
Status of This Memo
This document is not an Internet Standards Track specification; it is
published for informational purposes.
This is a contribution to the RFC Series, independently of any other
RFC stream. The RFC Editor has chosen to publish this document at
its discretion and makes no statement about its value for
implementation or deployment. Documents approved for publication by
the RFC Editor are not a candidate for any level of Internet
Standard; see Section 2 of RFC 5741.
Information about the current status of this document, any errata,
and how to provide feedback on it may be obtained at
http://www.rfc-editor.org/info/rfc6886.
Copyright Notice
Copyright (c) 2013 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
(http://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.
Cheshire & Krochmal Informational [Page 1]
^L
RFC 6886 NAT-PMP April 2013
Table of Contents
1. Introduction ....................................................3
1.1. Transition to Port Control Protocol ........................4
2. Conventions and Terminology Used in This Document ...............5
3. Protocol and Packet Format ......................................5
3.1. Requests and Responses .....................................6
3.2. Determining the External Address ...........................7
3.3. Requesting a Mapping ......................................10
3.4. Destroying a Mapping ......................................13
3.5. Result Codes ..............................................14
3.6. Seconds Since Start of Epoch ..............................16
3.7. Recreating Mappings on NAT Gateway Reboot .................16
3.8. NAT Gateways with NAT Function Disabled ...................18
3.9. All Mappings Are Bidirectional ............................19
4. UNSAF Considerations ...........................................20
4.1. Scope .....................................................20
4.2. Transition Plan ...........................................20
4.3. Failure Cases .............................................21
4.4. Long-Term Solution ........................................23
4.5. Existing Deployed NATs ....................................23
5. Security Considerations ........................................23
6. IANA Considerations ............................................24
7. Acknowledgments ................................................24
8. Deployment History .............................................25
9. Noteworthy Features of NAT Port Mapping Protocol and PCP .......26
9.1. Simplicity ................................................27
9.2. Focused Scope .............................................27
9.3. Efficiency ................................................27
9.4. Atomic Allocation Operations ..............................29
9.5. Garbage Collection ........................................29
9.6. State Change Announcements ................................30
9.7. Soft State Recovery .......................................31
9.8. On-Path NAT Discovery .....................................31
10. References ....................................................32
10.1. Normative References .....................................32
10.2. Informative References ...................................32
Cheshire & Krochmal Informational [Page 2]
^L
RFC 6886 NAT-PMP April 2013
1. Introduction
Network Address Translation (NAT) is a method of sharing one public
Internet address with a number of devices. This document is focused
on devices that are formally classified as "NAPTs" (Network
Address/Port Translators) [RFC2663]. A full description of NAT is
beyond the scope of this document. The following brief overview will
cover the aspects relevant to this port mapping protocol. For more
information on NAT, see "Traditional IP Network Address Translator
(Traditional NAT)" [RFC3022].
NATs have one or more external IP addresses. A private network is
set up behind the NAT. Client devices on that private network behind
the NAT are assigned private addresses, and those client devices use
the private address of the NAT device as their default gateway.
When a packet from any device behind the NAT is sent to an address on
the public Internet, the packet first passes through the NAT box.
The NAT box looks at the source port and address. In some cases, a
NAT will also keep track of the destination port and address. The
NAT then creates a mapping from the internal address and internal
port to an external address and external port if a mapping does not
already exist.
The NAT box replaces the internal address and port in the packet with
the external entries from the mapping and sends the packet on to the
next gateway.
When a packet from any address on the Internet is received on the
NAT's external side, the NAT will look up the destination address and
port (external address and port) in the list of mappings. If an
entry is found, it will contain the internal address and port to
which the packet should be sent. The NAT gateway will then rewrite
the destination address and port with those from the mapping. The
packet will then be forwarded to the new destination addresses. If
the packet did not match any mapping, the packet will most likely be
dropped. Various NATs implement different strategies to handle this.
The important thing to note is that if there is no mapping, the NAT
does not know to which internal address the packet should be sent.
Mappings are usually created automatically as a result of observing
outbound packets. There are a few exceptions. Some NATs may allow
manually created permanent mappings that map an external port to a
specific internal IP address and port. Such a mapping allows
incoming connections to the device with that internal address. Some
NATs also implement a default mapping where any inbound packet that
Cheshire & Krochmal Informational [Page 3]
^L
RFC 6886 NAT-PMP April 2013
does not match any other more specific mapping will be forwarded to a
specified internal address. Both types of mappings are usually set
up manually through some configuration tool. Such manual
configuration of port mappings is unreasonably onerous for most
residential NAT users.
Without these manually created inbound port mappings, clients behind
the NAT would be unable to receive inbound connections, which
represents a loss of connectivity when compared to the original
Internet architecture [ETEAISD]. For those who view this loss of
connectivity as a bad thing, NAT-PMP allows clients to operate more
like a host directly connected to the unrestricted public Internet,
with an unrestricted public IPv4 address. NAT-PMP allows client
hosts to communicate with the NAT gateway to request the creation of
inbound mappings on demand. Having created a NAT mapping to allow
inbound connections, the client can then record its external IPv4
address and external port in a public registry (e.g., the worldwide
Domain Name System) or otherwise make it accessible to peers that
wish to communicate with it.
1.1. Transition to Port Control Protocol
NAT-PMP enjoyed almost a decade of useful service, and operational
experience with NAT-PMP informed the design of its IETF Standards
Track successor, Port Control Protocol (PCP) [RFC6887]. PCP builds
on NAT-PMP, using the same UDP ports 5350 and 5351, and a compatible
packet format. PCP also adds significant enhancements, including
IPv6 support, management of outbound mappings, management of firewall
rules, full compatibility with large-scale NATs with a pool of
external addresses, error lifetimes, and an extension mechanism to
enable future enhancements.
Because of the significant enhancements in PCP, all existing NAT-PMP
implementations are encouraged to migrate to PCP. The version number
in the packet header is 0 for NAT-PMP and 2 for PCP, so the packets
are easily distinguished. (Version number 1 was used by a vendor
that shipped products that use a protocol that is incompatible with
the IETF Standard. PCP implementations MUST NOT use version
number 1.)
For NAT-PMP servers, adding PCP support is simple. When packets are
received, if the version number is 2, then the packet is interpreted
as a PCP request, the request is handled, and replies and updates
pertaining to that mapping are sent using PCP format. If the version
number is 0, then the existing code handles the request exactly as it
already does, and replies and updates pertaining to that mapping are
Cheshire & Krochmal Informational [Page 4]
^L
RFC 6886 NAT-PMP April 2013
sent using NAT-PMP format. If the version number is 1 or any other
unsupported version, then result code 1 (Unsupported Version) is
returned.
NAT-PMP clients should add PCP support, and should default to sending
requests using PCP format, which will cause clients to prefer the
newer format when possible. If a PCP request is sent to an old
NAT-PMP server that doesn't understand the new PCP format, then it
will return result code 1 (Unsupported Version), and the client
should then immediately retry the same request using NAT-PMP format.
The presence of the Unsupported Version reply allows fast fail-over
to NAT-PMP format, without waiting for timeouts, retransmissions, or
other arbitrary delays. It is recommended that clients always try
PCP first for every new request, retransmission, and renewal, and
only try NAT-PMP in response to an "Unsupported Version" error.
Clients SHOULD NOT record that a given server only speaks NAT-PMP and
subsequently default to NAT-PMP for that server, since NAT firmware
gets updated, and even a NAT gateway that speaks only NAT-PMP today,
may be updated to speak PCP tomorrow.
2. Conventions and Terminology Used in This Document
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 "Key words for use in
RFCs to Indicate Requirement Levels" [RFC2119].
3. Protocol and Packet Format
The NAT Port Mapping Protocol runs over UDP. Every packet starts
with an 8-bit version followed by an 8-bit operation code.
All numeric quantities in NAT-PMP larger than a single byte (e.g.,
error values, Seconds Since Start of Epoch, and mapping lifetime) are
transmitted in the traditional IETF network byte order (i.e., most
significant byte first).
Non-numeric quantities in NAT-PMP larger than a single byte (e.g.,
the NAT gateway's external IP address) are transmitted in the natural
byte order, with no byte swapping.
This document specifies version 0 of the protocol. Any NAT-PMP
gateway implementing this version of the protocol, receiving a
request with a version number other than 0, MUST return result code 1
(Unsupported Version), indicating the highest version number it does
support (i.e., 0) in the version field of the response.
Cheshire & Krochmal Informational [Page 5]
^L
RFC 6886 NAT-PMP April 2013
Opcodes between 0 and 127 are client requests. Opcodes from 128 to
255 are corresponding server responses. Responses always contain a
16-bit result code in network byte order. A result code of zero
indicates success. Responses also contain a 32-bit unsigned integer
corresponding to the number of seconds since the NAT gateway was
rebooted or since its port mapping state was otherwise reset.
This protocol SHOULD only be used when the client determines that its
primary IPv4 address is in one of the private IPv4 address ranges
defined in "Address Allocation for Private Internets" [RFC1918].
This includes the address ranges 10/8, 172.16/12, and 192.168/16.
Clients always send their NAT-PMP requests to their default gateway,
as learned via DHCP [RFC2131], or similar means. This protocol is
designed for small home networks, with a single logical link (subnet)
where the client's default gateway is also the NAT for that network.
For more complicated networks where the NAT is some device other than
the client's default gateway, this protocol is not appropriate.
3.1. Requests and Responses
NAT gateways are often low-cost devices, with limited memory and CPU
speed. For this reason, to avoid making excessive demands on the NAT
gateway, clients SHOULD NOT issue multiple concurrent requests. If a
client needs to perform multiple requests (e.g., on boot, wake from
sleep, network connection, etc.), it SHOULD queue them and issue them
serially, one at a time. Once the NAT gateway responds to one
request the client machine may issue the next. In the case of a fast
NAT gateway, the client may be able to complete requests at a rate of
hundreds per second. In the case of a slow NAT gateway that takes
perhaps half a second to respond to a NAT-PMP request, the client
SHOULD respect this and allow the NAT gateway to operate at the pace
it can manage, and not overload it by issuing requests faster than
the rate it's answering them.
To determine the external IPv4 address, or to request a port mapping,
a NAT-PMP client sends its request packet to port 5351 of its
configured gateway address, and waits 250 ms for a response. If no
NAT-PMP response is received from the gateway after 250 ms, the
client retransmits its request and waits 500 ms. The client SHOULD
repeat this process with the interval between attempts doubling each
time. If, after sending its ninth attempt (and then waiting for 64
seconds), the client has still received no response, then it SHOULD
conclude that this gateway does not support NAT Port Mapping Protocol
and MAY log an error message indicating this fact. In addition, if
the NAT-PMP client receives an "ICMP Port Unreachable" message from
Cheshire & Krochmal Informational [Page 6]
^L
RFC 6886 NAT-PMP April 2013
the gateway for port 5351, then it can skip any remaining
retransmissions and conclude immediately that the gateway does not
support NAT-PMP.
As a performance optimization the client MAY record this information
and use it to suppress further attempts to use NAT-PMP, but the
client should not retain this information for too long. In
particular, any event that may indicate a potential change of gateway
or a change in gateway configuration (hardware link change
indication, change of gateway MAC address, acquisition of new DHCP
lease, receipt of NAT-PMP announcement packet from gateway, etc.)
should cause the client to discard its previous information regarding
the gateway's lack of NAT-PMP support, and send its next NAT-PMP
request packet normally.
When deleting a port mapping, the client uses the same initial 250 ms
timeout, doubling on each successive interval, except that clients
may choose not to try the full nine times before giving up. This is
because mapping deletion requests are in some sense advisory. They
are useful for efficiency, but not required for correctness; it is
always possible for client software to crash, or for power to fail,
or for a client device to be physically unplugged from the network
before it gets a chance to send its mapping deletion request(s), so
NAT gateways already need to cope with this case. Because of this,
it may be acceptable for a client to retry only once or twice before
giving up on deleting its port mapping(s), but a client SHOULD always
send at least one deletion request whenever possible, to reduce the
amount of stale state that accumulates on NAT gateways.
A client need not continue trying to delete a port mapping after the
time when that mapping would naturally have expired anyway.
3.2. Determining the External Address
To determine the external address, the client behind the NAT sends
the following UDP payload to port 5351 of the configured gateway
address:
0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Vers = 0 | OP = 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Cheshire & Krochmal Informational [Page 7]
^L
RFC 6886 NAT-PMP April 2013
A compatible NAT gateway MUST generate a response with the following
format:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Vers = 0 | OP = 128 + 0 | Result Code (net byte order) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Seconds Since Start of Epoch (in network byte order) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| External IPv4 Address (a.b.c.d) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
This response indicates that the NAT gateway implements this version
of the protocol, and returns the external IPv4 address of the NAT
gateway. If the result code is non-zero, the value of the External
IPv4 Address field is undefined (MUST be set to zero on transmission,
and MUST be ignored on reception).
The NAT gateway MUST fill in the Seconds Since Start of Epoch field
with the time elapsed since its port mapping table was initialized on
startup, or reset for any other reason (see Section 3.6, "Seconds
Since Start of Epoch").
Upon receiving a response packet, the client MUST check the source IP
address, and silently discard the packet if the address is not the
address of the gateway to which the request was sent.
3.2.1. Announcing Address Changes
Upon boot, acquisition of an external IPv4 address, subsequent change
of the external IPv4 address, reboot, or any other event that may
indicate possible loss or change of NAT mapping state, the NAT
gateway MUST send a gratuitous response to the link-local multicast
address 224.0.0.1, port 5350, with the packet format above, to notify
clients of the external IPv4 address and Seconds Since Start of
Epoch.
To accommodate packet loss, the NAT gateway SHOULD multicast 10
address notifications. The interval between the first two
notifications SHOULD be 250 ms, and the interval between each
subsequent notification SHOULD double. The Seconds Since Start of
Epoch field in each transmission MUST be updated appropriately to
reflect the passage of time, so as not to trigger unnecessary
additional mapping renewals (see Section 3.7, "Recreating Mappings on
NAT Gateway Reboot").
Cheshire & Krochmal Informational [Page 8]
^L
RFC 6886 NAT-PMP April 2013
Upon receiving a gratuitous address announcement packet, the client
MUST check the source IP address, and silently discard the packet if
the address is not the address of the client's current configured
gateway. This is to guard against inadvertent misconfigurations
where there may be more than one NAT gateway active on the network.
If the source IP address is correct, then the Seconds Since Start of
Epoch field is checked as described in Section 3.6, and if the value
is outside the expected plausible range, indicating that a NAT
gateway state loss has occurred, then the NAT-PMP client promptly
recreates all its active port mapping leases, as described in Section
3.7, "Recreating Mappings on NAT Gateway Reboot".
IMPLEMENTATION NOTE: Earlier implementations of NAT-PMP used UDP port
5351 as the destination both for client requests (address and port
mapping) and for address announcements. NAT-PMP servers would listen
on UDP 5351 for client requests, and NAT-PMP clients would listen on
UDP 5351 for server announcements. However, implementers encountered
difficulties when a single device is acting in both roles, for
example, a home computer with Internet Sharing enabled. This
computer is acting in the role of NAT-PMP server to its DHCP clients,
yet, at the same time, it has to act in the role of NAT-PMP client in
order to determine whether it is, itself, behind another NAT gateway.
While in principle it might be possible on some operating systems for
two processes to coordinate sharing of a single UDP port, on many
platforms this is difficult or even impossible, so, for pragmatic
engineering reasons, it is convenient to have clients listen on UDP
5350 and servers listen on UDP 5351.
IMPLEMENTATION NOTE: A given host may have more than one independent
NAT-PMP client running at the same time, and address announcements
need to be available to all of them. Clients should therefore set
the SO_REUSEPORT option or equivalent in order to allow other
processes to also listen on port 5350. Additionally, implementers
have encountered issues when one or more processes on the same device
listen to port 5350 on *all* addresses. Clients should therefore
bind specifically to 224.0.0.1:5350, not to 0.0.0.0:5350.
Cheshire & Krochmal Informational [Page 9]
^L
RFC 6886 NAT-PMP April 2013
3.3. Requesting a Mapping
To create a mapping, the client sends a UDP packet to port 5351 of
the gateway's internal IP address with the following format:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Vers = 0 | OP = x | Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internal Port | Suggested External Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Requested Port Mapping Lifetime in Seconds |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Opcodes supported:
1 - Map UDP
2 - Map TCP
The Reserved field MUST be set to zero on transmission and MUST be
ignored on reception.
The Ports and Lifetime are transmitted in the traditional network
byte order (i.e., most significant byte first).
The Internal Port is set to the local port on which the client is
listening.
If the client would prefer to have a high-numbered "anonymous"
external port assigned, then it should set the Suggested External
Port to zero, which indicates to the gateway that it should allocate
a high-numbered port of its choosing. If the client would prefer
instead to have the mapped external port be the same as its local
internal port if possible (e.g., a web server listening on port 80
that would ideally like to have external port 80), then it should set
the Suggested External Port to the desired value. However, the
gateway is not obliged to assign the port suggested, and may choose
not to, either for policy reasons (e.g., port 80 is reserved and
clients may not request it) or because that port has already been
assigned to some other client. Because of this, some product
developers have questioned the value of having the Suggested External
Port field at all. The reason is for failure recovery. Most low-
cost home NAT gateways do not record temporary port mappings in
persistent storage, so if the gateway crashes or is rebooted, all the
mappings are lost. A renewal packet is formatted identically to an
initial mapping request packet, except that for renewals the client
sets the Suggested External Port field to the port the gateway
actually assigned, rather than the port the client originally wanted.
Cheshire & Krochmal Informational [Page 10]
^L
RFC 6886 NAT-PMP April 2013
When a freshly rebooted NAT gateway receives a renewal packet from a
client, it appears to the gateway just like an ordinary initial
request for a port mapping, except that in this case the Suggested
External Port is likely to be one that the NAT gateway *is* willing
to allocate (it allocated it to this client right before the reboot,
so it should presumably be willing to allocate it again). This
improves the stability of external ports across NAT gateway restarts.
The RECOMMENDED Port Mapping Lifetime is 7200 seconds (two hours).
After sending the port mapping request, the client then waits for the
NAT gateway to respond. If after 250 ms the client hasn't received a
response from the gateway, the client SHOULD reissue its request as
described above in Section 3.1, "Requests and Responses".
The NAT gateway responds with the following packet format:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Vers = 0 | OP = 128 + x | Result Code |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Seconds Since Start of Epoch |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Internal Port | Mapped External Port |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Port Mapping Lifetime in Seconds |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The epoch time, ports, and lifetime are transmitted in the
traditional network byte order (i.e., most significant byte first).
The 'x' in the OP field MUST match what the client requested. Some
NAT gateways are incapable of creating a UDP port mapping without
also creating a corresponding TCP port mapping, and vice versa, and
these gateways MUST NOT implement NAT Port Mapping Protocol until
this deficiency is fixed. A NAT gateway that implements this
protocol MUST be able to create TCP-only and UDP-only port mappings.
If a NAT gateway silently creates a pair of mappings for a client
that only requested one mapping, then it may expose that client to
receiving inbound UDP packets or inbound TCP connection requests that
it did not ask for and does not want.
While a NAT gateway MUST NOT automatically create mappings for TCP
when the client requests UDP, and vice versa, the NAT gateway MUST
reserve the companion port so the same client can choose to map it in
the future. For example, if a client requests to map TCP port 80,
Cheshire & Krochmal Informational [Page 11]
^L
RFC 6886 NAT-PMP April 2013
as long as the client maintains the lease for that TCP port mapping,
another client with a different internal IP address MUST NOT be able
to successfully acquire the mapping for UDP port 80.
The client normally requests the external port matching the internal
port. If that external port is not available, the NAT gateway MUST
return an available external port if possible, or return an error
code if no external ports are available.
The source address of the packet MUST be used for the internal
address in the mapping. This protocol is not intended to facilitate
one device behind a NAT creating mappings for other devices. If
there are legacy devices that require inbound mappings, permanent
mappings can be created manually by the user through an
administrative interface, just as they are today.
If a mapping already exists for a given internal address and port
(whether that mapping was created explicitly using NAT-PMP,
implicitly as a result of an outgoing TCP SYN packet, or manually by
a human administrator) and that client requests another mapping for
the same internal port (possibly requesting a different external
port), then the mapping request should succeed, returning the
already-assigned external port. This is necessary to handle the case
where a client requests a mapping with suggested external port X, and
is granted a mapping with actual external port Y, but the
acknowledgment packet gets lost. When the client retransmits its
mapping request, it should get back the same positive acknowledgment
as was sent (and lost) the first time.
The NAT gateway MUST NOT accept mapping requests destined to the NAT
gateway's external IP address or received on its external network
interface. Only packets received on the internal interface(s) with a
destination address matching the internal address(es) of the NAT
gateway should be allowed.
The NAT gateway MUST fill in the Seconds Since Start of Epoch field
with the time elapsed since its port mapping table was initialized on
startup or reset for any other reason (see Section 3.6, "Seconds
Since Start of Epoch").
The Port Mapping Lifetime is an unsigned integer in seconds. The NAT
gateway MAY reduce the lifetime from what the client requested. The
NAT gateway SHOULD NOT offer a lease lifetime greater than that
requested by the client.
Upon receiving the response packet, the client MUST check the source
IP address, and silently discard the packet if the address is not the
address of the gateway to which the request was sent.
Cheshire & Krochmal Informational [Page 12]
^L
RFC 6886 NAT-PMP April 2013
The client SHOULD begin trying to renew the mapping halfway to expiry
time, like DHCP. The renewal packet should look exactly the same as
a request packet, except that the client SHOULD set the Suggested
External Port to what the NAT gateway previously mapped, not what the
client originally suggested. As described above, this enables the
gateway to automatically recover its mapping state after a crash or
reboot.
3.4. Destroying a Mapping
A mapping may be destroyed in a variety of ways. If a client fails
to renew a mapping, then at the time its lifetime expires, the
mapping MUST be automatically deleted. In the common case where the
gateway device is a combined DHCP server and NAT gateway, when a
client's DHCP address lease expires, the gateway device MAY
automatically delete any mappings belonging to that client.
Otherwise, a new client being assigned the same IP address could
receive unexpected inbound UDP packets or inbound TCP connection
requests that it did not ask for and does not want.
A client MAY also send an explicit packet to request deletion of a
mapping that is no longer needed. A client requests explicit
deletion of a mapping by sending a message to the NAT gateway
requesting the mapping, with the Requested Lifetime in Seconds set to
zero. The Suggested External Port MUST be set to zero by the client
on sending, and MUST be ignored by the gateway on reception.
When a mapping is destroyed successfully as a result of the client
explicitly requesting the deletion, the NAT gateway MUST send a
response packet that is formatted as defined in Section 3.3,
"Requesting a Mapping". The response MUST contain a result code of
0, the internal port as indicated in the deletion request, an
external port of 0, and a lifetime of 0. The NAT gateway MUST
respond to a request to destroy a mapping that does not exist as if
the request were successful. This is because of the case where the
acknowledgment is lost, and the client retransmits its request to
delete the mapping. In this case, the second request to delete the
mapping MUST return the same response packet as the first request.
If the deletion request was unsuccessful, the response MUST contain a
non-zero result code and the requested mapping; the lifetime is
undefined (MUST be set to zero on transmission, and MUST be ignored
on reception). If the client attempts to delete a port mapping that
was manually assigned by some kind of configuration tool, the NAT
gateway MUST respond with a "Not Authorized" error, result code 2.
Cheshire & Krochmal Informational [Page 13]
^L
RFC 6886 NAT-PMP April 2013
When a mapping is destroyed as a result of its lifetime expiring or
for any other reason, if the NAT gateway's internal state indicates
that there are still active TCP connections traversing that now-
defunct mapping, then the NAT gateway SHOULD send appropriately
constructed TCP RST (reset) packets both to the local client and to
the remote peer on the Internet to terminate that TCP connection.
A client can request the explicit deletion of all its UDP or TCP
mappings by sending the same deletion request to the NAT gateway with
the external port, internal port, and lifetime set to zero. A client
MAY choose to do this when it first acquires a new IP address in
order to protect itself from port mappings that were performed by a
previous owner of the IP address. After receiving such a deletion
request, the gateway MUST delete all its UDP or TCP port mappings
(depending on the opcode). The gateway responds to such a deletion
request with a response as described above, with the internal port
set to zero. If the gateway is unable to delete a port mapping, for
example, because the mapping was manually configured by the
administrator, the gateway MUST still delete as many port mappings as
possible, but respond with a non-zero result code. The exact result
code to return depends on the cause of the failure. If the gateway
is able to successfully delete all port mappings as requested, it
MUST respond with a result code of zero.
3.5. Result Codes
Currently defined result codes:
0 - Success
1 - Unsupported Version
2 - Not Authorized/Refused
(e.g., box supports mapping, but user has turned feature off)
3 - Network Failure
(e.g., NAT box itself has not obtained a DHCP lease)
4 - Out of resources
(NAT box cannot create any more mappings at this time)
5 - Unsupported opcode
Cheshire & Krochmal Informational [Page 14]
^L
RFC 6886 NAT-PMP April 2013
If the version in the request is not zero, then the NAT-PMP server
MUST return the following "Unsupported Version" error response to the
client:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Vers = 0 | OP = 0 | Result Code = 1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Seconds Since Start of Epoch (in network byte order) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
If the opcode in the request is 128 or greater, then this is not a
request; it's a response, and the NAT-PMP server MUST silently ignore
it. Otherwise, if the opcode in the request is less than 128, but is
not a supported opcode (currently 0, 1, or 2), then the entire
request MUST be returned to the sender, with the top bit of the
opcode set (to indicate that this is a response) and the result code
set to 5 (Unsupported opcode).
For version 0 and a supported opcode (0, 1, or 2), if the operation
fails for some reason (Not Authorized, Network Failure, or Out of
resources), then a valid response MUST be sent to the client, with
the top bit of the opcode set (to indicate that this is a response)
and the result code set appropriately. Other fields in the response
MUST be set appropriately. Specifically:
o Seconds Since Start of Epoch MUST be set correctly
o The External IPv4 Address should be set to the correct address, or
to 0.0.0.0, as appropriate.
o The Internal Port MUST be set to the client's requested Internal
Port. This is particularly important, because the client needs
this information to identify which request suffered the failure.
o The Mapped External Port and Port Mapping Lifetime MUST be set
appropriately -- i.e., zero if no successful port mapping was
created.
Should future NAT-PMP opcodes be defined, their error responses MUST
similarly be specified to include sufficient information to identify
which request suffered the failure. By design, NAT-PMP messages do
not contain any transaction identifiers. All NAT-PMP messages are
idempotent and self-describing; therefore, the specifications of
future NAT-PMP messages need to include enough information for their
responses to be self-describing.
Cheshire & Krochmal Informational [Page 15]
^L
RFC 6886 NAT-PMP April 2013
Clients MUST be able to properly handle result codes not defined in
this document. Undefined results codes MUST be treated as fatal
errors of the request.
3.6. Seconds Since Start of Epoch
Every packet sent by the NAT gateway includes a Seconds Since Start
of Epoch (SSSoE) field. If the NAT gateway resets or loses the state
of its port mapping table, due to reboot, power failure, or any other
reason, it MUST reset its epoch time and begin counting SSSoE from
zero again. Whenever a client receives any packet from the NAT
gateway, either unsolicited or in response to a client request, the
client computes its own conservative estimate of the expected SSSoE
value by taking the SSSoE value in the last packet it received from
the gateway and adding 7/8 (87.5%) of the time elapsed according to
the client's local clock since that packet was received. If the
SSSoE in the newly received packet is less than the client's
conservative estimate by more than 2 seconds, then the client
concludes that the NAT gateway has undergone a reboot or other loss
of port mapping state, and the client MUST immediately renew all its
active port mapping leases as described in Section 3.7, "Recreating
Mappings on NAT Gateway Reboot".
3.7. Recreating Mappings on NAT Gateway Reboot
The NAT gateway MAY store mappings in persistent storage so that,
when it is powered off or rebooted, it remembers the port mapping
state of the network.
However, maintaining this state is not essential for correct
operation. When the NAT gateway powers on or clears its port mapping
state as the result of a configuration change, it MUST reset the
epoch time and re-announce its IPv4 address as described in Section
3.2.1, "Announcing Address Changes". Reception of this packet where
time has apparently gone backwards serves as a hint to clients on the
network that they SHOULD immediately send renewal packets (to
immediately recreate their mappings) instead of waiting until the
originally scheduled time for those renewals. Clients who miss
receiving those gateway announcement packets for any reason will
still renew their mappings at the originally scheduled time and cause
their mappings to be recreated; it will just take a little longer for
these clients.
Cheshire & Krochmal Informational [Page 16]
^L
RFC 6886 NAT-PMP April 2013
A mapping renewal packet is formatted identically to an original
mapping request; from the point of view of the client, it is a
renewal of an existing mapping, but from the point of view of the
freshly rebooted NAT gateway, it appears as a new mapping request.
This self-healing property of the protocol is very important.
The remarkable reliability of the Internet as a whole derives in
large part from the fact that important state is held in the
endpoints, not in the network itself [ETEAISD]. Power-cycling an
Ethernet switch results only in a brief interruption in the flow of
packets; established TCP connections through that switch are not
broken, merely delayed for a few seconds. Indeed, a failing Ethernet
switch can even be replaced with a new one, and as long as the cables
are transferred over reasonably quickly, after the upgrade all the
TCP connections that were previously going through the old switch
will be unbroken and now going through the new one. The same is true
of IP routers, wireless base stations, etc. The one exception is NAT
gateways. Because the port mapping state is required for the NAT
gateway to know where to forward inbound packets, loss of that state
breaks connectivity through the NAT gateway. By allowing clients to
detect when this loss of NAT gateway state has occurred, and recreate
it on demand, we turn hard state in the network into soft state, and
allow it to be recovered automatically when needed.
Without this automatic recreation of soft state in the NAT gateway,
reliable long-term networking would not be achieved. As mentioned
above, the reliability of the Internet does not come from trying to
build a perfect network in which errors never happen, but from
accepting that in any sufficiently large system there will always be
some component somewhere that's failing, and designing mechanisms
that can handle those failures and recover. To illustrate this point
with an example, consider the following scenario: Imagine a network
security camera that has a web interface and accepts incoming
connections from web browser clients. Imagine this network security
camera uses NAT-PMP or a similar protocol to set up an inbound port
mapping in the NAT gateway so that it can receive incoming
connections from clients on the other side of the NAT gateway. Now,
this camera may well operate for weeks, months, or even years.
During that time, it's possible that the NAT gateway could experience
a power failure or be rebooted. The user could upgrade the NAT
gateway's firmware, or even replace the entire NAT gateway device
with a newer model. The general point is that if the camera operates
for a long enough period of time, some kind of disruption to the NAT
gateway becomes inevitable. The question is not whether the NAT
gateway will lose its port mappings, but when, and how often. If the
network camera and devices like it on the network can detect when the
NAT gateway has lost its port mappings, and recreate them
Cheshire & Krochmal Informational [Page 17]
^L
RFC 6886 NAT-PMP April 2013
automatically, then these disruptions are self-correcting and largely
invisible to the end user. If, on the other hand, the disruptions
are not self-correcting, and after a NAT gateway reboot the user has
to manually reset or reboot all the other devices on the network too,
then these disruptions are *very* visible to the end user. This
aspect of the design is part of what makes the difference between a
protocol that keeps on working indefinitely over a time scale of
months or years, and a protocol that works in brief testing, but in
the real world is continually failing and requiring manual
intervention to get it going again.
When a client renews its port mappings as the result of receiving a
packet where the Seconds Since Start of Epoch (SSSoE) field indicates
that a reboot or similar loss of state has occurred, the client MUST
first delay by a random amount of time selected with uniform random
distribution in the range 0 to 5 seconds, and then send its first
port mapping request. After that request is acknowledged by the
gateway, the client may then send its second request, and so on, as
rapidly as the gateway allows. The requests SHOULD be issued
serially, one at a time; the client SHOULD NOT issue multiple
concurrent requests.
The discussion in this section focuses on recreating inbound port
mappings after loss of NAT gateway state, because that is the more
serious problem. Losing port mappings for outgoing connections
destroys those currently active connections, but does not prevent
clients from establishing new outgoing connections. In contrast,
losing inbound port mappings not only destroys all existing inbound
connections, but also prevents the reception of any new inbound
connections until the port mapping is recreated. Accordingly, we
consider recovery of inbound port mappings more important. However,
clients that want outgoing connections to survive a NAT gateway
reboot can also achieve that using NAT-PMP, in the common case of a
residential NAT gateway with a single, relatively stable, external IP
address. After initiating an outbound TCP connection (which will
cause the NAT gateway to establish an implicit port mapping), the
client should send the NAT gateway a port mapping request for the
source port of its TCP connection, which will cause the NAT gateway
to send a response giving the external port it allocated for that
mapping. The client can then store this information, and use it
later to recreate the mapping if it determines that the NAT gateway
has lost its mapping state.
3.8. NAT Gateways with NAT Function Disabled
Note that only devices that are *currently* acting in the role of NAT
gateway should participate in NAT-PMP protocol exchanges with
clients. A network device that is capable of NAT (and NAT-PMP) but
Cheshire & Krochmal Informational [Page 18]
^L
RFC 6886 NAT-PMP April 2013
is currently configured not to perform that function (e.g., it is
acting as a traditional IP router, forwarding packets without
modifying them) MUST NOT respond to NAT-PMP requests from clients nor
send spontaneous NAT-PMP address-change announcements.
In particular, a network device not currently acting in the role of
NAT gateway should not even respond to NAT-PMP requests by returning
an error code such as 2, "Not Authorized/Refused", since to do so is
misleading to clients -- it suggests that NAT port mapping is
necessary on this network for the client to successfully receive
inbound connections, but is not available because the administrator
has chosen to disable that functionality.
Clients should also be careful to avoid making unfounded assumptions,
such as the assumption that if the client has an IPv4 address in one
of the private IPv4 address ranges [RFC1918], then that means NAT
necessarily must be in use. Net 10/8 has enough addresses to build a
private network with millions of hosts and thousands of
interconnected subnets, all without any use of NAT. Many
organizations have built such private networks that benefit from
using standard TCP/IP technology, but by choice do not connect to the
public Internet. The purpose of NAT-PMP is to mitigate some of the
damage caused by NAT. It would be an ironic and unwanted side effect
of this protocol if it were to lead well-meaning but misguided
developers to create products that refuse to work on a private
network *unless* they can find a NAT gateway to talk to.
Consequently, a client finding that NAT-PMP is not available on its
network should not give up, but should proceed on the assumption that
the network may be a traditional routed IP network, with no address
translation being used. This assumption may not always be true, but
it is better than the alternative of falsely assuming the worst and
not even trying to use normal (non-NAT) IP networking.
If a network device not currently acting in the role of NAT gateway
receives UDP packets addressed to port 5351, it SHOULD respond
immediately with an "ICMP Port Unreachable" message to tell the
client that it needn't continue with timeouts and retransmissions,
and it should assume that NAT-PMP is not available and not needed on
this network. Typically, this behavior can be achieved merely by not
having an open socket listening on UDP port 5351.
3.9. All Mappings Are Bidirectional
All NAT mappings, whether created implicitly by an outbound packet,
created explicitly using NAT-PMP, or configured statically, are
bidirectional. This means that when an outbound packet from a
particular internal address and port is translated to an external
Cheshire & Krochmal Informational [Page 19]
^L
RFC 6886 NAT-PMP April 2013
address and port, replies addressed to that external address and port
need to be translated back to the corresponding internal address and
port.
The converse is also true. When an inbound packet is received that
is addressed to an external address and port that matches an existing
mapping (implicit, explicit, or static), it is translated to the
corresponding internal address and port and forwarded. Outbound
replies from that internal address and port need to be translated to
the correct external address and port so that they are correctly
recognized by the remote peer.
In particular, if an outbound UDP reply that matches an existing
explicit or static mapping is instead treated like a "new" outbound
UDP packet, and a new dynamic mapping is created (with a different
external address and port), then at the time that packet arrives at
the remote peer it will not be recognized as a valid reply. For TCP
this bug is quickly spotted because all TCP implementations will
ignore replies with the wrong apparent source address and port. For
UDP this bug can more easily go unnoticed because some UDP clients
neglect to check the source address and port of replies; thus, they
will appear to work some of the time with NAT gateways that put the
wrong source address and port in outbound packets. All NAT gateways
MUST ensure that mappings, however created, are bidirectional.
4. UNSAF Considerations
The document "IAB Considerations for UNilateral Self-Address Fixing
(UNSAF) Across Network Address Translation (NAT)" [RFC3424] covers a
number of issues when working with NATs. It outlines some
requirements for any document that attempts to work around problems
associated with NATs. This section addresses those requirements.
4.1. Scope
This protocol addresses the needs of TCP and UDP transport peers that
are separated from the public Internet by exactly one IPv4 NAT. Such
peers must have access to some form of directory server for
registering the public IPv4 address and port at which they can be
reached.
4.2. Transition Plan
Any client making use of this protocol SHOULD implement IPv6 support.
If a client supports IPv6 and is running on a device with a global
IPv6 address, that IPv6 address SHOULD be preferred to the IPv4
external address learned via this NAT mapping protocol. In case
other clients do not have IPv6 connectivity, both the IPv4 and IPv6
Cheshire & Krochmal Informational [Page 20]
^L
RFC 6886 NAT-PMP April 2013
addresses SHOULD be registered with whatever form of directory server
is used. Preference SHOULD be given to IPv6 addresses when
available. By implementing support for IPv6 and using this protocol
for IPv4, vendors can ship products today that will work under both
scenarios. As IPv6 becomes more widely deployed, clients of this
protocol following these recommendations will transparently make use
of IPv6.
4.3. Failure Cases
Aside from NATs that do not implement this protocol, there are a
number of situations where this protocol may not work.
4.3.1. NAT behind NAT
Some people's primary IPv4 address, assigned by their ISP, may itself
be a NAT address. In addition, some people may have an external IPv4
address, but may then double NAT themselves, perhaps by choice or
perhaps by accident. Although it might be possible in principle for
one NAT gateway to recursively request a mapping from the next one,
this document does not advocate that and does not try to prescribe
how it would be done.
It would be a lot of work to implement nested NAT port mapping
correctly, and there are a number of reasons why the end result might
not be as useful as we might hope. Consider the case of an ISP that
offers each of its customers only a single NAT address. This ISP
could instead have chosen to provide each customer with a single
public IPv4 address, or, if the ISP insists on running NAT, it could
have chosen to allow each customer a reasonable number of addresses,
enough for each customer device to have its own NAT address directly
from the ISP. If, instead, this ISP chooses to allow each customer
just one and only one NAT address, forcing said customer to run
nested NAT in order to use more than one device, it seems unlikely
that such an ISP would be so obliging as to provide a NAT service
that supports NAT-PMP. Supposing that such an ISP did wish to offer
its customers NAT service with NAT-PMP so as to give them the ability
to receive inbound connections, this ISP could easily choose to allow
each client to request a reasonable number of DHCP addresses from
that gateway. Remember that Net 10/8 [RFC1918] allows for over 16
million addresses, so NAT addresses are not in any way in short
supply. A single NAT gateway with 16 million available addresses is
likely to run out of packet forwarding capacity before it runs out of
internal addresses to hand out. In this way, the ISP could offer
single-level NAT with NAT-PMP, obviating the need to support nested
NAT-PMP. In addition, an ISP that is motivated to provide their
customers with unhindered access to the Internet by allowing incoming
as well as outgoing connections has better ways to offer this
Cheshire & Krochmal Informational [Page 21]
^L
RFC 6886 NAT-PMP April 2013
service. Such an ISP could offer its customers real public IPv4
addresses instead of NAT addresses, or could choose to offer its
customers full IPv6 connectivity, where no mapping or translation is
required at all.
Note: In the nine years since NAT-PMP was designed, the pool of
available IPv4 addresses has been exhausted, and many ISPs now offer
translated IPv4 addresses out of necessity. Such ISPs have indicated
a willingness to offer PCP service to their customers.
4.3.2. NATs with Multiple External IPv4 Addresses
If a NAT maps internal addresses to multiple external addresses, then
it SHOULD pick one of those external addresses as the one it will
support for inbound connections, and for the purposes of this
protocol it SHOULD act as if that address were its only address.
4.3.3. NATs and Routed Private Networks
In some cases, a large network may be subnetted. Some sites may
install a NAT gateway and subnet the private network. Such
subnetting breaks this protocol because the router address is not
necessarily the address of the device performing NAT.
Addressing this problem is not a high priority. Any site with the
resources to set up such a configuration should have the resources to
add manual mappings or attain a range of globally unique addresses.
Not all NATs will support this protocol. In the case where a client
is run behind a NAT that does not support this protocol, the software
relying on the functionality of this protocol may be unusable.
4.3.4. Communication between Hosts behind the Same NAT
NAT gateways supporting NAT-PMP should also implement "hairpin
translation". Hairpin translation means supporting communication
between two local clients being served by the same NAT gateway.
Suppose device A is listening on internal address and port
10.0.0.2:80 for incoming connections. Using NAT-PMP, device A has
obtained a mapping to external address and port x.x.x.x:80, and has
recorded this external address and port in a public directory of some
kind. For example, it could have created a DNS SRV record containing
this information, and recorded it, using DNS Dynamic Update
[RFC3007], in a publicly accessible DNS server. Suppose then that
device B, behind the same NAT gateway as device A, but unknowing or
uncaring of this fact, retrieves device A's DNS SRV record and
attempts to open a TCP connection to x.x.x.x:80. The outgoing
Cheshire & Krochmal Informational [Page 22]
^L
RFC 6886 NAT-PMP April 2013
packets addressed to this public Internet address will be sent to the
NAT gateway for translation and forwarding. Having translated the
source address and port number on the outgoing packet, the NAT
gateway needs to be smart enough to recognize that the destination
address is in fact itself, and then feed this packet back into its
packet reception engine, to perform the destination port mapping
lookup to translate and forward this packet to device A at address
and port 10.0.0.2:80.
4.3.5. Non-UDP/TCP Transport Traffic
Any communication over transport protocols other than TCP and UDP
will not be served by this protocol. Examples are Generic Routing
Encapsulation (GRE), Authentication Header (AH), and Encapsulating
Security Payload (ESP).
4.4. Long-Term Solution
As IPv6 is deployed, clients of this protocol supporting IPv6 will be
able to bypass this protocol and the NAT when communicating with
other IPv6 devices. In order to ensure this transition, any client
implementing this protocol SHOULD also implement IPv6 and use this
solution only when IPv6 is not available to both peers.
4.5. Existing Deployed NATs
Existing deployed NATs will not support this protocol. This protocol
will only work with NATs that are upgraded to support it.
5. Security Considerations
As discussed in Section 3.2, "Determining the External Address", only
a client on the internal side of the NAT may create port mappings,
and it may do so only on its own behalf. By using IP address
spoofing, it's possible for one client to delete the port mappings of
another client. It's also possible for one client to create port
mappings on behalf of another client. In cases where this is a
concern, it can be dealt with using IPsec [RFC4301].
The multicast announcements described in Section 3.2.1, "Announcing
Address Changes", could be spoofed, facilitating a denial-of-service
attack. This makes NAT-PMP unsuitable for use on LANs with large
numbers of hosts where one or more of the hosts may be untrustworthy.
Another concern is that rogue software running on a local host could
create port mappings for unsuspecting hosts, thereby rendering them
vulnerable to external attack. However, it's not clear how realistic
this threat model is, since rogue software on a local host could
Cheshire & Krochmal Informational [Page 23]
^L
RFC 6886 NAT-PMP April 2013
attack such unsuspecting hosts directly itself, without resorting to
such a convoluted indirect technique. This concern is also a little
misguided because it is based on the assumption that a NAT gateway
and a firewall are the same thing, which they are not.
Some people view the property of NATs blocking inbound connections as
a security benefit that is undermined by this protocol. The authors
of this document have a different point of view. In the days before
NAT became prevalent, all hosts had unique public IP addresses, and
had unhindered ability to communicate with any other host on the
Internet (a configuration that is still surprisingly common). Using
NAT breaks this unhindered connectivity, relegating hosts to second-
class status, unable to receive inbound connections. This protocol
goes some way to partially reverse that damage. The purpose of a NAT
gateway should be to allow several hosts to share a single address,
not to simultaneously impede those host's ability to communicate
freely. Security is most properly provided by end-to-end
cryptographic security, and/or by explicit firewall functionality, as
appropriate. Blocking of certain connections should occur only as a
result of explicit and intentional firewall policy, not as an
accidental side effect of some other technology.
However, since many users do have an expectation that their NAT
gateways can function as a kind of firewall, any NAT gateway
implementing this protocol SHOULD have an administrative mechanism to
disable it, thereby restoring the pre-NAT-PMP behavior.
6. IANA Considerations
UDP ports 5350 and 5351 have been assigned for use by NAT-PMP, and
subsequently by its successor, Port Control Protocol [RFC6887].
No further IANA services are required by this document.
7. Acknowledgments
The concepts described in this document have been explored,
developed, and implemented with help from Mark Baugher, Bob Bradley,
Josh Graessley, Rory McGuire, Rob Newberry, Roger Pantos, John
Saxton, Kiren Sekar, Jessica Vazquez, and James Woodyatt.
Special credit goes to Mike Bell, the Apple Vice President who
recognized the need for a clean, elegant, reliable Port Mapping
Protocol, and made the decision early on that Apple's AirPort base
stations would support NAT-PMP.
Cheshire & Krochmal Informational [Page 24]
^L
RFC 6886 NAT-PMP April 2013
8. Deployment History
In August 2004, NAT-PMP client software first became available to the
public through Apple's Darwin Open Source code. In April 2005,
NAT-PMP implementations began shipping to end users with the launch
of Mac OS X 10.4 Tiger and Bonjour for Windows 1.0, and in June 2005
the protocol was first publicly documented in the original draft
version of this document.
The NAT-PMP client in Mac OS X 10.4 Tiger and Bonjour for Windows
exists as part of the mDNSResponder/mdnsd system service. When a
client advertises a service using Wide Area Bonjour [RFC6763], and
the machine is behind a NAT-PMP-capable NAT gateway, and the machine
is so configured, the mDNSResponder system service automatically uses
NAT-PMP to set up an inbound port mapping, and then records the
external IPv4 address and port in the global DNS. Existing client
software using the Bonjour programming APIs [Bonjour] got this new
NAT traversal functionality automatically. The logic behind this
decision was that if client software publishes its information into
the global DNS via Wide Area Bonjour service advertising, then it's
reasonable to infer an expectation that this information should
actually be usable by the peers retrieving it. Generally speaking,
recording a private IPv4 address like 10.0.0.2 in the public DNS is
likely to be pointless because that address is not reachable from
clients on the other side of the NAT gateway. In the case of a home
user with a single computer directly connected to their Cable or DSL
modem, with a single global IPv4 address and no NAT gateway (a common
configuration at that time), publishing the machine's global IPv4
address into the global DNS is useful, because that IPv4 address is
globally reachable. In contrast, a home user using a NAT gateway to
share a single global IPv4 address between several computers loses
this ability to receive inbound connections. This breaks many peer-
to-peer collaborative applications, like the multi-user text editor
SubEthaEdit [SEE]. For many users, moving from one computer with a
global IPv4 address, to two computers using NAT to share a single
global IPv4 address, loss of inbound reachability was an unwanted
side effect of using NAT for address sharing. Automatically creating
the necessary inbound port mappings helped remedy this unwanted side
effect of NAT.
The server side of the NAT-PMP protocol is implemented in Apple's
AirPort Extreme, AirPort Express, and Time Capsule wireless base
stations, and in the Internet Sharing feature of Mac OS X 10.4 and
later. Some third-party NAT vendors, such as Peplink, also offer
NAT-PMP in their products.
Cheshire & Krochmal Informational [Page 25]
^L
RFC 6886 NAT-PMP April 2013
In Mac OS X 10.4 Tiger, the NAT-PMP client was invoked automatically
as a side effect of clients requesting Wide Area Bonjour service
registrations. Using NAT-PMP without an associated Wide Area Bonjour
service registration required use of a third-party client library.
In October 2007, Mac OS X 10.5 Leopard added the "DNSServiceNATPort-
MappingCreate" API, which made NAT-PMP client functionality directly
available, so software could use it with other directory and
rendezvous mechanisms in addition to Wide Area Bonjour DNS Updates.
In 2013, NAT-PMP was superseded by the IETF Standards Track Port
Control Protocol [RFC6887]. PCP builds on NAT-PMP and uses a
compatible packet format, and adds a number of significant
enhancements, including IPv6 support, management of outbound
mappings, management of firewall rules, full compatibility with
large-scale NATs with a pool of external addresses, error lifetimes,
and an extension mechanism to enable future enhancements.
9. Noteworthy Features of NAT Port Mapping Protocol and PCP
Some readers have asked how NAT-PMP and PCP compare to other similar
solutions, particularly the UPnP Forum's Internet Gateway Device
(IGD) Device Control Protocol [IGD].
The answer is that although the Universal Plug and Play (UPnP) IGD
protocol is often used as a way for client devices to create port
mappings programmatically, it's not ideal for that task. Whereas
NAT-PMP was explicitly designed to be used primarily by software
entities managing their own port mappings, UPnP IGD is more tailored
towards being used by humans configuring all the settings of their
gateway using some GUI tool. This difference in emphasis leads to
protocol differences. For example, while it is reasonable and
sensible to require software entities to renew their mappings
periodically to prove that they are still there (like a device
renewing its DHCP address lease), it would be unreasonable to require
the same thing of a human user. When a human user configures their
gateway, they expect it to stay configured that way until they decide
to change it. If they configure a port mapping, they expect it to
stay configured until they decide to delete it.
Because of this focus on being a general administration protocol for
all aspects of home gateway configuration, UPnP IGD is a large and
complicated collection of protocols (360 pages of specification
spread over 13 separate documents, not counting supporting protocol
specifications like Simple Service Discovery Protocol (SSDP) and
Extensible Markup Language (XML)). While it may be a fine way for
Cheshire & Krochmal Informational [Page 26]
^L
RFC 6886 NAT-PMP April 2013
human users to configure their home gateways, it is not especially
suited to the task of programmatically creating dynamic port
mappings.
The requirements for a good port mapping protocol, requirements that
are met by NAT-PMP, are outlined below.
9.1. Simplicity
Many home gateways, and many of the devices that connect to them, are
small, low-cost devices, with limited RAM, flash memory, and CPU
resources. Protocols they use should be considerate of this,
supporting a small number of simple operations that can be
implemented easily with a small amount of code. A quick comparison,
based on page count of the respective documents alone, suggests that
NAT-PMP is at least ten times simpler than UPnP IGD.
9.2. Focused Scope
The more things a protocol can do, the more chance there is that
something it does could be exploited for malicious purposes. NAT-PMP
is tightly focused on the specific task of creating port mappings.
Were the protocol to be misused in some way, this helps limit the
scope of what mischief could be performed using the protocol.
Because UPnP IGD allows control over all home gateway configuration
settings, the potential for mischief is far greater. For example, a
UPnP IGD home gateway allows messages that tell it to change the DNS
server addresses that it sends to clients in its DHCP packets. Using
this mechanism, a single item of malicious web content (e.g., a rogue
Flash banner advert on a web page) can make a persistent change to
the home gateway's configuration without the user's knowledge, such
that all future DNS requests by all local clients will be sent to a
rogue DNS server. This allows criminals to perform a variety of
mischief, such as hijacking connections to bank web sites and
redirecting them to the criminals' web servers instead [VU347812].
9.3. Efficiency
In addition to low-cost home gateways, many of the clients will also
be similarly constrained low-cost devices with limited RAM resources.
When implementing a NAT-PMP client on a constrained device, it's
beneficial to have well-defined bounds on RAM requirements that are
fixed and known in advance. For example, when requesting the
gateway's external IPv4 address, a NAT-PMP client on Ethernet knows
Cheshire & Krochmal Informational [Page 27]
^L
RFC 6886 NAT-PMP April 2013
that to receive the reply it will require 14 bytes for the Ethernet
header, 20 bytes for the IPv4 header, 8 bytes for the UDP header, and
12 bytes for the NAT-PMP payload, making a total of 54 bytes.
In contrast, UPnP IGD uses an XML reply of unbounded size. It is not
uncommon for a UPnP IGD device to return an XML document 4000 to 8000
bytes in size to communicate its 4-byte external IPv4 address, and
the protocol specification places no upper bound on how large the XML
response may be, so there's nothing to stop the reply being even
larger. This means that developers of UPnP client devices can only
guess at how much memory they may need to receive the XML reply.
Operational experience suggests that 10,000 bytes is usually enough
for most UPnP IGD home gateways today, but that's no guarantee that
some future UPnP IGD home gateway might not return a perfectly legal
XML reply much larger than that.
In addition, because the XML reply is too large to fit in a single
UDP packet, UPnP IGD has to use a TCP connection, thereby adding the
overhead of TCP connection setup and teardown.
The process of discovering a UPnP IGD home gateway's external IPv4
address consists of:
o SSDP transaction to discover the TCP port to use, and the "URL" of
the XML document to fetch from the gateway. Following the SSDP
specification, this is 3 multicast requests, eliciting 9 unicast
responses.
o HTTP "GET" request to get the device description. Typically, 16
packets: 3 for TCP connection setup, 9 packets of data exchange,
and a 4-packet FIN-ACK-FIN-ACK sequence to close the connection.
o HTTP "POST" to request the external IPv4 address. Typically, 14
packets: 3 for TCP connection setup, 7 packets of data exchange,
and a 4-packet FIN-ACK-FIN-ACK sequence to close the connection.
To retrieve the external IPv4 address NAT-PMP takes a 2-packet UDP
exchange (44-byte request, 54-byte response); the same thing using
UPnP IGD takes 42 packets and thousands of bytes.
Similarly, UPnP IGD's HTTP "POST" request for a port mapping is
typically a 14-packet exchange, compared with NAT-PMP's 2-packet UDP
exchange.
Cheshire & Krochmal Informational [Page 28]
^L
RFC 6886 NAT-PMP April 2013
9.4. Atomic Allocation Operations
Some of the useful properties of NAT-PMP were inspired by DHCP, a
reliable and successful protocol. For example, DHCP allows a client
to request a desired IP address, but if that address is already in
use the DHCP server will instead assign some other available address.
Correspondingly, NAT-PMP allows a client to request a desired
external port, and if that external port is already in use by some
other client, the NAT-PMP server will instead assign some other
available external port.
UPnP IGD does not do this. If a UPnP IGD client requests an external
port that has already been allocated, then one of two things happens.
Some UPnP IGD home gateways just silently overwrite the old mapping
with the new one, causing the previous client to lose connectivity.
If the previous client renews its port mapping, then it in turn
overwrites the new mapping, and the two clients fight over the same
external port indefinitely, neither achieving reliable connectivity.
Other IGD home gateways return a "Conflict" error if the port is
already in use, which does at least tell the client what happened,
but doesn't tell the client what to do. Instead of the NAT gateway
(which does know which ports are available) assigning one to the
client, the NAT gateway makes the client (which doesn't know) keep
guessing until it gets lucky. This problem remains mild as long as
not many clients are using UPnP IGD, but gets progressively worse as
the number of clients on the network requesting port mappings goes
up. In addition, UPnP IGD works particularly badly in conjunction
with the emerging policy of allocating pre-assigned port ranges to
each client. If a client is assigned TCP port range 63488-64511, and
the UPnP IGD client requests TCP port 80, trying successive
incrementing ports until it succeeds, then the UPnP IGD client will
have to issue 63,409 requests before it succeeds.
9.5. Garbage Collection
In any system that operates for a long period of time (as a home
gateway should), it is important that garbage data does not
accumulate indefinitely until the system runs out of memory and
fails.
Similar to how DHCP leases an IP address to a client for a finite
length of time, NAT-PMP leases an external port to a client for a
finite length of time. The NAT-PMP client must renew the port
mapping before it expires, or, like an unrenewed DHCP address, it
will be reclaimed. If a laptop computer is abruptly disconnected
Cheshire & Krochmal Informational [Page 29]
^L
RFC 6886 NAT-PMP April 2013
from the network without the opportunity to delete its port mappings,
the NAT gateway will reclaim those mappings when they are not
renewed.
In principle, UPnP IGD should allow clients to specify a lifetime on
port mappings. However, a Google search for "UPnP NewLeaseDuration"
shows that in practice pretty much every client uses
"<NewLeaseDuration>0</NewLeaseDuration>" to request an infinite
lease, and the protocol has no way for the NAT gateway to decline
that infinite lease request and require the client to renew it at
reasonable intervals. Furthermore, anecdotal evidence is that if the
client requests a lease other than zero, there are IGD home gateways
that will ignore the request, fail in other ways, or even crash
completely. As a client implementer then, you would be well advised
not to attempt to request a lease other than zero, unless you want to
suffer the support costs and bad publicity of lots of people
complaining that your device brought down their entire network.
Because none of the early UPnP IGD clients requested port mapping
leases, many UPnP IGD home gateway vendors never tested that
functionality, and got away with shipping home gateways where that
functionality was buggy or nonexistent. Because there are so many
buggy UPnP IGD home gateways already deployed, client writers wisely
stick to the well-trodden path of only requesting infinite leases.
Because there are now few (if any) clients attempting to request non-
zero leases, home gateway vendors have little incentive to expend
resources implementing a feature no one uses.
This unfortunate consequence of the way UPnP IGD was developed and
deployed means that in practice it has no usable port mapping lease
facility today, and therefore when run for a long period of time UPnP
IGD home gateways have no good way to avoid accumulating an unbounded
number of stale port mappings.
9.6. State Change Announcements
When using DHCP on the external interface, as is the norm for home
gateways, there is no guarantee that a UPnP IGD home gateway's
external IPv4 address will remain unchanged. Indeed, some ISPs
change their customer's IPv4 address every 24 hours (possibly in an
effort to make it harder for their customers to "run a server" at
home). What this means is that if the home gateway's external IPv4
address changes, it needs to inform its clients, so that they can
make any necessary updates to global directory information (e.g.,
performing a Dynamic DNS update to update their address record).
When a NAT-PMP gateway's external IPv4 address changes, it broadcasts
announcement packets to inform clients of this. UPnP IGD does not.
Cheshire & Krochmal Informational [Page 30]
^L
RFC 6886 NAT-PMP April 2013
9.7. Soft State Recovery
When run for a long enough period of time, any network will have
devices that fail, get rebooted, suffer power outages, or lose state
for other reasons. A home gateway that runs for long enough is
likely to suffer some such incident eventually. After losing state,
it has no record of the port mappings it created, and clients suffer
a consequent loss of connectivity.
To handle this case, NAT-PMP has the "Seconds Since Start of Epoch"
mechanism. After a reboot or other loss of state, a NAT-PMP gateway
broadcasts announcement packets giving its external IPv4 address,
with the Seconds Since Start of Epoch field reset to begin counting
from zero again. When a NAT-PMP client observes packets from its
NAT-PMP gateway where the gateway's notion of time has apparently
gone backwards compared to the client's, the client knows the gateway
has probably lost state, and immediately recreates its mappings to
restore connectivity.
UPnP IGD has no equivalent mechanism.
9.8. On-Path NAT Discovery
For any given host, it is only useful to request NAT port mappings in
the NAT gateway through which that host's packets are flowing. A NAT
port mapping is a request for packets to be translated in a certain
way; the NAT gateway can only perform that translation if it's
actually forwarding inbound and outbound packets for that host.
This is why NAT-PMP sends its requests to the host's default router,
since this is the device that is forwarding (and possibly
translating) inbound and outbound packets for that host. (In a
larger network with multiple hops between a host and its NAT gateway,
some other mechanism would need to be used to discover the correct
on-path NAT for a host; this is possible, but outside the scope of
this document.)
In contrast, UPnP IGD does not limit itself to using only on-path
NATs. UPnP IGD uses a multicast SSDP query, and uses any device it
finds on the local network claiming UPnP IGD capability, regardless
of whether any inbound or outbound traffic is actually flowing
through that device. Over the past few years this led to many bug
reports being sent to Apple with the general form: "Port Mapping
doesn't work on my Mac and that's a bug because everything else on my
network says UPnP IGD is working fine." Upon investigation it always
turned out that: (i) these people had NAT gateways that either didn't
support port mapping requests, or had that capability disabled, and
(ii) for some reason they also had some other old NAT device still
Cheshire & Krochmal Informational [Page 31]
^L
RFC 6886 NAT-PMP April 2013
connected to their network, and those other NAT devices were
advertising UPnP IGD capability, even though they were not the active
NAT gateway for the network. This led to UPnP IGD clients falsely
reporting that they were "working fine", and only the Mac correctly
reporting that it was unable to make any useful port mappings. In
many cases the people reporting this "bug" had devices like game
consoles on their home network that for many years had been reporting
that UPnP IGD was "working fine", yet during those years they had
never once successfully received any inbound network packet or
connection. The irony is that, for these people who were reporting
bugs to Apple, UPnP IGD "working fine" had been indistinguishable
from UPnP IGD doing nothing useful at all. It was only when Back to
My Mac [RFC6281] started reporting that it was unable to make any
functional port mappings that these people discovered they'd never
had any working port mappings on their NAT gateway.
10. References
10.1. Normative References
[RFC1918] Rekhter, Y., Moskowitz, B., Karrenberg, D., de Groot, G.,
and E. Lear, "Address Allocation for Private Internets",
BCP 5, RFC 1918, February 1996.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119, March 1997.
10.2. Informative References
[Bonjour] Apple "Bonjour" <http://developer.apple.com/bonjour/>.
[ETEAISD] J. Saltzer, D. Reed and D. Clark: "End-to-end arguments in
system design", ACM Trans. Comp. Sys., 2(4):277-88,
November 1984.
[IGD] UPnP Standards "Internet Gateway Device (IGD) Standardized
Device Control Protocol V 1.0", November 2001,
<http://www.upnp.org/standardizeddcps/igd.asp>.
[RFC2131] Droms, R., "Dynamic Host Configuration Protocol", RFC
2131, March 1997.
[RFC2663] Srisuresh, P. and M. Holdrege, "IP Network Address
Translator (NAT) Terminology and Considerations", RFC
2663, August 1999.
[RFC3007] Wellington, B., "Secure Domain Name System (DNS) Dynamic
Update", RFC 3007, November 2000.
Cheshire & Krochmal Informational [Page 32]
^L
RFC 6886 NAT-PMP April 2013
[RFC3022] Srisuresh, P. and K. Egevang, "Traditional IP Network
Address Translator (Traditional NAT)", RFC 3022, January
2001.
[RFC3424] Daigle, L., Ed., and IAB, "IAB Considerations for
UNilateral Self-Address Fixing (UNSAF) Across Network
Address Translation", RFC 3424, November 2002.
[RFC4301] Kent, S. and K. Seo, "Security Architecture for the
Internet Protocol", RFC 4301, December 2005.
[RFC6281] Cheshire, S., Zhu, Z., Wakikawa, R., and L. Zhang,
"Understanding Apple's Back to My Mac (BTMM) Service", RFC
6281, June 2011.
[RFC6763] Cheshire, S. and M. Krochmal, "DNS-Based Service
Discovery", RFC 6763, February 2013.
[RFC6887] Wing, D., Ed., Cheshire, S., Boucadair, M., Penno, R., and
P. Selkirk, "Port Control Protocol (PCP)", RFC 6887, April
2013.
[SEE] SubEthaEdit, <http://www.codingmonkeys.de/subethaedit/>.
[VU347812] United States Computer Emergency Readiness Team
Vulnerability Note VU#347812,
<http://www.kb.cert.org/vuls/id/347812>.
Authors' Addresses
Stuart Cheshire
Apple Inc.
1 Infinite Loop
Cupertino, CA 95014
USA
EMail: cheshire@apple.com
Marc Krochmal
Apple Inc.
1 Infinite Loop
Cupertino, CA 95014
USA
EMail: marc@apple.com
Cheshire & Krochmal Informational [Page 33]
^L
|