Cuốn hướng dẫn này cho một ứng dụng hiểu proxy quyền truy cập vào một đường WireGuard sẵn có mà không công bố cổng proxy trên máy chủ VPN hay trên internet. Daemon SOCKS cung cấp giao diện ứng dụng, WireGuard cung cấp đường IP đã được phê duyệt, và không bên nào xác thực người dùng thay bạn. Mỗi bước dưới đây tạo ra một thứ bạn có thể kiểm tra, và mỗi bước đều có cách hoàn tác: dừng phiên bản, gỡ quy tắc hoặc bỏ cài đặt proxy của ứng dụng. Không có gì ở đây thay đổi tuyến mặc định của máy chủ.

Ví dụ giả định Dante 1.4.x được cài như một phiên bản chuyên dụng, có quản lý trên một máy trạm Linux đáng tin cậy, với tài khoản dịch vụ và cấu hình ghi nhật ký do gói cung cấp được giữ nguyên tại chỗ. Máy trạm sở hữu 10.77.0.2 trên giao diện WireGuard của nó, đi tới 10.60.0.20:443 qua đường hầm đó, và tên riêng của dịch vụ là app.corp.example.

Bước 1: gắn trình lắng nghe chỉ vào loopback

Đặt các phần mạng, phương thức và quy tắc vào cấu hình đang hoạt động của phiên bản, thay các địa chỉ ví dụ. Mọi cài đặt máy chủ đều đứng trước các khối quy tắc:

internal: 127.0.0.1 port = 1080
external: 10.77.0.2
external.protocol: ipv4
clientmethod: none
socksmethod: none

client pass {
    from: 127.0.0.1/32 to: 127.0.0.1/32
}

socks pass {
    from: 127.0.0.1/32 to: 10.60.0.20/32 port = 443
    command: connect
    protocol: tcp
}

Đây là một đoạn, không phải vật thay thế cho cài đặt người dùng và ghi nhật ký của gói. Chọn một cổng cục bộ chưa dùng và xác nhận rằng phiên bản chuyên dụng này không có trình lắng nghe khác, không có quy tắc cho qua rộng hơn và không có mục chuỗi thượng nguồn nào có thể thay đổi hợp đồng. Nếu cấu hình trước đã để lại một socks pass mà không có ràng buộc đích, hãy gỡ nó trước khi thử bất cứ điều gì.

Cách hoàn tác cho bước này là dừng phiên bản; tệp cấu hình có thể vẫn nằm trên đĩa trong khi bạn khôi phục nó.

Bước 2: viết hai quy tắc, không phải một

Tài liệu cấu hình của Dante giao cho hai loại quy tắc những nhiệm vụ khác nhau. Quy tắc máy khách chấp nhận một kết nối tới trình lắng nghe loopback, và đích của nó là chính địa chỉ của trình lắng nghe. Quy tắc SOCKS cho phép kết nối tiếp theo được yêu cầu tới máy chủ và cổng đã phê duyệt. Các yêu cầu không khớp bị chặn theo mặc định, đó là lý do một quy tắc thiếu trông giống hệt một tuyến bị hỏng.

Hãy để ý điều cấu hình này cố ý không làm: nó không yêu cầu mật khẩu SOCKS. Điều đó phù hợp với một máy chủ cục bộ đáng tin cậy, và nó không phải xác thực người dùng. Bất kỳ tiến trình nào khác trên máy đó cũng có thể dùng loopback. Hãy giữ xác thực riêng của ứng dụng từ xa, và đừng dùng lại dạng không xác thực này cho người dùng cục bộ không đáng tin hay cho trình lắng nghe hướng ra LAN.

Bước 3: kiểm chứng tuyến từ đúng nguồn

external chọn một địa chỉ nguồn gửi đi; nó không cài một tuyến WireGuard. Tra cứu chỉ đọc cho nguồn và đích của ví dụ:

ip -4 route get 10.60.0.20 from 10.77.0.2

Chạy lệnh đó trong không gian tên mạng thật của Dante, không phải trong bất kỳ shell nào bạn tình cờ mở. Tuyến, việc chọn đối tác WireGuard, quyền ở phía xa và đường quay về đều phải khớp với địa chỉ nguồn đó. Một tra cứu thành công là cần nhưng chưa đủ, vì nó không nói gì về việc đầu xa có chấp nhận yêu cầu hay không.

Hãy cưỡng lại cám dỗ thêm một tuyến mặc định để tra cứu thành công. Cổng proxy chỉ tồn tại trên máy trạm này; việc đổi tuyến mặc định của máy chủ để tạo ra nó sẽ đảo ngược toàn bộ thiết kế.

Bước 4: kiểm thử với danh tính dự kiến

Sau khi chủ sở hữu xác nhận cấu hình đã cài và khởi động phiên bản qua trình quản lý dịch vụ của nó, một yêu cầu minh họa là:

curl --proxy socks5h://127.0.0.1:1080 --noproxy '' https://app.corp.example/

Với socks5h, Dante thực hiện phân giải đích, nhưng Dante chạy trên máy trạm này, nên cài đặt không tự gửi DNS tới đầu xa của đường hầm. Trình phân giải đã được phê duyệt mà Dante dùng phải trả về địa chỉ được phép cho tên đó. Danh sách không proxy rỗng ngăn một ngoại lệ kế thừa lặng lẽ bỏ qua SOCKS.

Giữ việc kiểm tra tên máy chủ và chứng chỉ HTTPS trong bài kiểm thử, sau đó xem xét trình lắng nghe thật và xác nhận cả hai nửa của hợp đồng: yêu cầu được phép thành công và một đích bị loại trừ thất bại. Cũng xác nhận rằng các lệnh chuyển tiếp không được hỗ trợ vẫn bị từ chối, vì đoạn này chỉ cho phép lệnh SOCKS CONNECT trên TCP và không có gì giống một đường hầm UDP chung hay toàn thiết bị.

Bước 5: quyết định điều gì xảy ra khi đường hầm sụp

Hãy thử mất đường hầm và khởi động lại phiên bản trước khi gọi đây là môi trường sản xuất. Một giám sát khởi động Dante sau WireGuard không tạo ra định tuyến fail-closed, cũng không tạo ra DNS fail-closed; cả hai phải được thực thi qua chủ sở hữu mạng. Hãy quan sát ứng dụng làm gì khi đường hầm xuống: một lỗi sạch là kết quả tốt, việc âm thầm rơi về một trình phân giải công cộng thì không.

Hãy phối hợp cập nhật nếu địa chỉ đường hầm được gắn thay đổi, vì external được ghim vào nó. Khi cách bố trí không còn cần thiết, hãy cho nghỉ hưu phiên bản này và cài đặt proxy của ứng dụng cùng lúc, và để đường WireGuard lại cho người sở hữu nó.

Bài viết liên quan