Một máy đã có quyền truy cập VPN được phê duyệt, máy thứ hai cần đúng một dịch vụ HTTPS riêng, và một chuyển tiếp SSH cục bộ có thể bắc cầu khoảng trống đó mà không cấp đường hầm cho máy thứ hai. Chuyển tiếp mang một đích TCP thay vì toàn bộ mạng, và chính giới hạn đó là điểm mấu chốt. Hãy làm theo năm bước dưới đây theo thứ tự, vì mỗi bước thất bại vì một lý do khác nhau và bước sau không thể cứu khoảng trống trước đó. Nếu thiếu bất kỳ điều kiện tiên quyết nào, thiết kế này không giải quyết được và không mức tinh chỉnh lệnh nào giúp ích.

Bước một: xác nhận ba điều kiện tiên quyết

Ba điều phải đúng ngay từ trước khi bất kỳ lệnh nào có ý nghĩa. Bạn cần quyền dùng máy thứ nhất làm máy chủ chuyển tiếp, quyền truy cập SSH hoạt động tới máy đó, và chính sách máy chủ cho phép đích dự định. Một tài khoản SSH tạo cho việc truyền tệp có thể đã tắt chuyển tiếp, và một máy chủ cho phép chuyển tiếp vẫn có thể giới hạn những đích nào truy cập được qua nó. Hãy hỏi trước khi thử, vì dùng máy trạm của đồng nghiệp làm điểm nhảy mà không có thỏa thuận là vấn đề chính sách, ngay cả khi lệnh chạy hoàn hảo.

Hai lệnh giải quyết nửa kỹ thuật của danh sách đó. Lệnh đầu chứng minh tài khoản và khóa hoạt động mà không cần nhắc tương tác, lệnh thứ hai in chính sách máy chủ thực tế thay vì ví dụ đã chú thích trong tệp cấu hình.

ssh -o BatchMode=yes [email protected] 'echo ok'
sudo sshd -T | grep -E 'allowtcpforwarding|permitopen'

Bước hai: liên kết một cổng loopback và giữ phiên sống

Trên máy chạy ứng dụng máy khách, mở một chuyển tiếp cục bộ tới dịch vụ riêng. Liên kết nó rõ ràng với loopback để nó không bị công bố trên mạng cục bộ, và chọn một cổng cao mà không dịch vụ cục bộ nào đang giữ. Giữ phiên chạy trong khi bạn làm việc, vì đóng nó sẽ đóng trình lắng nghe. ExitOnForwardFailure biến một liên kết bị từ chối hoặc cổng bị chiếm thành thoát ngay lập tức thay vì một phiên đứng mà không có chuyển tiếp, và đó chính là kiểu hỏng tốn nhiều thời gian nhất.

Kết nối riêng được tạo từ máy nhảy, nên DNS, tuyến, chính sách VPN và quyền truy cập dịch vụ của máy đó đều phải hoạt động. Phiên SSH không tạo ra khả năng tiếp cận mà máy nhảy không có, và nó không thể sửa một tuyến mà VPN chưa từng đẩy. Xác nhận trình lắng nghe ở nơi nó thực sự ở thay vì tin vào sự im lặng của lệnh.

ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:9443:portal.lab.example:443 [email protected]
ss -ltn '( sport = :9443 )'

Bước ba: giữ tên HTTPS khi ổ cắm là cục bộ

Duyệt tới https://127.0.0.1:9443/ thay đổi tên máy chủ TLS và thẩm quyền ứng dụng. Chứng chỉ cấp cho portal.lab.example sẽ không xác thực với địa chỉ loopback, và lỗi phát sinh trông như chứng chỉ hỏng hơn là một lối tắt chuyển tiếp. Với thử nghiệm dòng lệnh, hãy giữ URL thật và chỉ đổi đích của ổ cắm. Đó là việc --connect-to làm, và hướng dẫn curl ghi lại dạng bốn trường được dùng dưới đây.

curl --noproxy portal.lab.example --connect-to portal.lab.example:443:127.0.0.1:9443 https://portal.lab.example/

Tên vẫn nằm trong URL, trong bắt tay TLS và trong tiêu đề Host, trong khi kết nối TCP đi tới trình lắng nghe cục bộ. Tùy chọn không dùng proxy giữ thử nghiệm trên chuyển tiếp này thay vì để một proxy HTTP đã cấu hình chặn nó, và giữ bật xác minh chứng chỉ là điều làm kết quả có ý nghĩa.

Bước bốn: biết một chuyển tiếp không thể bao phủ những gì

Một chuyển tiếp TCP bao phủ một cổng đích. Một trang chuyển hướng tới tên máy chủ thứ hai, tải tài nguyên từ máy chủ bên trong mạng riêng hoặc gửi tới cổng khác cần chuyển tiếp riêng, và mỗi cái trong số đó cần cùng kiểm tra chính sách như cái đầu tiên. Các luồng làm việc của trình duyệt thêm yêu cầu riêng, vì phải bảo trình duyệt gửi tên thật tới cổng cục bộ thông qua cấu hình proxy hoặc ánh xạ cục bộ. Vì vậy một thử nghiệm dòng lệnh thành công không chứng minh trình duyệt cũng sẽ thành công, dù nó chứng minh đường đi.

UDP, khám phá SMB và đăng nhập miền hoàn toàn không đi qua chuyển tiếp TCP. Nếu nhu cầu thực sự là truy cập mạng chung, thiết kế này là công cụ sai và một cổng truy cập từ xa được hỗ trợ là công cụ đúng.

Bước năm: dọn dẹp và ghi lại

Dừng phiên khi thử nghiệm xong và xác nhận trình lắng nghe đã biến mất. Nếu cổng đã chọn đã bị chiếm, hãy chọn một cổng loopback chưa dùng khác và cập nhật cùng lúc URL, lệnh thử và ghi chú, thay vì dừng một dịch vụ cục bộ không liên quan để giải phóng số cổng. Để một chuyển tiếp mở trên máy tính xách tay biến một chẩn đoán thành dịch vụ không được quản lý.

Ghi lại máy nhảy, đích đã chuyển tiếp, cổng cục bộ và ai đã phê duyệt thỏa thuận. Một chuyển tiếp chỉ tồn tại trong lịch sử shell của ai đó cách một lần khởi động lại khỏi một cuộc điều tra lặp lại, và người tiếp theo sẽ không biết điều kiện tiên quyết nào trong ba điều đã được kiểm tra.

Bài viết liên quan