Một quy tắc khớp hôm qua nay không còn khớp, vì máy khách quay lại với một địa chỉ đường hầm khác. Tuy nhiên bộ cấp phát không hề ngẫu nhiên, và biết thứ tự của nó biến bất ngờ đó thành sự kiện có thể đoán trước. Nó ưu tiên địa chỉ mà chính máy khách đó từng giữ, lùi về địa chỉ trống lâu nhất chưa dùng, và quên hết nếu bạn không cho nó nơi để nhớ. Các quy tắc dựa vào hợp đồng thuê vẫn khớp cho đến ngày chúng lặng lẽ thôi khớp.

Thứ tự mà bộ cấp phát tuân theo

Với một phiên cho mỗi common name, bộ cấp phát trước tiên tìm một địa chỉ mà chính máy khách đó đã dùng trước đây và hiện đang trống. Nếu địa chỉ đó không còn, nó lấy địa chỉ trống đã nhàn rỗi lâu nhất. Khi bật phiên đồng thời cho cùng một tên, ưu tiên địa chỉ trước đó không áp dụng và thay vào đó dùng địa chỉ trống đầu tiên, vì các phiên được coi là những nút ngang hàng riêng biệt.

SituationAddress chosenPractical effect
Reconnect, old address still freeThe remembered addressRules appear stable for days
Old address taken by another clientLeast recently used free addressA working rule silently stops matching
Concurrent sessions, same nameFirst free address, per sessionOne identity can hold several leases

Từ đó có ngay hai hệ quả. Máy khách kết nối lại nhanh thường giữ được địa chỉ của mình, nên không ai nhận ra cơ chế cho đến khi nó thay đổi. Và một thiết bị khác kết nối trong khoảng cửa sổ nhỏ đó có thể lấy địa chỉ khi nó tạm trống, sau đó máy khách đầu tiên nhận được thứ khác và mọi quy tắc gắn với số cũ đều sai. Không sự kiện nào trong hai sự kiện tạo ra một dòng nhật ký trông như lỗi.

Vì sao hợp đồng thuê trông ổn định rồi lại dịch chuyển

Ổn định ở đây là một thuộc tính nổi lên từ những lần kết nối lại đến trước khi ai khác đòi địa chỉ. Đó không phải lời hứa, và nó không được thực thi khi máy khách đang ngắt kết nối. Hãy lên kế hoạch cho việc địa chỉ thay đổi thay vì bị nó làm bất ngờ. Một pool chỉ lớn hơn số thiết bị một chút khiến va chạm thành chuyện thường ngày, vì phương án lùi về địa chỉ lâu nhất chưa dùng gần như không còn gì để chọn.

Đồng thời cao điểm là con số để định cỡ, không phải số người dùng. Ai đó thử nghiệm từ hai thiết bị cùng lúc, hoặc một máy khách kết nối lại trước khi phiên cũ hết hạn, sẽ chiếm hai hợp đồng thuê trong một lúc. Một pool chỉ định cỡ theo số người sẽ tạo ra đúng sự xoay vòng mà người ta đổ lỗi cho máy chủ.

Tệp lưu trữ ghi nhớ, nó không đặt trước

Một địa chỉ sống sót qua lần khởi động lại dịch vụ cần một tệp lưu trữ. Nó lưu tên máy khách và địa chỉ khi tắt máy và đọc lại khi dịch vụ khởi động, nên một lần khởi động lại có kế hoạch không còn xáo trộn mọi quy tắc bạn đã viết.

ifconfig-pool-persist /etc/openvpn/ipp.txt
server 10.8.0.0 255.255.255.0

Điều nó không làm là giữ địa chỉ khi máy khách vắng mặt. Trong khoảng trống đó bộ cấp phát được tự do trao số cho người khác, và tệp khi đó ghi lại một ưu tiên cũ mà kết nối tiếp theo không thể đáp ứng. Hãy coi nó là gợi ý cải thiện hành vi khởi động lại, không phải địa chỉ tĩnh.

Hãy kiểm tra pool với từng mạng con được định tuyến khi bạn đang ở trong tệp. Một dải chồng lấn cấp những địa chỉ mà máy chủ không thể định tuyến tới, và triệu chứng là một máy khách kết nối, nhận địa chỉ và không đến được đâu.

Ghim một địa chỉ đúng cách

Khi một quy tắc tường lửa hoặc bản ghi DNS thực sự cần địa chỉ cố định, hãy gán nó thay vì hy vọng. Một mục cấu hình cho từng máy khách có thể đẩy thẳng địa chỉ và mặt nạ, và mục đó được khóa theo tên máy khách hiệu lực.

# client-config-dir entry for "laptop-acme"
ifconfig-push 10.8.0.50 255.255.255.0

Giữ các địa chỉ cố định bên ngoài pool động để bộ cấp phát không bao giờ trao cùng một số cho phiên khác. Sau đó kiểm tra cấu trúc đường hầm, vì nó thay đổi số địa chỉ pool mà mỗi máy khách tiêu thụ: cách bố trí điểm-đến-điểm cũ tiêu thụ một khối nhỏ cho mỗi máy khách, trong khi cách bố trí mạng con dùng một địa chỉ mỗi bên. Một pool trông rộng rãi dưới cấu trúc này có thể cạn kiệt dưới cấu trúc kia.

Xác nhận kết quả trên máy khách thay vì tin vào sổ sách của máy chủ. Khi phiên trở lại, hãy xem địa chỉ giao diện và tuyến đường được đẩy, vì nhật ký trên máy chủ có thể báo địa chỉ đã yêu cầu trong khi giao diện lại giữ địa chỉ khác.

Địa chỉ từ xa là một câu hỏi riêng

Địa chỉ trong dòng remote của máy khách phải tiếp cận được trước khi có bất kỳ đường hầm nào. Đặt một địa chỉ pool ở đó, chẳng hạn điểm cuối đường hầm của chính máy chủ, nghĩa là máy khách cố tiếp cận điểm cuối qua một đường hầm nó chưa dựng, và kết quả là một vòng lặp hoặc một lần chờ im lặng thay vì lối tắt.

Dùng điểm cuối công khai mà nhà vận hành cung cấp, và giữ pool cho đúng mục đích của nó: địa chỉ bên trong đường hầm. Ghi lại dải pool, các gán cố định và đường dẫn lưu trữ ở một chỗ giúp người tiếp theo không phải coi mỗi hợp đồng thuê là tùy tiện.

Bài viết liên quan