Hai câu hỏi quấn vào nhau mỗi khi L2TP, GRE và IPsec cùng nằm trong một ghi chú thiết kế: tôi đang mang phiên nào, và lớp nào bảo vệ nó? Trả lời sai câu đầu thì mọi thứ phía dưới vẫn nhất quán nội bộ trong khi giải sai bài toán — một lớp phủ định tuyến được dựng ở nơi người dùng cần quay số, hoặc một bộ tập trung quay số thay cho cổng site-to-site. Bảng làm việc bên dưới buộc phải phân biệt điều đó trước khi ai đó đăng nhập vào thiết bị. Điền theo thứ tự và mỗi dòng trở thành thứ có thể kiểm tra riêng.

Bắt đầu từ phiên, không phải từ danh sách giao thức

Một người dùng từ xa giữ phiên PPP và một lớp phủ định tuyến giữa hai cổng là hai quan hệ mạng khác nhau, kể cả khi cả hai cuối cùng đều được bọc trong IPsec. Cái đầu kết thúc một liên kết theo người dùng và cần cấp địa chỉ, xác thực một người hoặc thiết bị, và một chính sách nêu rõ người dùng đó được tới những mạng nội bộ nào. Cái sau chuyển tiếp gói giữa các site mà không ai quay số vào.

Viết một câu nêu rõ bạn đang xây cái nào trong hai, rồi đọc lại như thể bạn là người phải vận hành nó. Nếu câu đó cần chữ 'và', bạn đang xây cả hai, và bảng cần hai cột thay vì một cột thỏa hiệp phục vụ mỗi bên một nửa. Nếu nó nêu một người dùng nhưng không có nhóm địa chỉ, hoặc một tiền tố nhưng không có chính sách chuyển tiếp, câu vẫn chưa đầy đủ. Cách diễn đạt nghe quan liêu, nhưng đó là chỗ rẻ nhất để bắt một thiết kế mà nếu không sẽ do phiếu hỗ trợ phát hiện.

Giao cho mỗi lớp đúng một việc

L2TPv2 mang phiên PPP giữa hai đầu của nó. PPP chạy thương lượng liên kết và, khi được thương lượng, xác thực người dùng; L2TP không thêm mật mã nào, nên một daemon L2TP trần không cài đặt phần nào của quan hệ bảo mật IPsec và chỉ thuộc về bên trong một liên kết bạn đã tin.

GRE là một đóng gói giữa hai địa chỉ. Nó mang gói lớp mạng qua một lớp phủ logic và, tự thân, không cung cấp tính bảo mật lẫn danh tính ngang hàng đã xác thực. Đó không phải khuyết điểm: tiêu đề được thiết kế đơn giản để vẫn rẻ khi xử lý trên phần cứng chuyển tiếp. Hệ quả là GRE trả lời 'làm sao chuyển gói này giữa hai địa chỉ' và không gì khác — đúng câu hỏi bạn nên hỏi nó.

Điều đó để IPsec lại làm lớp chọn lưu lượng, xác thực các bên và mã hóa thứ được bảo phải bảo vệ. Bảo vệ lưu lượng nào là một quyết định cấu hình phải khớp với đóng gói mà các đầu thực sự tạo ra, vì chính sách viết cho địa chỉ ngoài của GRE hành xử khác với chính sách viết cho các tiền tố bên trong. Đặc tả GRE giữ tải trọng, tiêu đề GRE và giao thức phân phối ngoài tách bạch rõ ràng, và chính sách của bạn cũng cần sự tách bạch đó.

LayerIts one jobWhat it never does
PPPLink negotiation, optional user authentication, address assignmentProtect traffic between gateways
L2TPv2Carry the PPP session between two endpointsEncrypt or authenticate peers
GREEncapsulate network-layer packets between two addressesHide or authenticate the payload
IPsecAuthenticate peers and encrypt selected trafficCarry a dial-in user session by itself

Viết đường đi của gói trước khi cấu hình

