Ai đó đã tạo tun1 trước, hồ sơ ghi dev tun1, và kết nối vẫn không gắn được. Việc tên tồn tại trên máy chủ hầu như không nói lên điều gì, vì việc gắn phụ thuộc vào không gian tên, loại thiết bị, ai sở hữu liên kết và daemon được phép làm gì. Dùng lại một thiết bị cũng buộc phải đưa ra một quyết định mà cấu hình mặc định che giấu: thành phần nào ghi địa chỉ và tuyến đường. Các kiểu hỏng của hai cách bố trí khác nhau nhiều hơn các dòng cấu hình, nên hãy quyết định trước khi sửa hồ sơ.

Tên không phải là gắn

dev tun1 yêu cầu OpenVPN cung cấp giao diện có tên đó, và các bản dựng không gian người dùng truyền thống sẽ cố mở nó. Nếu tên không theo mẫu tun hoặc tap thông thường, hồ sơ cũng cần dev-type tương ứng, vì loại không bao giờ được suy ra từ một chuỗi. Thiết bị TAP không phải thiết bị TUN với nhãn khác: gắn nhầm hoặc thất bại ngay hoặc tạo ra một liên kết mang các khung mà không ai mong đợi. Hãy kiểm tra loại trước mọi thứ khác, vì mọi kiểm tra sau đó đều giả định hai bên đồng ý về nó. Từ đó, hãy xác nhận rằng tiến trình thực sự có thể mở thiết bị, chứ không chỉ nhìn thấy nó.

dev tun1
dev-type tun

Giao diện mạng và /dev/net/tun là những đối tượng khác nhau: một là liên kết bên trong không gian tên, còn kia là thiết bị ký tự mà chương trình trong không gian người dùng dùng để gắn. Tài liệu Linux TUN/TAP mô tả đường gắn đó và các quy tắc sở hữu đối với thiết bị lâu dài. Một shell root có thể chạy ip link chỉ chứng minh shell có đặc quyền, không phải daemon có. Quyền sở hữu nút thiết bị, tập năng lực của dịch vụ và người dùng mà nó chạy dưới đều phải khớp trước khi việc mở thành công.

Một thiết bị tồn tại mà không mở được là vấn đề sở hữu, không phải vấn đề định tuyến. Hãy xử lý nó như vậy khi gỡ lỗi, nếu không buổi chiều sẽ trôi qua để đọc những bảng định tuyến chưa bao giờ là vấn đề.

Ai cấu hình liên kết: hai mô hình sở hữu

Trong mô hình thứ nhất, OpenVPN cấu hình địa chỉ và tuyến đường như một phần của việc dựng kết nối. Đó là hành vi mặc định và dễ lý giải nhất, vì một thành phần tạo ra trạng thái rồi lại xóa nó. Trong mô hình thứ hai, một trình quản lý bên ngoài sở hữu giao diện, và ifconfig-noexec ngăn OpenVPN chạy các lệnh cấu hình địa chỉ của nó rồi chuyển tham số cho các script. Khi đó trình quản lý phải tự áp dụng cấu hình cục bộ và cấu hình đối tác đúng, việc này nhiều công hơn tên tùy chọn gợi ý. Chọn giữa hai mô hình là câu hỏi ai được thay đổi liên kết khi nó đang hoạt động.

ifconfig-noexec chỉ bao gồm địa chỉ: bảng định tuyến không bị đụng tới, và việc cấu hình tuyến đường thuộc về route-noexec. Hãy coi hai chỉ thị là hai cơ chế điều khiển riêng với chủ sở hữu riêng, vì đặt cái này và giả định cái kia là nguồn phổ biến của những liên kết được cấu hình nửa vời. Chọn đúng một chủ sở hữu cho mỗi lớp, địa chỉ ở một nơi và tuyến đường ở một nơi. Một trình quản lý mạng và một trợ lý VPN cùng ghi địa chỉ chính là cách một lần ngắt kết nối xóa trạng thái mà phía bên kia vẫn còn phụ thuộc.

Kiểm tra thiết bị từ không gian tên quan trọng

Hãy kiểm tra thiết bị từ không gian tên nơi tiến trình VPN chạy, chứ không phải từ nơi shell của bạn tình cờ ở. Hai lệnh dưới đây trả lời những câu hỏi khác nhau, và sự khác biệt lộ ra khi máy chủ thấy một giao diện mà container không thấy. Hãy chạy chúng theo thứ tự đã cho, vì lệnh thứ hai chỉ có nghĩa sau khi bạn biết liên kết có tồn tại hay không.

