Relay VPN ngừng chấp nhận SSH: giới hạn bộ mô tả tệp
Lưu lượng qua đường hầm vẫn chảy trong khi relay socat phía sau từ chối phiên mới. Theo dõi đường đi, rồi đọc giới hạn kế thừa trên PID đang chạy.
Một bắt tay WireGuard vẫn hoàn tất, peer vẫn hiển thị endpoint gần đây, vậy mà một phiên SSH mới qua relay phía sau lại treo không có banner. Sự kết hợp đó chỉ ra khỏi đường hầm và hướng tới tiến trình chấp nhận socket. Một relay như socat nằm trên đường ứng dụng với ngân sách bộ mô tả riêng, các tiến trình con riêng và các giới hạn kế thừa riêng. Cuộc đi bộ dưới đây bắt đầu ở máy khách và dừng ở thành phần đầu tiên không thể mở thêm socket.
Theo dõi đường đi trước khi đổi một con số
Theo dõi một yêu cầu thất bại thay vì lý luận về toàn bộ đường hầm. Máy khách ghi vào đường hầm, tiến trình nền VPN giải mã và định tuyến, relay chấp nhận ở phía xa. Mỗi bước tiêu tốn bộ mô tả, và bước thường cạn là bước cuối.
Bắt đầu bằng một yêu cầu bạn có thể tái tạo và đo thời gian của nó. Nếu bắt tay TCP hoàn tất nhưng không có banner ứng dụng đến, relay đã nhận socket rồi kẹt trong một tiến trình con hoặc trên chân thượng nguồn của nó. Nếu bản thân bắt tay không bao giờ hoàn tất, nguyên nhân là định tuyến, tường lửa hoặc trạng thái trình lắng nghe, không phải trần bộ mô tả. Ghi lại bạn quan sát dạng nào trong hai dạng, vì chúng chỉ đến các tiến trình khác nhau.
Cũng đếm các bước nhảy nhân đôi công việc. Một trình lắng nghe phân nhánh chuyển mỗi socket được chấp nhận cho một tiến trình con giữ bản sao riêng, nên tổng thực là thuộc tính của cả cây, không chỉ của tiến trình cha.
Đọc giới hạn mà relay kế thừa
Giới hạn duy nhất quan trọng thuộc về tiến trình đang chạy, và nó được đặt bởi thứ đã khởi chạy tiến trình đó. Gõ ulimit -n trong shell mô tả shell. Hỏi trình quản lý dịch vụ xem nó đã áp dụng gì, rồi xác nhận trên PID.
systemctl show -p MainPID -p LimitNOFILE vpn-relay.service
cat /proc/$(systemctl show -p MainPID --value vpn-relay.service)/limits
Tệp limits in ra trần mềm và trần cứng theo cách tiến trình nhìn thấy chúng. Giá trị mềm thấp dưới một giá trị cứng rộng rãi nghĩa là tiến trình nền được phép nâng trần của chính nó, và một số làm vậy khi khởi động; các giá trị mềm thấp bằng nhau nghĩa là tệp unit là nguồn.
Các drop-in được nạp theo thứ tự từ điển và tệp sau thắng, nên systemctl cat vpn-relay.service là góc nhìn có thẩm quyền về những gì được áp dụng. Sửa một tệp mà trình quản lý không bao giờ đọc là lý do phổ biến nhất khiến một con số được nâng lên không có tác dụng.
Tách đồng thời ổn định khỏi trạng thái được giữ lại
Hai tiến trình có thể chạm cùng một trần vì lý do không liên quan, và cách khắc phục khác nhau. Nhu cầu theo dõi các phiên đồng thời hữu ích là câu hỏi về dung lượng. Tăng trưởng tiếp tục sau khi công việc kết thúc là rò rỉ hoặc một tập phiên không ai đóng.
Đo lúc rảnh, ở đỉnh bình thường của bạn và một lần nữa vài phút sau khi tải dừng. Đếm các mục mở bằng ls /proc/PID/fd | wc -l so với giới hạn mềm cho bạn biết khoảng trống, và số đếm thấp hơn trần một hoặc hai là dừng cứng chứ không phải đường chậm.
Khi số đếm không chịu giảm, hãy xem trạng thái socket thay vì tổng số. Các bộ mô tả nằm trong CLOSE_WAIT nghĩa là peer đã đóng còn phía bạn thì chưa bao giờ, đó là lỗi vòng đời ứng dụng mà giới hạn lớn hơn chỉ hoãn lại. Cũng giới hạn mô hình tiến trình con: một relay phân nhánh không có trần cho tiến trình con đồng thời sẽ cạn bộ mô tả, chỗ tiến trình và bộ nhớ cùng lúc.
Kiểm tra giá trị mới trên tiến trình đang chạy
Sau khi sửa unit, nạp lại trình quản lý và khởi động lại dịch vụ, vì chỉ nạp lại không bao giờ thay thế các giới hạn mà một tiến trình đang chạy đã kế thừa. Xác minh trên tiến trình thực sự phục vụ lưu lượng.
systemctl daemon-reload
systemctl restart vpn-relay.service
awk '/Max open files/ {print}' /proc/$(systemctl show -p MainPID --value vpn-relay.service)/limits
ss -tnp state established '( sport = :2222 )' | wc -l
Dòng awk trả về cặp mới; nếu nó vẫn hiển thị cặp cũ, drop-in bạn sửa không phải là cái đang được nạp. Số đếm ss là kiểm tra tải của bạn, nên hãy mở số phiên bạn mong đợi và xem nó tăng. Một số đếm tiếp tục tăng sau khi các phiên đó đóng nghĩa là giới hạn chưa bao giờ là toàn bộ vấn đề.
Mọi lần tăng lớn đều đi kèm một lưu ý. Các ứng dụng thăm dò bằng select() không thể theo dõi bộ mô tả trên FD_SETSIZE, con số là 1024 trên các bản dựng thông thường, nên một trần được nâng vượt qua đó có thể tạo ra thất bại trông không liên quan. Tài liệu tham chiếu thực thi systemd mang cùng cảnh báo cho các dịch vụ mà nó khởi chạy.
Giữ khởi động lại tránh xa tính sẵn sàng của đường hầm
Khởi động lại relay làm rớt các phiên đang hoạt động, và đó là sự kiện riêng so với việc VPN ngừng. Sắp xếp thay đổi để đường hầm vẫn hoạt động trong khi relay quay vòng, và cảnh báo bất kỳ ai có phiên dài cắt qua nó.
Hoàn nguyên là tệp unit trước đó cộng thêm một lần khởi động lại nữa, và tệp đó vẫn tại chỗ cho đến khi giá trị mới sống sót qua một ngày làm việc. Sau đó đóng vòng lặp bằng yêu cầu vốn đã thất bại: một phiên SSH mới qua relay, một lần truyền đủ dài để có ý nghĩa và một số đếm bộ mô tả quay về mức rảnh.