29/34 NAT và bảng ánh xạ Các chương

NAT: vì sao cả nhà dùng chung một địa chỉ Internet?

Nhà có nhiều thiết bị, sao ra Internet chỉ còn một địa chỉ?

Laptop của bạn mang địa chỉ 192.168.1.10, điện thoại là 192.168.1.11, TV là 192.168.1.12.

Nhưng khi cả ba vào Internet, phía bên ngoài chỉ thấy một địa chỉ IP công cộng: địa chỉ nhà mạng cấp cho router.

Làm sao một địa chỉ lại đại diện được cho cả nhà?

Router làm được việc đó nhờ một cơ chế tên là NAT. Và NAT ra đời vì một vấn đề cũ hơn: IPv4 bắt đầu thiếu địa chỉ.

Hơn 4 tỷ địa chỉ tưởng như không bao giờ dùng hết

Địa chỉ IPv4 dài 32 bit. Mỗi bit có hai trạng thái, nên có tất cả 2^32 = 4.294.967.296 địa chỉ, khoảng 4,29 tỷ.

Đầu những năm 1980, con số này lớn hơn rất nhiều so với số máy đang nối mạng. Cái khó không nằm ở tổng số, mà ở cách chia.

Mỗi địa chỉ có hai phần: phần đầu chỉ mạng, phần sau chỉ máy trong mạng đó. Hồi đó, ranh giới giữa hai phần chỉ được đặt ở ba chỗ cố định, gọi là ba lớp (class):

Lớp Phần mạng Một mạng chứa được
A 8 bit khoảng 16,7 triệu địa chỉ
B 16 bit 65.534 địa chỉ máy
C 24 bit 254 địa chỉ máy

Giữa các cỡ là những bước nhảy rất xa.

Một tổ chức cần 200 địa chỉ thì một mạng lớp C là đủ. Nhưng cần 2.000 địa chỉ thì lớp C quá nhỏ, còn lớp B lại chứa hơn 65.000. Không có cỡ nào ở giữa.

Nên nhiều tổ chức nhận một khối lớn hơn nhu cầu thật rất nhiều lần.

Lớp A còn quá tay hơn: mỗi mạng chiếm hơn 16 triệu địa chỉ. ARPANET từng dùng mạng số 10. Apple sau này nhận trọn khối từ 17.0.0.0 đến 17.255.255.255.

Khi Internet bắt đầu lớn nhanh, cách cấp này không trụ được.

Lớp B bắt đầu cạn

Tổ chức cỡ vừa liên tục xin mạng lớp B, vì lớp C quá nhỏ. Mỗi lần như vậy, hàng chục nghìn địa chỉ đi theo, phần lớn để trống.

Số mạng được cấp tăng rất nhanh. Bảng định tuyến của các router cũng phình theo, vì mỗi mạng mới là thêm một dòng mà router phải biết.

Cuối năm 1992, IESG, ban điều hành của IETF, tổ chức soạn chuẩn cho Internet, ghi nhận ba vấn đề đang tới cùng lúc:

  • số mạng lớp B sắp hết;
  • bảng định tuyến trên Internet tăng quá nhanh;
  • về lâu dài, toàn bộ địa chỉ IPv4 cũng sẽ cạn.

Cách chữa tận gốc là một phiên bản IP có nhiều địa chỉ hơn. Nhưng thay giao thức IP trên mọi máy của Internet không thể làm xong trong vài tháng.

Trong lúc chờ, IPv4 phải được kéo dài tuổi thọ.

Ba miếng vá cho IPv4

Trong vài năm sau đó, ba thay đổi lần lượt xuất hiện. Hai thay đổi đầu lo phần cấp và dùng địa chỉ.

1. Bỏ lớp, cấp vừa với nhu cầu

Năm 1993, CIDR bỏ ranh giới cố định giữa lớp A, B và C.

Không còn chỉ ba cỡ 256, 65.536 hay hơn 16 triệu địa chỉ. Tổ chức cần khoảng 2.000 địa chỉ thì nhận một khối 2.048, thay vì cả một mạng lớp B.

Địa chỉ bớt bị phí đi nhiều. Nhưng tổng số địa chỉ IPv4 vẫn chừng đó.

2. Dùng lại địa chỉ bên trong mạng riêng

Laptop trong nhà không nhất thiết phải có một địa chỉ Internet của riêng nó. Nó chỉ cần một địa chỉ để nói chuyện với các thiết bị trong chính mạng nhà.

Vì vậy ba dải IPv4 được dành riêng cho mạng nội bộ, gọi là địa chỉ riêng (private address):

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

Router trên Internet không chuyển gói tin tới các địa chỉ này.

Nhà bạn có thể dùng 192.168.1.10, nhà hàng xóm cũng dùng 192.168.1.10. Hai máy không đụng nhau, vì chúng nằm trong hai mạng riêng khác nhau.

Nhưng nếu 192.168.1.10 không tồn tại trên Internet, laptop gửi dữ liệu ra ngoài bằng cách nào?

Router nói thay cho cả mạng nhà

Thay đổi thứ ba, được đề xuất tháng 5/1994, trả lời câu đó: biên dịch địa chỉ mạng (NAT, Network Address Translation).

Mạng nhà có ba thiết bị, router có một địa chỉ công cộng do nhà mạng cấp:

Laptop       192.168.1.10
Điện thoại   192.168.1.11
TV           192.168.1.12

