9.7. Mạng riêng và NAT

IPv4 được thiết kế với bốn tỷ địa chỉ, nghe có vẻ đủ vào thời điểm đó. Nhưng thực tế không phải vậy. Mỗi ngôi nhà, văn phòng và nhà máy kết nối internet đều cần một khối địa chỉ riêng cho các thiết bị nội bộ, và khi tính thêm cả máy ảnh, điện thoại và thiết bị gia dụng trên toàn thế giới thì bốn tỷ địa chỉ là không đủ.

Giải pháp mà internet lựa chọn là mạng riêng: hầu hết các thiết bị trên mạng cục bộ sử dụng địa chỉ không duy nhất toàn cầu mà chỉ duy nhất trong nội bộ mạng đó, và một thiết bị duy nhất ở biên giới mạng sẽ dịch giữa hai thế giới này. Camera hầu như luôn nằm trên một trong những mạng riêng này.

9.7.1. Các dải địa chỉ riêng

Ba dải IPv4 được dành riêng là không thể định tuyến trên internet công cộng. Bất kỳ mạng cục bộ nào cũng có thể tự do sử dụng các địa chỉ trong các dải này mà không cần phối hợp với ai, vì không có bộ định tuyến nào bên ngoài mạng cục bộ sẽ cố gắng chuyển phát đến chúng:

  • 10.0.0.0 -- 10.255.255.255 (16 triệu địa chỉ; phổ biến trong các mạng doanh nghiệp lớn hơn).

  • 172.16.0.0 -- 172.31.255.255 (khoảng một triệu địa chỉ; ít phổ biến hơn trong thực tế).

  • 192.168.0.0 -- 192.168.255.255 (65 nghìn địa chỉ; mặc định cho hầu hết mọi bộ định tuyến gia đình).

Trên một mạng gia đình thông thường, camera và laptop giao tiếp với nó đều sử dụng địa chỉ 192.168.x.x, vì đó là dải mà bộ định tuyến gia đình chọn cho mạng nó quản lý.

9.7.1.1. Cách netmask hoạt động

Trang Địa chỉ IP đã giới thiệu ký hiệu /24. Lý do nó quan trọng ở đây là netmask là thứ mỗi thiết bị dùng để quyết định gói tin cần đi đến đâu tiếp theo. Mỗi khi camera gửi một gói tin, nó áp dụng netmask của chính mình vào địa chỉ đích và xem xét kết quả:

  • Nếu đích chia sẻ các bit mạng với địa chỉ của camera, đích đó nằm trên cùng mạng cục bộ. Camera gửi gói tin trực tiếp đến nó.

  • Nếu đích không chia sẻ các bit mạng, nó phải nằm trên một mạng khác. Camera gửi gói tin đến cổng mặc định của nó (bộ định tuyến được cấu hình tự động khi kết nối) và để cổng xử lý phần còn lại.

Phép kiểm tra đơn giản đó -- "chúng ta có chia sẻ các bit mạng không?" -- chính là mục đích của netmask. Đó cũng là lý do mạng gia đình mặc định dùng /24: giới hạn 254 thiết bị phù hợp với hộ gia đình và giữ mạng đơn giản.

9.7.2. Network Address Translation

Camera trên địa chỉ 192.168.1.50 không thể chỉ gửi một gói tin tới máy chủ trên internet công cộng -- internet công cộng không định tuyến tới 192.168.x.x. Bộ định tuyến gia đình giải quyết vấn đề này bằng Network Address Translation, hay NAT, và nó thực hiện điều đó một cách trong suốt.

A diagram with three blocks. On the left, two devices on a private network labelled "camera 192.168.1.50" and "laptop 192.168.1.51", both connected to a central box labelled "router". The router has two faces -- a private face labelled "192.168.1.1" toward the devices, and a public face labelled "203.0.113.5" toward the internet. The internet is drawn as a cloud on the right. Arrows from the devices pass through the router and emerge as if from the public address.