Lấy một gói và liệt kê mọi tiêu đề được thêm vào, theo thứ tự thêm, nêu tên thiết bị thêm nó. Với người dùng quay số, thường là PPP trong L2TP trong IPsec; với lớp phủ site, là gói IP bên trong trong GRE trong IPsec. Nếu hai thiết bị thêm cùng một tiêu đề, bạn có một vòng lặp hoặc một đường hầm trùng, và không chỉnh sửa chính sách nào sửa được.

Cùng danh sách đó quyết định MTU, vì kích thước bên trong dùng được là MTU đường đi đo được trừ các tiêu đề bạn vừa liệt kê và không gì khác. Đừng sao chép một con số từ bài đăng diễn đàn: cộng phần chi phí của IP ngoài, UDP và ESP, rồi GRE hoặc L2TP, rồi PPP nơi áp dụng, và trừ khỏi MTU đường đi bạn thực sự đo. Các triệu chứng chỉ xuất hiện khi truyền lớn, hoặc phiên thiết lập rồi chết ở phản hồi lớn đầu tiên, thường quay về việc phép cộng đó được làm bằng phỏng đoán.

Kiểm tra từng lớp riêng, từ ngoài vào trong

Chạy các kiểm tra theo thứ tự và dừng ở cái đầu tiên thất bại. Mỗi dòng trả lời một câu hỏi khác nhau, nên một thất bại chỉ vào một cột của bảng thay vì nói rằng đường hầm hỏng.

ip xfrm state                  # is the IPsec SA up?
ip -s link show gre1           # does the overlay interface carry packets?
ip route get 10.20.0.5         # does the inner prefix route where you think?
ss -lun | grep -E "1701|4500"  # are the L2TP and NAT-T listeners bound?

Trên thiết bị Cisco, tương đương phụ thuộc vai trò, và cú pháp chính xác phụ thuộc nền tảng và phiên bản: show crypto session cho các bên IPsec, bộ đếm giao diện cho giao diện GRE hoặc đường hầm, và kiểm tra VPDN hoặc PPP cho vai trò quay số. Một bộ lệnh kết thúc PPP không chứng minh gì về hỗ trợ GRE, và một giao diện GRE đang chạy không chứng minh gì về dịch vụ PPP, nên hãy kiểm chứng vai trò bạn thực sự cấu hình chứ không phải vai trò trong sơ đồ.

Ghi mỗi đầu ra bên cạnh dòng bảng mà nó thuộc về. Ghi chú lấy trong lúc sự cố còn sống đáng giá hơn một sơ đồ được vẽ lại sau đó từ trí nhớ.

Sắp xếp việc tháo gỡ, rồi kiểm chứng lại

Việc tháo gỡ chạy ngược lại vì một lý do: đưa lưu lượng được bảo vệ ra khỏi chính sách IPsec trước khi bạn gỡ đóng gói mà chính sách được viết cho nó, nếu không chính sách vẫn trỏ tới một giao diện không còn tồn tại và lần nạp cấu hình tiếp theo thất bại ở một chỗ trông như không liên quan. Trên Linux, điều đó nghĩa là xóa các mục state và policy trước giao diện đường hầm; trên router, gỡ mục crypto map hoặc profile trước đường hầm.

Sau khi dựng lại, lặp lại bốn quan sát nghiệm thu từng cái một: khả năng tới được bên ngoài, một liên kết IPsec đã thiết lập, một phiên PPP đã thiết lập nếu thiết kế có, và chuyển tiếp bên trong tới một địa chỉ đích thật. Một đèn xanh không phải bằng chứng cho ba cái còn lại, và khoảng trống đó là sự cố sống lâu nhất trong vận hành — một đường hầm đã lên, đã mã hóa và không chuyển tiếp gì vì tuyến bên trong chưa bao giờ được thêm.

Giữ bảng đã điền bên cạnh cấu hình thiết bị. Bất kỳ cột nào bạn không điền được là một lớp không có việc được giao, và một lớp không có việc được giao thường là lớp không nên có trong ngăn xếp.

Bài viết liên quan