ip -details link show dev tun1
ip tuntap show

Lệnh thứ nhất in liên kết như hạt nhân nhìn thấy, bao gồm cờ và loại giao diện, và đó là cách bạn xác nhận đây là thiết bị mình định nói tới. Lệnh thứ hai liệt kê các mục tun/tap lâu dài, chúng tồn tại mà không tiến trình nào giữ. Một giao diện đang chờ chủ sở hữu được chỉ định là tình huống khác với một đường hầm sống gắn vào VPN khác, và chỉ lệnh thứ hai giải thích vì sao việc gắn của chính bạn thất bại. Hãy tìm tiến trình đang giữ thiết bị trước khi thay đổi bất cứ thứ gì, vì mục lâu dài và giao diện đang bận có cách khắc phục khác nhau.

Hỗ trợ nhiều hàng đợi là một cách bố trí trình điều khiển cụ thể với những yêu cầu riêng, không phải sự cho phép để các tiến trình không liên quan chia sẻ một giao diện. Phiên sống của chủ sở hữu khác là vấn đề phối hợp, và không bản sửa hồ sơ nào giải quyết được.

Hai kiểu bền vững

Tính bền vững của hạt nhân và persist-tun mô tả những vòng đời dễ nhầm lẫn và tốn kém khi lẫn lộn. Một thiết bị lâu dài tồn tại độc lập với mọi tiến trình, nên nó sống sót qua lần dừng và lần khởi động sau có thể dùng lại. persist-tun giữ tài nguyên qua các lần đặt lại mềm được hỗ trợ bên trong một tiến trình OpenVPN, một chân trời ngắn hơn nhiều. Cả hai đều không hứa rằng dừng dịch vụ sẽ để tuyến đường và địa chỉ tại chỗ, và một giao diện còn nhìn thấy được không phải bằng chứng của một phiên mã hóa đang hoạt động.

Cũng hãy xác nhận backend, vì một giao diện được tạo trước không nói gì về việc trình triển khai nào sẽ mở nó. Các bản dựng cộng đồng mang đường dữ liệu trực tiếp sẽ cố dùng nó trừ khi thiết kế nói khác. Ở nơi phiên bản hỗ trợ công tắc đó, disable-dco chọn đường không gian người dùng thay thế; động cơ cũ và các ứng dụng khác không có chỉ thị như vậy, nên hãy giữ điều kiện phiên bản bên cạnh tùy chọn thay vì cho rằng nó áp dụng.

Điều gì hỏng khi chỉ kiểm tra khởi động

Một thỏa thuận sở hữu có thể qua bài kiểm tra đầu tiên và hỏng ở bài cuối, khiến việc khởi động tự nó là một phép kiểm tra yếu. Thay vào đó hãy quan sát hai chuyển tiếp: một lần đặt lại mềm, và một lần dừng hoàn toàn rồi khởi động.

systemctl status openvpn-client@lab
ip -details link show dev tun1

Khởi động là trường hợp dễ: unit lên, liên kết xuất hiện và đầu ra trạng thái nêu tên hồ sơ đã tải. Gắn là thời điểm daemon mở thiết bị, nên hãy chạy kiểm tra liên kết sau khi unit báo hoạt động, không phải trước đó. Nếu liên kết tồn tại trong khi trạng thái vẫn đang kích hoạt, bạn đang nhìn một thiết bị lâu dài mà chưa ai gắn vào, không phải một đường hầm đang hoạt động. Hãy cho lưu lượng thật đi qua liên kết trước khi tiếp tục, vì một giao diện đã gắn mà không có tuyến đường dùng được vẫn là thất bại.

kill -SIGHUP $(pidof openvpn)
journalctl -u openvpn-client@lab -n 40
systemctl stop openvpn-client@lab
ip -details link show dev tun1

Một lần đặt lại mềm nên để phiên dùng được và tài nguyên nguyên vẹn, và đó là việc persist-tun làm. Dừng hoàn toàn là nơi một trình quản lý bên ngoài tự lộ diện: nếu liên kết hoặc địa chỉ của nó sống sót qua lần dừng, ai đó khác sở hữu chúng, và đó hoặc là trạng thái bạn đã ghi lại hoặc là lỗi bạn vừa tìm ra. Ghi cả hai quan sát bên cạnh hồ sơ, để lần thay đổi tiếp theo bắt đầu từ bằng chứng chứ không từ sơ đồ.

Bài viết liên quan