Bo mạch khởi động từ image chung, nhận một lease DHCP và một script chuẩn bị chạy trước khi bất kỳ ai chạm vào thiết bị. Ở đâu đó trong script đó nó phải lấy được một danh tính WireGuard thuộc về bo mạch này và không thuộc bo mạch nào khác, khiến danh tính đó được ủy quyền, và ghi một profile mà cổng sẽ chấp nhận. Image có thể mang phần mềm máy khách, một mẫu đã được rà soát và khóa công khai của cổng. Điều nó không bao giờ được mang là một khóa riêng duy nhất được cả đội chia sẻ, vì điều đó biến một bo mạch bị đánh cắp thành sự cố cho cả đội. Thứ tự bên dưới giữ danh tính ở cục bộ và ủy quyền rõ ràng.

Image mang gì, và không mang gì

Gửi gói phần mềm, mẫu có chỗ giữ, khóa công khai của cổng và máy khách đăng ký. Mẫu là một hình dạng, không phải bí mật: nó phải đọc được đối với người dùng chuẩn bị và không chứa vật liệu khóa nào.

Khóa riêng được tạo trên thiết bị ở lần khởi động đầu và không bao giờ rời khỏi đó. Chỉ nửa công khai đi lại, bên trong một yêu cầu đăng ký được ủy quyền bởi thứ khác ngoài lời tự khai của thiết bị về việc nó là ai. Chính sự phân biệt đó ngăn một bo mạch bị đánh cắp trở thành vấn đề của cả đội. Và đó cũng là phần mà hầu hết script khởi động đầu làm sai.

Bước 1: tạo khóa tại chỗ

Chạy việc tạo trong một thư mục được bảo vệ sau khi kết nối mạng bên dưới đã được phê duyệt và hoạt động. Subshell giữ thay đổi umask cục bộ cho thao tác này, và set -C từ chối ghi đè lên tệp đã tồn tại:

(
    umask 077
    set -C
    wg genkey > /etc/wireguard/device.key &&
        wg pubkey < /etc/wireguard/device.key > /etc/wireguard/device.pub
)

Khởi động nhanh WireGuard mô tả quan hệ tạo khóa mà hai lệnh này dựa vào. Nếu việc tạo bị gián đoạn, hãy để thiết bị chưa đăng ký và để luồng công việc hòa giải các tệp. Đừng xóa một danh tính đang tồn tại chỉ để script chạy sạch từ đầu.

Giữ khóa đang chờ qua các lần thử lại. Tạo lại danh tính sau mỗi sự cố mạng tạm thời là cách một đội kết thúc với những peer mồ côi mà không ai có thể khớp với thiết bị.

Bước 2: ủy quyền một bản ghi thiết bị

Giả sử bản kiểm kê gọi bo mạch này là device-042 và gán cho nó 10.90.0.42/32. Dịch vụ đăng ký phải xác minh rằng người yêu cầu này có quyền đối với bản ghi đó. Một số sê-ri được nhập vào biểu mẫu không phải bằng chứng, vì số sê-ri được in ở mặt ngoài của hộp.

Một thông tin xác thực khởi tạo cho mỗi thiết bị, một phê duyệt của người vận hành hoặc một chứng thực được phần cứng hậu thuẫn có thể thiết lập lời khai. Bảo vệ tính toàn vẹn của yêu cầu và tính xác thực của phản hồi, và đừng thay thế một bí mật VPN dùng chung bằng một thông tin xác thực nhà máy dùng chung.

Bản ghi đã đăng ký ràng buộc thiết bị, khóa công khai của nó, địa chỉ được gán và vai trò quản lý được phép của nó. Bản thân WireGuard không định nghĩa API đăng ký nào, nên dịch vụ đó là thứ bạn xây dựng và vận hành có chủ đích.

Bước 3: viết hai cấu hình khớp nhau

Thiết bị cần một profile định tuyến các tiền tố quản lý vào đường hầm, và cổng cần một mục peer chỉ cho phép địa chỉ nguồn của chính thiết bị này. Với cổng ở 10.90.0.1 và mạng quản lý 10.60.0.0/16, phía thiết bị trông như sau:

[Interface]
PrivateKey = <device-042 private key>
Address = 10.90.0.42/32

[Peer]
PublicKey = <trusted gateway public key>
Endpoint = vpn.example.com:51820
AllowedIPs = 10.90.0.1/32, 10.60.0.0/16
PersistentKeepalive = 25

Các giá trị trong ngoặc vuông là chỗ giữ, không phải khóa. Keepalive quan trọng khi bo mạch nằm sau NAT và phải luôn tiếp cận được; nó không cần thiết ở mọi nơi, và thêm vào theo thói quen giữ một radio thức mà không có lý do.

Trên cổng, mục peer hẹp một cách có chủ đích:

[Peer]
PublicKey = <device-042 public key>
AllowedIPs = 10.90.0.42/32

Đừng sao chép danh sách đích của thiết bị sang peer của cổng. Trên thiết bị, danh sách đó nói cần định tuyến gì vào đường hầm; trên cổng, nó nói peer này được dùng những địa chỉ nguồn nào, và đó là những phát biểu khác nhau.

Chuyển tiếp, các quy tắc tường lửa và đường quay về mạng quản lý vẫn phải cho phép truy cập đã được phê duyệt. Một peer đã đăng ký không phải là sự cho phép cho mọi ứng dụng phía sau nó.

Bước 4: xác nhận việc đăng ký như một trạng thái vòng đời

Áp dụng bản ghi của cổng và profile của thiết bị thông qua người sở hữu từng cấu hình, rồi chỉ đánh dấu việc đăng ký hoàn tất khi danh tính và địa chỉ dự định được chấp nhận. Các lần thử lại nên hòa giải chính bản ghi đó thay vì cấp phát peer thứ hai hoặc địa chỉ thứ hai.

Giữ một đường phục hồi cho việc chuẩn bị bị gián đoạn, kể cả trường hợp cổng đã chấp nhận khóa mà thiết bị chưa bao giờ ghi profile của nó.

Khi một bo mạch được thay thế hoặc cho nghỉ, hãy gỡ khóa công khai và ủy quyền của nó cùng nhau. Một khóa mới là một sự kiện đăng ký lại có chủ đích, không phải tác dụng phụ của việc tạo lại image. Thứ tự công việc: tạo tại chỗ, ủy quyền dựa trên bản kiểm kê, ghi cả hai phía, xác nhận trạng thái, rồi thử một yêu cầu quản lý qua đường hầm.

Bài viết liên quan