Dòng tuyến của bạn trả về bị từ chối, và lời khuyên bạn tìm thấy nói hãy bật chuyển tiếp IP. Hai điều này nằm ở các giai đoạn khác nhau của vấn đề. Chuyển tiếp quyết định liệu một máy chủ có thể di chuyển gói tin giữa các giao diện hay không; nó không có ý kiến về việc đích bạn gõ có phải là mạng hợp lệ hay không. Hãy sửa tiền tố trước, vì chuyển tiếp sẽ không cứu được địa chỉ và mặt nạ không khớp nhau.

Trình phân tích thực sự phàn nàn điều gì

Một đích được viết dưới dạng địa chỉ cộng mặt nạ phải mô tả một mạng, và mạng bắt đầu bằng các bit máy chủ đã đặt về không. Khi địa chỉ bạn cung cấp vẫn mang một giá trị trong phần máy chủ, cặp này không nhất quán bên trong: 172.20.130.0 trông gọn gàng vì kết thúc bằng số không, nhưng số không ở octet thứ tư không phải là điều duy nhất quan trọng. Chính octet thứ ba đang giữ các bit lạc ở đây.

Các công cụ xử lý sự không nhất quán đó theo cách khác nhau. Trình phân tích nghiêm ngặt từ chối dòng và nêu tên các bit máy chủ. Trình phân tích dễ dãi che địa chỉ bằng mặt nạ và cài đặt thứ bạn không yêu cầu, điều này tệ hơn, vì cấu hình giờ đây định tuyến một dải bạn chưa từng định. Mô-đun ipaddress của Python thể hiện lựa chọn trực tiếp: phân tích mạng nghiêm ngặt báo lỗi, còn strict=False che các bit máy chủ. Ứng dụng khách của bạn có thể nghiêm ngặt, dễ dãi hoặc không nhất quán giữa các phiên bản, vì vậy hãy đọc thông báo thay vì tin vào thói quen.

Làm ví dụ bằng tay

Lấy một đường hầm cần đến 172.20.130.0 với mặt nạ /20. Một /20 vay bốn bit từ octet thứ ba, nên octet đó chỉ được đếm theo bước 16: 0, 16, 32 và tiếp tục đến 240. Giá trị 130 nằm giữa 128 và 143, nghĩa là mạng bao quanh bắt đầu tại 172.20.128.0, không phải tại 172.20.130.0 với octet cuối đặt về không.

Viết ra, khối chạy từ 172.20.128.0 đến 172.20.143.255 và chứa 4,096 địa chỉ. Đưa cùng các giá trị đó cho trình phân tích không nghiêm ngặt sẽ cho thấy phép thay thế mà nó sẽ thực hiện thay bạn:

$ python3 -c "import ipaddress; n=ipaddress.ip_network('172.20.130.0/20', strict=False); print(n, n.num_addresses)"
172.20.128.0/20 4096

Quyết định đích nào bạn thực sự định dùng

Dòng bị từ chối thường che giấu một trong ba ý định, và chỉ bạn mới có thể chọn. Nếu đường hầm cần cả khối, hãy viết 172.20.128.0/20, địa chỉ mạng chuẩn tắc. Nếu đường hầm chỉ cần đoạn 130, mặt nạ đã sai và 172.20.130.0/24 là dạng trung thực. Nếu mục tiêu là một máy duy nhất, tuyến máy chủ IPv4 là /32 và không có phép tính mặt nạ nào tham gia.

Mỗi lựa chọn cho phép một lượng lưu lượng khác nhau, và đó là lý do thật sự để không mở rộng mặt nạ cho đến khi khiếu nại dừng lại. Một /16 chấp nhận dòng gần như ở mọi nơi và gửi lưu lượng đến những đích bạn chưa từng định định tuyến qua đường hầm. Hãy viết tiền tố hẹp nhất khớp với ý định, rồi xác nhận nó với bước nhảy tiếp theo bạn mong đợi, không phải với sự im lặng của trình phân tích.

Vì sao chuyển tiếp không bao giờ là giải pháp

Một tuyến bị từ chối không bao giờ đến đường chuyển tiếp, nên việc bật tắt net.ipv4.ip_forward không thể thay đổi kết quả. Cài đặt đó quan trọng về sau, khi máy chủ phải chuyển gói tin giữa các giao diện, và bật nó trước khi bảng đúng chỉ thay đổi giai đoạn nào sẽ thất bại tiếp theo.

Hai thứ khác thường bị đổ lỗi tại cùng một điểm. Tuyến có thể được chấp nhận mà vẫn thua một tuyến cụ thể hơn, và một quy tắc tường lửa có thể bỏ lưu lượng sau một lần tra cứu đúng. Hãy tách các giai đoạn: cú pháp, cài đặt, lựa chọn, lọc. Làm việc ở giai đoạn sai có vẻ hiệu quả vì mỗi thay đổi khởi động lại một thứ gì đó.

Kiểm tra tuyến đã cài và đường nó thắng

Khi ứng dụng khách chấp nhận dòng, hãy xem nó đã cài gì và nhân chọn tuyến nào cho một địa chỉ đại diện bên trong khối. Nếu tiền tố đã cài khác với thứ bạn viết, một bộ chuẩn hóa đã hành động thay bạn.

Hỏi một địa chỉ thành viên và cả một địa chỉ ngoài khối, để so sánh có ý nghĩa chứ không chỉ một dòng trấn an:

ip -4 route show 172.20.128.0/20
ip -4 route get 172.20.140.10
ip -4 route get 172.20.200.10

Truy vấn thứ ba sẽ rơi ra ngoài đường hầm nếu tiền tố của bạn đúng, và khi không, tuyến bạn xây rộng hơn bạn tưởng. Ghi lại tiền tố đáng lẽ phải bao phủ gì trước khi chạm vào cài đặt tiếp theo, vì tuyến phân tích được và đường chạy được vẫn là hai quan sát riêng.

Bài viết liên quan