Lệnh hoạt động khi bạn đã đăng nhập, nên bạn đưa nó vào một script khởi động rồi về nhà. Sáng hôm sau, máy đang trực tuyến còn đường hầm thì không. Huyền thoại là một lệnh gọi chạy được nghĩa là một dịch vụ chạy được. Trên thực tế, khác biệt thường là một trong hai điều: hồ sơ thuộc phiên người dùng của bạn chứ không phải hệ thống, hoặc bí mật được mở khóa bởi thứ chỉ tồn tại sau khi bạn đăng nhập. Cả hai đều hoạt động hoàn hảo trong thử nghiệm thủ công và thất bại đúng vào lúc không ai theo dõi.

Vì sao đăng nhập khiến nó hoạt động

Đăng nhập đồ họa khởi động một bus phiên và một tác nhân dịch vụ bí mật, và đó là nơi nhiều ứng dụng khách hướng máy tính để bàn lưu mật khẩu hồ sơ hoặc cụm mật khẩu của khóa riêng. Một kích hoạt chạy như người dùng của bạn sau khi đăng nhập có thể hỏi tác nhân đó bí mật và thành công. Cùng kích hoạt đó do unit lúc khởi động thực hiện không có phiên, bus hay tác nhân, nên việc tra cứu thất bại hoặc bị chặn ở một lời nhắc không ai thấy.

Chạy cùng hồ sơ trước và sau khi đăng nhập, bạn sẽ nhận hai kết quả khác nhau từ một cấu hình. Đó là dấu hiệu của sự phụ thuộc vào thông tin xác thực, không phải đường hầm hỏng, và giải thích vì sao thử nghiệm thủ công trong terminal chứng minh ít hơn vẻ ngoài của nó. Đường hầm vẫn ổn; thứ mở khóa bí mật của nó đang thiếu.

Quyết định chủ sở hữu nào khởi động đường hầm

Có hai mẫu được hỗ trợ, và trộn chúng là cách khác khiến điều này thất bại. NetworkManager có thể kích hoạt một kết nối ở phạm vi hệ thống, phù hợp khi máy đã tập trung mạng ở đó. Hoặc, một unit systemd chuyên dụng chạy VPN trực tiếp và tự sở hữu giao diện.

systemctl list-unit-files 'openvpn*'
systemctl list-unit-files 'wg-quick*'
nmcli connection show --active
systemctl enable --now wg-quick@wg0

Đừng chạy cả hai chủ sở hữu trên một cấu hình. Nếu NetworkManager quản lý giao diện và một unit cũng đưa nó lên, chúng sẽ tranh nhau tuyến đường và DNS, và trạng thái kết quả phụ thuộc vào việc ai hoàn thành sau cùng.

Đặt bí mật nơi dịch vụ có thể đọc

Dịch vụ nền không thể trả lời một lời nhắc. Cụm mật khẩu chứng chỉ, mật khẩu tài khoản và các tệp xác thực được tham chiếu đều cần một cách lưu trữ mà unit có thể tiếp cận không cần người, thuộc tài khoản chạy dịch vụ và không ai khác đọc được.

Lối tắt hấp dẫn là làm cho tệp đọc được với mọi người cho đến khi lỗi quyền biến mất. Điều đó đánh đổi lỗi khởi động lấy một lần lộ thông tin xác thực dài hạn, và đó là kiểu thay đổi không ai xem lại. Hãy dùng cơ chế mà triển khai đã tin cậy: một tệp thông tin xác thực bị hạn chế, một khóa không mã hóa được bảo vệ bằng quyền tệp, hoặc một kết nối ở phạm vi hệ thống có kho bí mật riêng.

Kiểm tra sự kiện thực sự xảy ra

Khởi động dịch vụ thủ công sau khi đăng nhập gần như không kiểm tra gì. Khởi động lại, hoặc tắt đăng nhập đồ họa trong một chu kỳ, và xem unit tự lên. Đó là thử nghiệm duy nhất kiểm tra đồng thời tính sẵn có của thông tin xác thực, sự sẵn sàng của mạng và thứ tự unit. Đây cũng là thử nghiệm tái tạo sự cố mà người dùng báo cáo, điều mà khởi động thủ công không bao giờ làm.

systemctl is-enabled wg-quick@wg0
journalctl -u wg-quick@wg0 -b --no-pager
systemctl status systemd-networkd-wait-online --no-pager

Thứ tự quan trọng ngang với thông tin xác thực. Một unit khởi động trước khi tuyến lên cơ sở được cấu hình sẽ bỏ cuộc, và một số bản phân phối khác nhau ở việc có chờ kết nối hay không. Nếu unit báo lỗi khi khởi động nhưng thành công khi bạn khởi động thủ công ba mươi giây sau, bạn đã tìm ra vấn đề thứ tự chứ không phải vấn đề bí mật.

Xác minh tuyến đường và DNS, không chỉ giao diện

Một giao diện tồn tại không phải là đường hầm hoạt động. Sau khi khởi động không giám sát, hãy kiểm tra tuyến đường, trạng thái bộ phân giải và một đích theo địa chỉ trước khi kiểm tra tên. Sau đó kiểm tra ứng dụng mà đường hầm tồn tại vì nó.

ip -4 route show
resolvectl status
ping -c 3 10.61.0.1
curl -sS --max-time 5 https://internal.example/ -o /dev/null -w '%{http_code}\n'

Nếu địa chỉ hoạt động mà tên không, vấn đề còn lại là chính sách DNS chứ không phải đường hầm. Ghi lại chủ sở hữu nào khởi động dịch vụ và bí mật nằm ở đâu, vì người tiếp theo khởi động lại máy này sẽ cần cả hai sự thật.

Bài viết liên quan