Router       203.0.113.5   (địa chỉ công cộng)

Khi laptop gửi một gói tin ra Internet, router thay địa chỉ nguồn:

192.168.1.10   →   203.0.113.5

Phía Internet không thấy 192.168.1.10. Nó chỉ thấy router.

Nhưng nếu laptop, điện thoại và TV đều thành 203.0.113.5, phản hồi quay về thì router đưa cho máy nào?

Router phân biệt bằng số cổng

Mỗi kết nối đi ra còn mang một cổng (port). Router đổi luôn cả cổng, mỗi kết nối một cổng công cộng riêng:

Laptop       192.168.1.10:5100   →   203.0.113.5:62001
Điện thoại   192.168.1.11:5200   →   203.0.113.5:62002

Rồi nó ghi lại mình vừa đổi gì:

62001  ↔  192.168.1.10:5100   laptop
62002  ↔  192.168.1.11:5200   điện thoại
62003  ↔  192.168.1.12:5300   TV

Đây là bảng ánh xạ NAT.

Máy chủ trên Internet gửi phản hồi tới 203.0.113.5:62002. Router tra bảng, thấy dòng 62002 ↔ 192.168.1.11:5200, đổi địa chỉ đích trở lại thành 192.168.1.11:5200 rồi gửi gói tin vào mạng nhà. Gói tin tới đúng điện thoại.

Router đã ghi sẵn dòng của laptop và điện thoại. Thêm dòng của TV, rồi gửi một gói lạ từ Internet vào xem router làm gì:

Router ghi lại từng ánh xạ

Mạng nhà

Laptop

192.168.1.10:5100

Điện thoại

192.168.1.11:5200

TV

192.168.1.12:5300

Router

Địa chỉ công cộng

203.0.113.5

nguồn 192.168.1.11:5200

→ 203.0.113.5:62002

Bảng NAT
Cổng ngoàiThiết bị bên trong
62001 192.168.1.10:5100 Laptop
62002 192.168.1.11:5200 Điện thoại
62003 192.168.1.12:5300 TV

Internet

Máy chủ

Máy lạ

Bấm Gửi ở TV và để ý bảng NAT, rồi thử gửi một gói lạ từ Internet.

Nhờ bảng này, một địa chỉ công cộng phục vụ được nhiều thiết bị cùng lúc.

NAT lúc đầu chỉ đổi địa chỉ IP. Kiểu đổi cả cổng như router nhà bạn có tên chính xác hơn là NAPT (Network Address Port Translation). Khi nói NAT ở mạng gia đình, người ta thường nói tới cơ chế này.

Router chỉ biết đưa gói tin vào đâu khi bảng đã có dòng tương ứng. Và dòng đó chỉ được ghi khi một thiết bị bên trong mở kết nối ra trước.

Người ngoài tự gửi vào thì sao?

Laptop vừa mở kết nối ra Internet, router đã ghi:

62001  ↔  192.168.1.10:5100

Phản hồi gửi về cổng 62001 thì dễ: có dòng, router chuyển cho laptop.

Bây giờ một máy lạ ngoài Internet tự gửi gói tin tới 203.0.113.5:7000. Router nhìn vào bảng và không thấy dòng nào cho cổng 7000. Nó không biết gói tin này của laptop, điện thoại hay TV.

Nên gói tin không được chuyển vào thiết bị nào cả.

NAT làm cho những kết nối từ ngoài vào trong khó hơn.

Muốn chạy một máy chủ tại nhà, bạn phải cấu hình chuyển tiếp cổng (port forwarding), ví dụ:

203.0.113.5:443
        ↓
192.168.1.10:443

Đó là tự tay thêm một dòng cố định vào bảng, bảo router:

Ai gửi tới cổng này thì chuyển cho máy này.

Gọi video, game ngang hàng, hay bất cứ ứng dụng nào cần hai máy nối thẳng với nhau, cũng vướng đúng chỗ này khi cả hai máy đều nằm sau NAT.

NAT cho nhiều thiết bị dùng địa chỉ riêng bên trong cùng ra Internet bằng một địa chỉ IPv4 công cộng.

Ba miếng vá CIDR, địa chỉ riêng và NAT giúp IPv4 sống lâu hơn nhiều so với những dự đoán ban đầu. Nhưng không miếng vá nào làm kho IPv4 lớn thêm.

Muốn giải quyết tận gốc, địa chỉ IP phải dài hơn 32 bit.

IPv6 được chọn từ năm 1994, sao vẫn chưa thay xong IPv4?

Nguồn bài viết (10)

  1. RFC 790: Assigned Numbers · IETF / RFC Editor (J. Postel), 1981
  2. RFC 791 — Internet Protocol · IETF
  3. RFC 1166: Internet Numbers · IETF / RFC Editor, 1990
  4. IANA IPv4 Address Space Registry · IANA
  5. RFC 1752: The Recommendation for the IP Next Generation Protocol · IETF / RFC Editor, 1995
  6. RFC 1380: IESG Deliberations on Routing and Addressing · IETF / RFC Editor, 1992
  7. RFC 1519: Classless Inter-Domain Routing (CIDR) · IETF / RFC Editor, 1993
  8. RFC 1918 — Address Allocation for Private Internets · IETF
  9. RFC 1631: The IP Network Address Translator (NAT) · IETF / RFC Editor, 1994
  10. RFC 3022 — Traditional IP Network Address Translator (Traditional NAT) · IETF