VietFi.net Blog

NAT cứu tinh - NAT tội đồ (bài 3)

NAT quy mô cực lớn: Carrier grade NAT, và sự ảnh hưởng chất lượng không ai nhận thấy...
Trong loạt bài về NAT, tôi trình bày bài này sau hai bài trước, với hi vọng các bạn có thể hiểu vấn đề nó ở mức vĩ mô lớn hơn, khó tránh hơn ở phạm vi quốc gia hoặc khu vực. Đó là thuê bao sử dụng Internet bị NAT bởi nhà cung cấp dịch vụ truy cập Internet. Để hiểu hơn cơ chế này về kĩ thuật, bạn cần đọc bài 1 của loạt bài, id số #2 của site. 

Tại sao lại là cứu tinh, tại sao lại là tội đồ? Cứu tinh bởi có thể NAT đã giúp cho các nước nghèo có thể phổ cập Internet giá rẻ hơn, đặc biệt là nó gần như là mặc định cho truy cập Internet di động từ 2G, 3G cho đến 4G vẫn còn NAT. Còn là tội đồ vì, chính sự chạy được của NAT đã kéo dài sự sống của IPv4, làm giảm nhu cầu IPv6 - công nghệ mà giúp giải quyết vấn đề thiếu địa chỉ, khiến các nhà cung cấp phần mềm, ISP, cho đến thiết bị mạng hay điện thoại thông minh đã chần chừ hỗ trợ IPv6.

## Vấn đề thiếu địa chỉ IPv4

Mục này tôi viết tóm tắt và sử dụng hình ảnh từ bài Wikipedia là [IPv4 Address exhaustion](https://en.m.wikipedia.org/wiki/IPv4_address_exhaustion). 

IPv4 được thiết kế năm 1980, lúc đó máy tính là 16bit phổ biến, 8bit cũng có, cũng không nhiều máy tính trên toàn thế giới lắm. Do hạn chế về công nghệ nên các tác giả họ đã đặt địa chỉ của IPv4 chỉ có 32 bit (để máy tính cùng thời có thể xử lý định tuyến mà không quá tốn phép tính toán), chia làm 4 số 8 bit, viết thành **n.x.y.z**, mỗi số từ 0-255. Ngoài ra người ta còn quy ước loại trừ giá trị n đặc biệt là: 0 (network hoặc không có giá trị), 127 (loopback), 224-239 (multi cast), 240-255 trừ cái cuối (dự trữ) và 255 tất cả 4 số là broadcast). Theo lý thuyết thì 32bit có thể có hơn 4 tỉ giá trị, trừ đi n đặc biệt trên và hao hụt các kiểu thì còn khoảng 3.5 tỉ, tức bằng ấy số lượng địa chỉ IPv4 tham gia vào Internet mà thôi.

Sự gia tăng các thiết bị kết nối Internet, ngoài sức tưởng tượng của tác giả, bởi các nguyên nhân sau:

