Trạng thái VPN trên macOS từ terminal: scutil, tuyến đường hay ping
Trạng thái dịch vụ, tuyến đường trong nhân và một yêu cầu thực tế trả lời ba câu hỏi khác nhau. Viết script theo mã định danh dịch vụ và kiểm tra cả tuyến đường.
Đâu đó trong một script triển khai có bước kiểm tra xem đường hầm có hoạt động không trước khi bắt đầu sao chép. Có ba câu trả lời và chúng không cùng nghĩa: trạng thái dịch vụ mà scutil báo cáo, tuyến đường mà nhân đã chọn, và việc đầu bên kia có thực sự phản hồi hay không. So sánh chúng là khác biệt giữa một bước kiểm tra dự đoán được việc sao chép và một bước chỉ trang trí nhật ký.
Ba câu trả lời cho câu hỏi VPN có đang hoạt động không
Trạng thái dịch vụ là một sự thật của mặt phẳng điều khiển. macOS biết một cấu hình đã kết nối vì tiến trình ứng dụng khách của nó nói vậy. Tuyến đường là sự thật của mặt phẳng dữ liệu: nhân sẽ gửi đích này qua giao diện đó. Khả năng tiếp cận là sự thật từ đầu đến cuối, và nó có thể thất bại vì những lý do mà hai cái kia không thấy.
| Signal | Answers | Blind spot |
|---|---|---|
scutil --nc status | Is the service connected? | Third-party clients, wrong routes |
route -n get | Where would this go? | The peer may be down |
| A request to the far side | Does it work now? | Slow, and it changes state |
Một bước kiểm tra hữu ích kết hợp hai cái đầu và dùng cái thứ ba như sự xác nhận rằng hai cái kia không nói dối. Mỗi cái riêng lẻ chỉ là phỏng đoán kèm dấu thời gian.
Đọc mã định danh, không phải tên hiển thị
scutil --nc list
scutil --nc status "Office"
Danh sách in một dòng cho mỗi dịch vụ, và mỗi dòng mang trạng thái trong ngoặc đơn, tiếp theo là mã định danh dịch vụ, loại và tên hiển thị. Viết script theo mã định danh, vì tên hiển thị là thứ ai đó đã nhập trong Cài đặt Hệ thống và có thể thay đổi mà không báo trước. Lệnh trạng thái in một từ duy nhất, và với một số loại dịch vụ là thống kê theo sau; hãy so khớp từ đầu tiên đó thay vì tìm tên trong toàn bộ đầu ra, vì tên cũng xuất hiện ở nơi khác.
Khởi động một dịch vụ có thể làm xuất hiện yêu cầu cấp quyền hoặc bị từ chối thẳng khi hồ sơ được quản lý. Sự từ chối đó không phải lỗi của đường hầm; nó là tuyên bố chính sách về việc ai được phép bật nó.
Ứng dụng khách bên thứ ba ẩn khỏi danh sách
Danh sách trống không có nghĩa là không có VPN. Các cấu hình được tạo trong phần cài đặt mạng của chính hệ thống xuất hiện ở đây; ứng dụng khách của nhà cung cấp, hồ sơ quản lý hoặc ứng dụng bên thứ ba có thể giữ một đường hầm đang hoạt động mà lệnh này không bao giờ thấy. Công cụ riêng của nó là thẩm quyền cho dịch vụ riêng của nó. Hỏi scutil về một ứng dụng khách chưa từng đăng ký với nó sẽ trả về không gì cả, và không gì cả không phải là câu trả lời giống như đã ngắt kết nối.
Khi danh sách trống nhưng lưu lượng rõ ràng đã được mã hóa, hãy tìm giao diện: một thiết bị utun hoặc ppp có địa chỉ trong dải mong đợi là bằng chứng rằng có thứ gì đó đã thiết lập đường hầm. Đó là tín hiệu yếu hơn trạng thái dịch vụ, nên hãy ghép nó với kiểm tra tuyến đường thay vì coi giao diện là bằng chứng danh tính. Nhiều ứng dụng khách có thể tạo nhiều giao diện như vậy, và chỉ một trong số đó thuộc về đường hầm bạn định nói.
Trạng thái không phải định tuyến
Một dịch vụ đã kết nối nói rằng đường hầm tồn tại. Nó không nói rằng đích của bạn dùng nó. Đọc các địa chỉ, rồi hỏi nhân trực tiếp:
ifconfig | grep -A4 utun
netstat -rn -f inet
route -n get 10.40.0.20
Ứng dụng khách đường hầm đầy đủ cài một tuyến mặc định qua đường hầm; ứng dụng khách đường hầm chia tách cài những tiền tố riêng cụ thể. Cả hai đều báo Connected, và một script chỉ kiểm tra trạng thái sẽ vui vẻ chạy trên đường sai. Dừng một đường hầm không nhất thiết gỡ bỏ các tuyến mà ứng dụng khách khác đã cài, và đó là một cách để một máy vừa có dịch vụ đã kết nối vừa có tuyến cũ cùng lúc. Hãy nhìn vào đích mà bạn quan tâm, không phải toàn bộ bảng tuyến.
Đặt tên là một vấn đề riêng
Các máy khác không truy cập được Mac bằng tên trong khi địa chỉ của nó vẫn hoạt động, và điều đó được báo là lỗi VPN. Tên máy cục bộ, tên máy và bản ghi DNS là ba thứ khác nhau. scutil --get LocalHostName hiển thị tên Bonjour; sudo scutil --set HostName mac-office đặt tên mà hệ thống báo cáo.
Không cài đặt nào trong số này tạo bản ghi trong vùng văn phòng. Nếu các máy khác phải phân giải tên qua DNS, chủ vùng phải thêm nó, hoặc script nên dùng địa chỉ thay thế. Đặt một tên ổn định làm cho các thông báo nhất quán; nó không làm cho bộ phân giải trả lời.
Ghi lại cùng nhau trong script mã định danh dịch vụ và hình dạng tuyến mong đợi, và kiểm tra cả hai trước khi sao chép. Một đường hầm hoạt động nhưng định tuyến sai hướng sẽ thất bại đúng như không có đường hầm, và dòng nhật ký ghi Connected sẽ khiến người tiếp theo tìm sai chỗ.