Kiểm tra định tuyến VPN trong không gian tên mà không chạm vào tuyến của máy chủ
Ba vai trò mô phỏng, ba ngữ cảnh cô lập và một veth cho mỗi liên kết. So sánh phòng thí nghiệm không gian tên với phòng thí nghiệm tuyến máy chủ trước khi chạm vào máy chủ.
Hai phòng thí nghiệm có thể mô hình hóa cùng một cấu trúc liên kết VPN và thất bại theo những cách hoàn toàn khác nhau: một cái sống trong không gian tên mạng, cái kia trên các tuyến riêng của máy chủ. Phiên bản không gian tên giữ mọi giao diện, tuyến và ổ cắm trong một ngữ cảnh mà bạn có thể xóa, trong khi phiên bản máy chủ khởi động nhanh hơn và để lại trạng thái phía sau. Chính trạng thái còn sót lại đó là lý do khiến phòng thí nghiệm thứ hai khó lặp lại sau một tháng. Hãy so sánh việc dọn dẹp trước, vì nó quyết định bạn có thể chạy thí nghiệm hai lần hay không.
Hai cách dựng cùng một phòng thí nghiệm, và khi nào mỗi cách thắng
Trong phòng thí nghiệm tuyến máy chủ, bạn thêm một giao diện đường hầm và các tuyến vào máy bạn đang làm việc, nên thí nghiệm chia sẻ số phận với shell, trình quản lý gói và mọi kết nối khác. Trong phòng thí nghiệm không gian tên, mỗi vai trò nhận ngăn xếp giao diện, địa chỉ, tuyến và ổ cắm riêng, và xóa không gian tên sẽ loại bỏ tất cả. Không mô hình nào đúng hơn, vì chúng trả lời những câu hỏi khác nhau. Chọn không gian tên khi chủ đề là định tuyến và chuyển tiếp, và phòng thí nghiệm máy chủ khi chủ đề là cách một ứng dụng khách máy tính để bàn tích hợp.
| Aspect | Namespace lab | Host-route lab |
|---|---|---|
| Isolation | Full stack per role | Shares the host stack |
| Cleanup | Delete named namespaces | Manual route and rule removal |
| Realism | Strong for routing | Needed for GUI clients |
Trộn lẫn hai thứ là sai lầm thường gặp: một phòng thí nghiệm không gian tên được kiểm tra với ứng dụng khách chỉ có trên máy chủ không chứng minh được gì về cách bố trí nào. Quyết định bạn đang hỏi câu gì trước khi tạo liên kết đầu tiên.
Một ngữ cảnh cho mỗi vai trò, được kết nối có chủ đích
Tạo một không gian tên cho mỗi vai trò và chuyển mỗi đầu của mỗi cặp veth vào ngữ cảnh sở hữu nó. Bốn lệnh đầu tiên đủ để thấy hình dạng:
ip netns add client
ip netns add gateway
ip link add veth-c type veth peer name veth-g
ip link set veth-c netns clientCho phòng thí nghiệm những dải không trùng với bất cứ thứ gì trên máy chủ, và ghi lại trước khi bắt đầu không gian tên nào sở hữu địa chỉ nào. Một phòng thí nghiệm hoạt động cần hai đường riêng biệt: một đường bên ngoài để điểm cuối VPN đến được đối tác của nó, và một đường quay về cho tài nguyên được bảo vệ. Mô hình hóa chúng như hai quyết định, vì phòng thí nghiệm chỉ dựng nửa đi ra sẽ qua bài kiểm tra bắt tay và trượt bài kiểm tra ứng dụng.
Vai trò chuyển tiếp là nơi phòng thí nghiệm trở nên thú vị
Một vai trò phải chuyển tiếp, nghĩa là bật chuyển tiếp bên trong không gian tên đó và thêm quy tắc mà thiết kế cần. Trạng thái chuyển tiếp là theo từng không gian tên, nên cài đặt máy chủ không liên quan đến phòng thí nghiệm và cài đặt phòng thí nghiệm không rò rỉ ra ngoài, như tài liệu về không gian tên mạng mô tả. WireGuard ghi nhận rằng một giao diện và ổ cắm bên ngoài của nó có thể sống trong các không gian tên khác nhau, đây là một mẹo hữu ích và một cách tuyệt vời để tự làm mình bối rối. Đừng cho rằng di chuyển một giao diện sẽ di chuyển mọi phần của kết nối theo cùng một cách.
Kiểm tra bộ đếm chuyển tiếp sau một gói thử, vì một quy tắc chưa bao giờ khớp và một quy tắc đã loại bỏ trông giống hệt nhau trong bảng tuyến. Chỉ các bộ đếm mới phân biệt chúng.
Ghi lại đường cơ sở, rồi phá một tuyến
Bắt đầu bằng việc ghi lại những gì tồn tại, với ngữ cảnh được viết bên cạnh mỗi dòng. Đọc các không gian tên, sau đó là tuyến mà một đích thử sẽ đi bên trong một trong số chúng, sau đó là các bộ đếm trên liên kết mang nó:
ip netns list
ip -n client route get 10.0.0.5
ip -n gateway -s link show veth-gLệnh thứ ba là lệnh mọi người bỏ qua, và đó là nơi bằng chứng sống: bộ đếm số gói bị loại bỏ và lỗi cho bạn biết liệu một gói có đến được vai trò chuyển tiếp hay không. Ghi lại ba chế độ xem giống nhau sau một thay đổi, và để diff trở thành bằng chứng thay vì ký ức của bạn. Sau đó phá chính xác một thứ, hoặc bằng cách xóa một tuyến hoặc bằng cách thêm quy tắc từ chối trên đường chuyển tiếp, và xác nhận triệu chứng bạn đã dự đoán: một cuộc bắt tay hoàn tất mà không có phản hồi, hoặc một lỗi phân giải thay vì hết thời gian chờ. Một phòng thí nghiệm chỉ chứng minh thành công dạy được rất ít.
Dọn dẹp là thứ khiến lần chạy sau có thể lặp lại
Giữ việc dọn dẹp trong phạm vi các tài nguyên bạn đã đặt tên, vì đặt lại toàn bộ tường lửa hoặc xóa tuyến máy chủ không phải là khả năng tái lập, mà là sự cố thứ hai. Lưu lại cấu trúc liên kết, các lệnh chính xác và những quan sát bạn mong đợi, để lần chạy sau tái tạo cùng lỗi thay vì đoán ngữ cảnh nào đã giữ trạng thái trước đó. Không có bản ghi đó, phòng thí nghiệm là một câu chuyện chứ không phải một quy trình.
Dùng thông tin đăng nhập được tạo cục bộ cho phòng thí nghiệm, và giữ tài khoản sản xuất ra khỏi các ví dụ chia sẻ. Sau đó xóa từng không gian tên và xác nhận chế độ xem máy chủ không thay đổi, đó là toàn bộ lý do chọn mô hình này. Một phòng thí nghiệm bạn không thể xóa sạch là một thay đổi máy chủ với các bước thừa.