Khởi động cùng một cấu hình máy chủ hai lần, và tiến trình thứ hai thoát với lỗi địa chỉ đã được sử dụng cho cổng 1194. Trong trường hợp thông thường, lần chạy chẩn đoán đã tạo ra xung đột, và phiên bản gốc vẫn phục vụ khách hàng hoàn toàn tốt. Câu chuyện này giải thích phần lớn các báo cáo như vậy, và đáng để nhận ra trước khi khởi động lại bất cứ thứ gì. Đây cũng là phiên bản rẻ nhất để giải quyết.

Lỗi mô tả một liên kết cục bộ và không gì hơn. Đây không phải bằng chứng rằng nhà cung cấp chặn cổng, rằng khách hàng gửi sai mật khẩu, hay rằng chuỗi chứng chỉ bị hỏng.

Đọc chính xác lỗi liên kết

Hai lỗi trong nhóm này có nghĩa khác nhau, và việc nhầm lẫn chúng sẽ đưa bạn đến tầng sai. «Địa chỉ đã được sử dụng» nghĩa là một socket khác đang giữ điểm cuối bạn yêu cầu. «Địa chỉ không khả dụng» nghĩa là địa chỉ bạn yêu cầu chưa tồn tại trên máy chủ này, đó là vấn đề sẵn sàng chứ không phải bản trùng.

systemctl status openvpn-server@lab --no-pager
journalctl -u openvpn-server@lab -n 20 --no-pager

Sao chép văn bản lỗi trước khi thay đổi bất cứ điều gì, bao gồm địa chỉ và cổng mà nó nêu. Một dịch vụ chờ giao diện xuất hiện sẽ ghi lỗi thứ hai lặp đi lặp lại rồi liên kết thành công khi địa chỉ tồn tại; một dịch vụ ghi lỗi thứ nhất sẽ không bao giờ thành công cho đến khi bản trùng được giải quyết. Ghi lại bạn đã thấy lỗi nào không tốn gì và tiết kiệm một cuộc tìm kiếm giao diện vô ích.

Kiểm kê socket, không phải cổng

Số cổng là một bản kiểm kê chưa đầy đủ. Điểm cuối là giao vận, họ địa chỉ, địa chỉ cục bộ và cổng, tất cả trong một không gian tên mạng. Trình lắng nghe UDP và trình lắng nghe TCP trên cùng một số là các socket khác nhau, và hai tiến trình trên cùng một số trong các không gian tên khác nhau không bao giờ gặp nhau.

ss -lunp | grep -F ':1194'
ss -ltnp | grep -F ':1194'
ss -lunp 'sport = :1194'

Chạy trước giao vận mà cấu hình thực sự dùng. Sau đó nhìn vào cột địa chỉ cục bộ chứ không chỉ con số: liên kết ký tự đại diện bao phủ mọi địa chỉ cục bộ, nên tiến trình thứ hai yêu cầu một địa chỉ cụ thể có thể xung đột với nó dù các chuỗi in ra khác nhau. Tùy chọn tái sử dụng socket và quy tắc nền tảng quyết định kết quả chính xác, vì vậy đây nên là quan sát chứ không phải quy tắc bạn áp cho mọi lần triển khai.

Tìm ra tiến trình nào sở hữu nó

Các điểm cuối số cùng thông tin tiến trình nhận diện chủ sở hữu khi quyền của bạn cho phép, và chủ sở hữu là thứ bạn cần, không phải tên chương trình. Hai tiến trình OpenVPN có thể chạy các cấu hình khác nhau, và tiến trình giữ trình lắng nghe có thể là tiến trình bạn ít ngờ nhất.

sudo ss -lunp 'sport = :1194'
sudo fuser -v -n udp 1194

So sánh những gì tìm thấy với trình quản lý dịch vụ, môi trường chạy container hoặc tiến trình terminal còn sót lại từ lần kiểm tra trước. Việc thiếu chi tiết tiến trình không phải bằng chứng rằng socket không có chủ; thường có nghĩa là truy vấn chạy mà không đủ quyền. Tương tự, danh sách chỉ TCP không xóa bỏ xung đột UDP, nên hãy kiểm tra giao vận được nêu trong lỗi. Chỉ tên tiến trình không bao giờ cho biết cấu hình nào đã tải, và chính cấu hình quyết định điểm cuối.

Một chủ, hoặc hai phiên bản được thiết kế

Nếu triển khai dự định một máy chủ, hãy giữ một chủ vòng đời và đọc nhật ký của phiên bản đó hoặc log đã cấu hình thay vì khởi chạy bản sao thứ hai để quan sát nó. Khi thực sự cần chạy nền trước có kiểm soát, hãy dừng phiên bản được quản lý một cách có chủ đích và cân nhắc các khách hàng mà nó đang phục vụ trước khi làm vậy.

Nếu dự định hai phiên bản, hãy cho chúng trình lắng nghe riêng và mọi thứ khác riêng: nhóm địa chỉ, giao diện ảo, chính sách định tuyến và quyền sở hữu cấu hình. Chỉ một cổng khác không tách được gì ngoài socket, và hai máy chủ vẫn sẽ tranh nhau cùng một nhóm và cùng các tuyến.

Ba lối tắt đáng được nêu tên vì chúng xuất hiện trong mọi thảo luận về lỗi này. Đừng giết một PID tùy tiện trông giống thủ phạm. Đừng bật chia sẻ socket để làm im lặng thông báo. Đừng chuyển cấu hình máy chủ sang cấu hình không liên kết kiểu khách hàng vì điều đó làm lỗi liên kết biến mất; máy chủ trở nên không thể truy cập theo cách khó chẩn đoán hơn xung đột ban đầu.

Đổi cổng là câu trả lời hợp lệ chỉ khi trình lắng nghe mới là một phần của thiết kế đã được phê duyệt, bao gồm quy tắc chuyển tiếp và điểm cuối của khách hàng. Nếu những thứ đó chưa được cập nhật, bạn đã chuyển xung đột đến nơi không ai có thể tìm thấy.

Xác minh liên kết trước mọi thứ khác

Sau khi sửa trong phạm vi, hãy xác nhận phiên bản dự định đang hoạt động, trình lắng nghe của nó xuất hiện trên giao vận bạn mong đợi, và một khách hàng có thể kết nối. Một liên kết thành công chỉ hoàn tất giai đoạn socket cục bộ; nó không chứng nhận gì về xác thực hay về lưu lượng sau khi đường hầm được dựng.

ss -lunp 'sport = :1194'
systemctl is-active openvpn-server@lab
journalctl -u openvpn-server@lab -f

Nếu socket tồn tại mà khách hàng vẫn thất bại, vấn đề còn lại nằm ở hạ nguồn và lỗi liên kết giờ đã là quá khứ. Chính sự tách biệt đó là toàn bộ ý nghĩa của việc đọc thông báo chính xác trước tiên: một lỗi, một tầng, một chủ. Hãy đọc như vậy và triệu chứng tiếp theo sẽ bắt đầu từ trạng thái đã biết chứ không phải từ phỏng đoán.

Bài viết liên quan