1. Sự xuất hiện của máy tính cá nhân PC và khả năng nối mạng cá nhân: thời xưa chỉ có công ty lớn, trường đại học lớn mới có 1 máy tính lớn, dùng chung. Khi PC ra đời nó chỉ chạy đơn lẻ, nhưng sau đó nhanh chóng bùng nổ việc kết nối Internet nhất là khi Windows 95 ra đời, bùng nổ dịch vụ dot com năm 1999-2000.
2. Sự kết nối liên tục và trải rộng về từng nhà: Internet ban đầu là để dành cho giới học thuật, nghiên cứu và thương mại, quân sự. Sự bùng nổ của WWW, công nghệ viễn thông phát triển mà rẻ đi, đã kéo theo sự thay đổi đối tượng, đó là các hộ gia đình với nhu cầu giải trí. Đầu tiên là mạng quay số truy cập Internet (tôi có viết bài mã số #3 về cái này), sau đó lên băng thông rộng với ADSL và cable. Và giờ đây là cáp quang. Các công nghệ băng thông rộng trở về sau đã đổi mô hình tính cước là theo dung lượng hoặc trọn gói, chứ không phải là theo phút quay số nữa. Nên giờ người ta để kết nối luôn luôn bật, tức mỗi kết nối cần có địa chỉ duy nhất, dù chả sử dụng gì cả, làm hết nhanh kho địa chỉ hơn dù có cả tỉ địa chỉ.
3. Internet trên thiết bị di động cá nhân: khi điện thoại có kết nối Internet xuất hiện (trước khi iPhone được giới thiệu cả chục năm), người ta nhận thấy nó sẽ là phương tiện làm cho kho địa chỉ cạn nhanh. Nhưng quả thật nó cạn hẳn khi iPhone và hàng loạt Android ra đời, số thuê bao di động bùng nổ toàn cầu. Do dành cho từng cá nhân nên số lượng nhân gấp bội (Internet cố định là cho mỗi gia đình, cả điện thoại cố định cũng là cho từng gia đình).

Tôi lấy biểu đồ sau từ Wikipedia để thấy khối lượng địa chỉ giảm nhanh thế nào.

![tốc độ cạn khối địa chỉ IPv4/8](https://upload.wikimedia.org/wikipedia/commons/c/cf/Ipv4-exhaust.svg)

Vậy hết địa chỉ IPv4 dạng public này thì liên qua gì đến chúng ta, người chỉ sử dụng thôi? Trách nhiệm lo địa chỉ là nhà cung cấp dịch vụ Internet là ISP mà? Không hẳn vậy, bạn hãy đọc tiếp mục sau.

## NAT từ nhà, rồi ra đến cửa ISP

NAT, như nói ở bài 1, là giúp cho hộ gia đình chia sẻ 1 kết nối Internet ADSL hoặc cáp quang cho máy tính và điện thoại. Bằng cách chuyển đổi địa chỉ nội bộ sang địa chỉ đại diện của kết nối đó. IANA - tổ chức phân phối và cấp địa chỉ quốc tế - đã chia cho nội bộ mấy dải địa chỉ, tha hồ tự đặt như sau:

* **10.0.0.0/8** một subnet lớn có đến 16 triệu địa chỉ, thừa cho mạng nội bộ bất kì công ty nào. Tha hồ chia đến 3 cấp nữa.
* **172.16.0.0/12**, (từ 16 đến 31), khoảng hơn 1 triệu địa chỉ, đủ cho nhiều mục đích và thường dùng để đấu nối trong nội bộ.
* **192.168.0.0/16** đủ cho một gia đình to với hơn 65 ngàn địa chỉ.

Vậy là, chúng ta đã được NAT khi truy cập internet, ngay trên router gia đình kết nối với mạng của ISP, hay kể cả to như router của công ty ra ngoài Internet với vài ngàn PC cũng ok. Nhưng số thuê bao Internet của nhà cung cấp dịch vụ tăng không ngừng. Hơn nữa, các server của nhà cung cấp cũng nhiều lên nên dần dần có được một public IP là phải bỏ tiền ta kha khá để thuê nó (tôi thuê của AWS hay kể cả IP ở VN, có thể đến vài trăm ngàn ₫/tháng). Một khối địa chỉ IP thuê từ IANA có thể trả tiền khá nặng, có thể đến hàng tỉ đồng/năm, số tiền này được chia và tính trên giá thành các thuê bao dùng nó.

Các ISP dù lắm tiền, có đấu giá cao đi nữa cũng khó mà mua, còn dư đâu mà mua? ISP già lâu ở Âu Mỹ họ đã mua hết, chiếm đa số, tất nhiên không nhả ra. Ấy là lúc các ISP nhỏ trẻ chậm chân không còn mà mua, trong khi thuê bao tăng lên. 100 ngàn thuê bao sẽ cần bằng ấy địa chỉ, không có đủ thì làm sao? Ấy là lúc NAT được nghĩ đến và đem ra dùng.

Có chút vấn đề là, ISP sẽ NAT thế nào? Ta giả sử mạng nhà bạn router đặt địa chỉ 192.168.1.x, và kết nối NAT ra mạng ISP, theo địa chỉ mà ISP gán xuống (không còn là địa chỉ public) là 10.1.1.5/24, còn router lớn của ISP sẽ có địa chỉ là public và NAT cho mạng 10.x này, một truy cập sẽ như sau:

1. PC nhà bạn gửi truy cập ví dụ VietFi.net, từ địa chỉ 192.168.1.99 chẳng hạn, đến home router ra ngoài thì bị đổi nguồn là 10.1.1.5.
2. Gói tin tiếp tục đi đến router lớn của ISP, gọi là lớn vì nó phục vụ cả chục ngàn thuê bao đấy. Router lớn định tuyến ra Internet và thay nguồn tiếp bởi public IP gắn trên router rồi gửi đi tiếp.
3. Đến nơi cần đến, được hồi đáp, đích nguồn đảo nhau, và trở về router lớn của ISP.
4. Router lớn giống như mô tả, sẽ tra bảng state table và đổi lại địa chỉ đích về đúng chủ nhân của nó: 10.1.1.5, định tuyến tiếp tục vào mạng ISP và về đến home router.
5. Home router nhận, tra bảng state và đổi lại đúng về 192.168.1.99. Giao dịch hoàn thành.

Trình tự như trên, được gọi là double NAT, tức 2 lần làm việc NAT và tra bảng. Nó giúp ISP dùng chung 1 public IP cho nhiều thuê bao phía sau, mà vẫn cho phép thuê bao truy cập đa số dịch vụ Internet. Nhưng có mấy vấn đề xảy ra như sau với chúng ta:

1. Xung đột: ISP dùng địa chỉ đấu nối là 10.1.1.5/24, lỡ trong mạng gia đình hay công ty cũng dùng nó, trùng thì sao? Trùng thì sẽ loạn định tuyến và gói tin sẽ không đến được nơi cần đến. Rất may IANA đã nghĩ đến tình huống này, và họ cấp địa chỉ private subnet riêng khác **dành cho ISP là 100.16.0.0/10**, tức là không trùng với 3 private subnet. Cứ khi nào bạn thấy IP nối ISP của bạn từ 100.16 đến 100.127.x.x là bạn đang bị/được ISP NAT lần nữa.
2. Không như home router, con router lớn của ISP phục vụ hàng trăm ngàn thuê bao, nó rất to khoẻ đắt tiền nhưng **lúc quá nhiều, thì cũng chậm** như thường. State table cực to khiến router này làm trễ đi 1-vài đến chục mili giây, mỗi packet bạn qua nó. Khủng nên người ta gọi là Carrier Grade NAT - CGN gateway, dẫu sao cũng là thứ tình thế, tốn tiền. Một router bằng tiền, mà không NAT có thể đáp ứng gấp nhiều lần dung lượng chuyển mạch đó. Dầu sao thì cũng không có cách nào hơn, vì ISP cũng chả đấu giá nổi địa chỉ nữa - còn đâu mà đấu.
3. **Thiếu ổn định và đảo địa chỉ** khi dùng dịch vụ: public IP không chỉ 1, mà ISP dùng cả 1 dải đại diện để NAT luôn (nếu 1 sẽ gặp vấn đề ngay nếu nhiều thuê bao vào cùng 1 chỗ, ví dụ vnexpess hay facebook, sẽ không còn source port để tạo cặp số duy nhất nữa). Khi chia sẻ nhiều, để tránh vô tình bị dồn vào 1 nơi gây nghẽn, Router NAT thường xuyên đổi chọn lựa IP nguồn của nó khi NAT cho thuê bao mở kết nối mới, nên đôi khi bạn thấy tự nhiên website nhận diện public IP bị đổi, có thể đuổi bạn ra bắt đăng nhập lại.
4. **Thua không forward port được** như bài 2 (mã số #4) đã mô tả. Forward cũng không chạy được, do IP 100.x đó may ra từ ngoài truy cập đến được nếu cùng ISP và cùng khu vực bị NAT. Còn không là thua. Tệ nữa là tất cả các dịch vụ bị ảnh hưởng bởi NAT, hoặc các kĩ thuật đục lỗ NAT, peer to peer, UPnP, thua hết cái giải pháp double NAT. Chỉ duy nhất các dịch vụ OTT dùng relay server bên ngoài hoặc chính ISP cung cấp hỗ trợ thì mới hoạt động được với chất lượng không tốt lắm (trễ nhiều hơn). Router lớn cũng ít khả năng sẽ hỗ trợ các ALG, nên dịch vụ mà không hỗ trợ là vô vọng, khỏi dùng.

Với hạn chế rất tiếc trên, chúng ta sẽ nhận thấy thuê bao các mạng này gọi điện Internet sẽ kém, còn lại cơ bản các dịch vụ là ok. Ở VN các mạng mới, nhỏ mà nhắm khách đại chúng như CMC Telecom, mạng cable của SCTV, Saigon Postel ngay từ khi ra đời đã áp dụng CGN. Sau đó, các mạng lớn hơn như FPT, một số của VNPT, Viettel là đã chuyển thuê bao *giá rẻ* sang CGN.

## NAT mặc định trên mobile Internet 3G/4G

Bạn có bao giờ thử xem IP public trên điện thoại của mình là gì chưa? Trên Android có nhiều phần mềm cho biết thông tin này, và tôi dùng Network Signal Info Pro để thấy được thông tin này.

![thông tin mạng 4G Internet](network-signal-pro.png)

Như bạn thấy, địa chỉ IP trên máy bạn là 10.191.102.41, và nó còn xác định địa chỉ sau khi bị NAT là External IP. Nhìn hình bạn có đoán là nhà mạng nào không? Dù thuê bao là 4G, đúng ra theo chuẩn khuyến cáo là đã phải hỗ trợ IPv6 rồi. À cũng bật mí là riêng với Vinaphone, thuê bao được cấp địa chỉ là thuộc nhóm 100.x, nó sẽ giúp bạn NAT thêm lần nữa nếu share Internet cho nhiều máy khác. Chắc họ dùng cho thuê bao ECom nữa.

Rất thông cảm cho các nhà mạng di động, bởi lượng thuê bao rất lớn và độ phát triển rất nhanh. Nhưng hạn chế của NAT sẽ là rào cản của nhiều dịch vụ. Ví dụ VoIP với SIP mà chính điện thoại Android hỗ trợ sẵn, rất khó mà triển khai ổn được. OTT trên 4G tốc độ cao bao nhiêu, thì bên cung cấp OTT sẽ phải relay bấy nhiêu traffic, thử nhân 1 triệu thuê bao với 4Mbit HD video chat xem, OTT có thể relay miễn phí nổi không?

# Lời kết cho NAT

Hi vọng đến đây thì các bạn đã hiểu phần nào kỹ thuật và ứng dụng của NAT, cũng như hạn chế của nó. Trong kỷ nguyên di động số thì các ISP cũng như người dùng sẽ chuyển dần lên IPv6, lý do cạn kiệt địa chỉ đã không còn nữa vì IPv6 quá lớn. IPv6 đã có từ 20 năm (từ khoảng 1998), mà đến nay mới dần phổ biến, nhưng kỹ thuật của nó cũng hết sức khác biệt so với đàn anh IPv4, không cần NAT nhưng kỹ thuật NAT vẫn còn lại trong 1 cái tên mới: prefix translation.

Là những người làm nghề network admin, chắc chắn có lúc bạn phải va chạm đến NAT, hi vọng series này giúp ích cho bạn. Và rồi thì áp dụng IPv6 là không tránh khỏi. Hãy đón đọc những bài sau về IPv6.

Add new comment



Comments

1. Anh Trần 63

gõ tiếng ViệtViệt reply

2. Haurcix

Tikkanen et al <a href=https://bestcialis20mg.com/>cialis online generic</a> reply

3. RisaRailk

Ffzdxu https://newfasttadalafil.com/ - Cialis Preis Cialis 10 Mg Gaslvr <a href=https://newfasttadalafil.com/>Cialis</a> https://newfasttadalafil.com/ - buy cialis usa Poumsw This is the appropriate mode for both support of ventilation and weaning. reply

4. Thach Anh Tran

Demo reCaptcha v2. Is this ok. reply

5. Brietefergy

free casino slot games casino slots free games <a href="https://onlinecasinogameslots21.com/ ">slots games vegas world </a> free penny slot machine games https://onlinecasinogameslots21.com/ reply

6. Thach Anh Tran

Thật là cảm động, có bạn đã comment lần đầu tiên! reply

7. TRAN QUANG HIEP

cảm ơn anh vì bài viết chất lượng reply

8. someone

Hello from Cambodia. reply