Nebula static_host_map: địa chỉ mà hải đăng không thể cung cấp
Bản đồ ghép một địa chỉ overlay với các điểm cuối có thể tới được trên mạng thật. Chính sự ghép nối đó khiến lần bắt tay đầu tiên trở nên khả thi.
Mỗi hải đăng có thể cho một máy chủ biết về mọi đồng nghiệp khác, trừ chỗ mà chính hải đăng nằm. Có gì đó phải được biết trước khi overlay tồn tại, và Nebula đặt cái đó vào một bản đồ nhỏ. Bản đồ ghép một danh tính overlay với một địa chỉ hoạt động trên mạng thông thường. Mọi thứ học được sau đó đều phụ thuộc vào việc sự ghép nối đó có đúng không.
Hai địa chỉ với hai nhiệm vụ
Mỗi máy chủ Nebula sở hữu một địa chỉ overlay cố định trong khi thiết bị di chuyển giữa các mạng. Địa chỉ đó là danh tính được chứng chỉ, quy tắc tường lửa và quan hệ đồng nghiệp sử dụng, và một mình nó không định tuyến đi đâu cả. Điểm cuối có thể tới được là thứ khác: một tên máy chủ hoặc địa chỉ trên mạng bên dưới cộng với cổng UDP, và nó thay đổi mỗi khi máy thay đổi vị trí. Bản đồ tĩnh là mối nối giữa hai thứ đó.
Chỉ những máy chủ phải gọi nguội mới thuộc về bản đồ, thường có nghĩa là các hải đăng và có lẽ một relay. Giữ danh sách đó ngắn là mục tiêu thiết kế, vì mỗi mục nhập thủ công trở thành một sự thật mà ai đó phải duy trì. Nhầm lẫn hai loại địa chỉ là lỗi cấu hình thường gặp: một địa chỉ công cộng đặt trong danh sách hải đăng không làm khởi động việc khám phá.
Danh tính đi đến nơi danh tính được mong đợi. Khả năng tới được đi vào bản đồ.
static_host_map:
"10.42.0.1": ["lighthouse-01.example.net:4242"]
lighthouse:
am_lighthouse: false
hosts:
- "10.42.0.1"
Cấu trúc của một mục trong bản đồ
Khóa là địa chỉ overlay viết dưới dạng chuỗi trong dấu ngoặc kép, và giá trị là danh sách các điểm cuối, nên một danh tính có thể có nhiều điểm vào. Mỗi điểm cuối mang một máy chủ và một cổng, và cổng phải khớp với thứ mà phía bên kia thực sự lắng nghe. Giá trị mặc định của Nebula là UDP 4242, đây là điểm khởi đầu chứ không phải lời hứa về việc triển khai của bạn.
Nhiều điểm cuối hữu ích khi một hải đăng có nhiều hơn một đường vào, chẳng hạn một địa chỉ công cộng và một địa chỉ riêng cho các máy chủ trong cùng phân đoạn. Máy khách thử chúng theo thứ tự, nên hãy đặt cái đáng tin cậy nhất lên đầu. Với IPv6, đặt địa chỉ trong ngoặc vuông trước khi thêm cổng; làm sai sẽ tạo ra lỗi phân tích cú pháp chỉ vào dòng sai.
Cổng sai tạo ra sự im lặng thay vì lỗi, vì UDP không có bắt tay để từ chối. Vì thế nên kiểm tra định dạng mục nhập theo tài liệu tham chiếu static_host_map của Nebula chứ không theo trí nhớ. Tài liệu tham chiếu cũng bao gồm danh sách điểm cuối và hành vi làm mới DNS.
Bootstrap phải hoạt động trước overlay
Một tên DNS trong bản đồ phải được phân giải qua trình phân giải mà máy chủ có trước khi có bất kỳ đường hầm nào, tức là trình phân giải hệ thống thông thường. Hãy thử điều đó từ cùng máy, lúc khởi động, với overlay đã dừng. Một tên chỉ phân giải được qua DNS riêng của overlay thì không thể bootstrap overlay. Cùng phép thử đó áp dụng cho tuyến đường: một quy tắc tường lửa cho phép overlay nhưng không cho lần trao đổi UDP đầu tiên sẽ chặn gói đầu tiên.
Kiểm tra cổng bằng công cụ UDP thay vì cho rằng nó đang mở. Xác nhận rằng mọi chuyển tiếp cổng trên đường đều nhắm đúng máy chủ nội bộ và có đường quay lại. Nếu tên máy chủ phân giải thành nhiều địa chỉ, hãy thử từng cái, vì máy khách có thể chọn một địa chỉ mà bạn chưa bao giờ kiểm tra.
Các mục tĩnh được gọi trực tiếp và không bao giờ hỏi hải đăng. Đó là lý do một lỗi ở đây giống như hết thời gian chờ bình thường mà không có đồng nghiệp nào tham gia.
Điều gì xảy ra sau lần bắt tay đầu tiên
Khi một máy chủ tới được hải đăng, nó học về các đồng nghiệp và địa chỉ có thể tới được của họ mà không cần thêm mục nhập thủ công. Những máy chủ đã di chuyển kể từ lần kết nối cuối trở nên có thể khám phá qua kênh đó. Đó là phần thưởng của việc giữ bản đồ thủ công nhỏ.
Các máy chủ cũng có thể quảng bá địa chỉ bổ sung có thể tới được của riêng chúng, và đó là cách một đồng nghiệp sau một địa chỉ công cộng đã biết giúp người khác tìm thấy nó. Những quảng bá đó được học, không được gõ vào bản đồ tĩnh.
Hành vi làm mới quan trọng với các điểm cuối được viết dưới dạng tên DNS, vì một địa chỉ đã phân giải có thể thay đổi trong khi tiến trình vẫn chạy. Các cài đặt của Nebula kiểm soát cách những lần tra cứu đó diễn ra, kể cả việc dùng trình phân giải nào, nên hãy đọc chúng thay vì cho rằng mặc định của hệ thống. Trên một máy chủ có trình phân giải thay đổi khi đường hầm lên, cài đặt sai có thể biến một bootstrap đang hoạt động thành một cái tên ngừng phân giải giữa phiên. Ghim việc tra cứu vào một trình phân giải ổn định thường là khác biệt giữa overlay đáng tin cậy và overlay chập chờn.
Khi việc khám phá hoạt động và một đồng nghiệp thì không
Nếu các hải đăng tới được và hầu hết đồng nghiệp kết nối, thì bootstrap không phải vấn đề. Cặp còn lại hoặc không tìm được đường dùng được tới nhau, hoặc thất bại ở tầng trên khả năng tới được. Thêm một cách viết khác của địa chỉ hải đăng không sửa được cả hai trường hợp.
Kiểm tra cặp trước khi sửa bản đồ mà mọi thứ khác đã dựa vào. Thay đổi bản đồ làm xáo trộn mọi máy chủ, nên đó là thứ cuối cùng cần chạm vào, không phải đầu tiên.
Bắt đầu với chứng chỉ từ cùng một cơ quan, vì một lần bắt tay bị từ chối có thể trông từ xa giống một đồng nghiệp không tới được. Sau đó kiểm tra xem cặp có thể thiết lập đường trực tiếp không và liệu có relay được cấu hình cho các mạng từ chối lưu lượng trực tiếp không. Relay thêm một chặng và một phụ thuộc, nhưng đó là câu trả lời được hỗ trợ, và sửa đường của cặp là công việc khác với sửa việc khám phá.