NAT ghi đè lại địa chỉ nguồn của các gói tin đi ra thành địa chỉ công cộng của bộ định tuyến, và đảo ngược việc ghi đè đó trên các phản hồi đến, để các thiết bị riêng tư có vẻ như dùng chung một địa chỉ công cộng.

Bộ định tuyến có hai địa chỉ: một địa chỉ riêng trên mạng cục bộ (thường là 192.168.1.1) và một địa chỉ công cộng do nhà cung cấp internet cấp. Khi camera gửi một gói tin đến địa chỉ công cộng, bộ định tuyến

  1. ghi lại địa chỉ riêng + cổng của camera và ghép nó với một cổng đi ra tạm thời của riêng nó;

  2. ghi đè lại địa chỉ nguồn trên gói tin thành địa chỉ công cộng của chính nó (và cổng nguồn thành cổng đi ra đã chọn);

  3. gửi gói tin đã được ghi đè ra phía công cộng.

Khi phản hồi đến được địa chỉ + cổng công cộng của bộ định tuyến, bộ định tuyến tra cứu cặp ghép, ghi đè lại đích thành địa chỉ riêng + cổng của camera, và chuyển phát trên phía cục bộ. Camera không bao giờ biết việc ghi đè đã xảy ra; máy chủ không bao giờ biết nguồn gốc thực sự.

NAT là thứ làm cho mạng gia đình trở nên thực tiễn. Nó cũng có hai hệ quả đáng biết.

9.7.3. Những gì NAT thay đổi

Chiều ra thì dễ. Camera trên mạng riêng có thể nói chuyện ra ngoài tự do. Bất cứ khi nào nó mở một kết nối TCP hoặc gửi một gói UDP đến một máy chủ từ xa, NAT tự động thiết lập cặp ghép. Hầu hết các ứng dụng camera hoạt động theo hướng này: chụp ảnh, đẩy lên một máy chủ nào đó, nhận phản hồi.

Chiều vào thì khó. Một thiết bị trên internet công cộng không thể kết nối trực tiếp đến camera trên mạng riêng. Không có cặp ghép nào để bộ định tuyến tra cứu khi một gói tin không được yêu cầu đến địa chỉ công cộng của nó, vì vậy gói tin không có nơi để đến. Bộ định tuyến hoặc bỏ nó hoặc chuyển nó đến một dịch vụ đang chạy trên chính bộ định tuyến.

Ba giải pháp thay thế cho trường hợp chiều vào khá phổ biến, theo thứ tự thực tiễn tăng dần:

  • Chuyển tiếp cổng. Cấu hình bộ định tuyến để chuyển hướng tất cả các gói tin đến trên một cổng công cộng đã chọn đến một thiết bị riêng cụ thể. Yêu cầu quyền truy cập quản trị vào bộ định tuyến; dễ bị hỏng khi địa chỉ công cộng của bộ định tuyến thay đổi.

  • VPN. Chạy một mạng riêng ảo đặt camera trên cùng mạng logic với bất kỳ ai cần tiếp cận nó. Nặng nề; nằm ngoài phạm vi đối với hầu hết các triển khai camera.

  • Kết nối được khởi tạo từ chiều ra. Camera kết nối ra một máy chủ đã biết trên internet công cộng và giữ kết nối đó mở; máy chủ sử dụng kết nối hiện có để đẩy tin nhắn trở lại. Đây là cách thức hoạt động của thông báo đẩy và hầu hết các giao thức thiết bị kết nối đám mây, và đây là mô hình mà hầu hết các ứng dụng camera cuối cùng sử dụng.

NAT vô hình với mã Python trên camera. Tập lệnh chỉ cần nói chuyện với bất kỳ đích nào cần thiết; bộ định tuyến xử lý việc dịch thuật đằng sau hậu trường. Nhưng hướng của kết nối quan trọng, và NAT là lý do tại sao "camera tiếp cận ra một máy chủ đám mây" là hình dạng dễ dàng hơn nhiều so với "máy chủ đám mây tiếp cận vào camera".