Bảng định tuyến thường bị đọc là hỏng mỗi khi cột cổng trống, trong khi dòng đó thường đã đầy đủ tự thân. Trường via chỉ xuất hiện khi hạt nhân chuyển gói tin cho một địa chỉ chặng kế tiếp; tuyến gắn với một giao diện lại đến đích của nó thông qua phân giải ở lớp liên kết hoặc qua một đối tác điểm-điểm. Đọc các cột từ trái sang phải cho biết bạn đang ở trường hợp nào, và việc đọc đó nên diễn ra trước khi bất kỳ ai sửa một tuyến mặc định. Hầu hết phiếu hỗ trợ về cổng bị thiếu đều kết thúc ở sự phân biệt này.

Đọc một dòng tuyến theo từng cột

Mỗi mục bắt đầu bằng điểm đích và độ dài tiền tố của nó, rồi thêm các bổ ngữ trong một từ vựng cố định: via, dev, proto, scope, src và metric. Một dòng như 198.51.100.0/24 dev tun0 proto kernel scope link src 198.51.100.2 dày đặc nhưng được chỉ định đầy đủ. Không thiếu gì trong đó, và không có địa chỉ bộ định tuyến nào được ngầm hiểu.

Phần thú vị là việc thiếu via. Không có chặng kế tiếp, hạt nhân phân giải điểm đích trực tiếp trên giao diện được nêu tên, mà với một đường hầm nghĩa là chuyển khung cho thiết bị đường hầm và để việc đóng gói tiếp nhận từ đó. proto kernel ghi nhận rằng mục này được cài tự động khi một địa chỉ được gán, chứ không phải do quản trị viên gõ vào. scope link nói rằng điểm đích có thể đến được trên liên kết đó mà không phải đi qua bộ định tuyến, và src nêu địa chỉ mà hạt nhân sẽ ưu tiên làm nguồn cho lưu lượng khớp.

Bây giờ đọc một tuyến mặc định theo cùng cách: default via 192.0.2.254 dev eth0 proto static metric 100. Ở đây via hiện diện vì gói tin thực sự cần một chặng kế tiếp, và chặng đó phải tự nó đến được trên eth0. Hai dòng đó không phải là biến thể của nhau; chúng trả lời những câu hỏi khác nhau về nơi lưu lượng đi tới.

Hai hình dạng tuyến thường bị nhầm lẫn

Một tuyến mạng con của đường hầm và một tuyến mặc định trông giống nhau trong ảnh chụp màn hình nhưng hành xử hoàn toàn khác. Dùng bảng dưới đây như trợ giúp đọc các trường, rồi xác nhận những con số thực tế trên chính máy bạn đang gỡ lỗi thay vì tin vào một ví dụ trong hướng dẫn.

Piece of the lineWhat it settlesWhat it says nothing about
The destination and maskWhich packets are eligible to matchWhere those packets leave the host
via plus its addressWhich next hop receives them, and therefore that a router is involvedWhether that router is reachable or sane
devWhich interface carries the encapsulated or raw packetWhether the interface is up or has a carrier
proto and scopeWho installed the entry and how far the destination is considered to beWhether a firewall later drops the traffic

Điều bảng không thể nói là ý định. Một tuyến trực tiếp tới dải riêng qua đường hầm là thiết kế đường hầm chia tách có chủ đích; cùng hình dạng đó xuất hiện trên một máy chủ lẽ ra phải gửi mọi thứ qua VPN lại là một triệu chứng. Ý định nằm trong cấu hình đã tạo ra mục đó, nên hãy xem công cụ đã cài đặt nó trước khi kết luận rằng hạt nhân đã làm sai điều gì.

Tương tự, một cổng bị thiếu không phải là sự cho phép bịa ra một cổng. Nếu một tuyến thực sự cần chặng kế tiếp, chặng đó phải đến được trên giao diện mang nó, và với đường hầm điểm-điểm thì địa chỉ của đối tác không phải là cùng một đối tượng với địa chỉ cục bộ. Coi địa chỉ đường hầm cục bộ như một bộ định tuyến Ethernet là cách phổ biến để tạo ra một tuyến trông có vẻ đúng mà không chuyển tiếp gì cả.

Hỏi hạt nhân xem nó thực sự sẽ dùng dòng nào

Đọc bảng không giống như thực hiện tra cứu, vì hạt nhân tham vấn các quy tắc chính sách, nhiều bảng và các mục được lưu đệm trước khi trả lời. Động từ thực hiện tra cứu thật sự là ip route get, và nó in ra tuyến mà một gói tin với các thuộc tính đó sẽ đi.

ip route get 203.0.113.37 from 198.51.100.2 iif tun0

Thay bằng điểm đích mà bạn thực sự quan tâm, rồi thêm from hoặc iif khi lưu lượng được chọn theo nguồn hoặc được chuyển tiếp, bởi vì một tra cứu cục bộ thông thường có thể chọn đường khác với một máy khách được chuyển tiếp. Câu trả lời nêu giao diện, địa chỉ nguồn được chọn và bất kỳ chặng kế tiếp nào, đó chính là thông tin mà một gói tin sẽ được định tuyến theo vào thời điểm đó.

Nếu câu trả lời làm bạn ngạc nhiên, hãy in các quy tắc trước khi thay đổi bất cứ điều gì: ip -4 rule show liệt kê chúng theo thứ tự ưu tiên, và một máy khách VPN cài bảng riêng hoặc quy tắc cho các gói tin được đánh dấu sẽ hoàn toàn không xuất hiện trong bảng chính. Việc liệt kê mọi bảng sẽ lấp khoảng trống đó.

ip -4 route show table all | grep -E 'tun|default'

Kiểm tra lớp nền trước khi thay thế tuyến mặc định

Các gói tin của chính đường hầm phải đến được điểm cuối từ xa, và chúng làm điều đó qua giao diện vật lý bằng tuyến đã tồn tại trước khi VPN hoạt động. Thay thế toàn bộ tuyến mặc định mà không ghim điểm cuối đó sẽ đẩy các gói tin đã đóng gói vào chính đường hầm mà chúng lẽ ra phải dựng lên, và kết nối sụp đổ. Trước tiên hãy xác nhận đường tới điểm cuối bằng một tra cứu chỉ cho địa chỉ điểm cuối.

Giữ ba thứ tách biệt khi bạn thực hiện thay đổi: tuyến tới điểm cuối phải ở lại trên giao diện vật lý, các dải riêng nên đi vào đường hầm, và tuyến mặc định quyết định mọi thứ còn lại. Tách chúng theo thứ tự đó, áp dụng từng cái một, và chạy lại tra cứu sau mỗi bước. Một ping thất bại sau đó tự nó chứng minh rất ít, vì quyền, định tuyến trả lời, DNS và bản thân dịch vụ đều nằm ở hạ nguồn của một tuyến đúng.

Ghi lại bốn giá trị mà dòng đó đã cho bạn trước khi sửa: điểm đích, chặng kế tiếp hoặc sự vắng mặt của nó, thiết bị và nguồn được chọn. Nếu một thay đổi sau đó dịch chuyển bất kỳ giá trị nào, bạn biết quyết định nào thực sự đã bị thay đổi, và có thể khôi phục một mục thay vì đoán toàn bộ bảng.

Bài viết liên quan