Nếu curl cố kết nối tới localhost bất kể URL bạn đã cung cấp, VPN là nơi sai để bắt đầu. Một proxy HTTP hoặc SOCKS cục bộ có thể là kết nối đầu tiên dự kiến, ngay cả khi dịch vụ bạn muốn nằm ở nơi hoàn toàn khác. Nếu proxy đó không còn chạy, nỗ lực tới localhost thất bại trước khi curl đến được đích. Câu trả lời của proxy cũng không phải bằng chứng rằng đích đã trả lời.

Thực hiện các bước này theo thứ tự và dừng ở bước đầu tiên làm thay đổi nỗ lực kết nối ban đầu.

Trước tiên hãy đọc các quy tắc proxy của chính curl

curl đọc các biến proxy dành riêng cho giao thức, như https_proxy và HTTPS_PROXY, cùng với ALL_PROXY khi không có giá trị riêng cho giao thức nào áp dụng. Hãy kiểm tra môi trường của shell, dịch vụ hoặc tác vụ thực sự khởi chạy curl, không phải môi trường của terminal hiện tại. Một tác vụ CI, một unit systemd và một shell tương tác có thể kế thừa ba bộ khác nhau. Chính việc đoán từ shell nhìn thấy được là điều khiến cuộc điều tra này mất cả một buổi chiều.

Có một ngoại lệ đáng ghi nhớ. curl chấp nhận http_proxy chỉ ở dạng chữ thường; dạng chữ hoa HTTP_PROXY bị bỏ qua, và đó là lý do cùng một môi trường lại hành xử khác trong các công cụ khác.

Hãy đọc các giá trị một cách riêng tư, vì URL proxy thường mang thông tin xác thực.

Sau đó kiểm tra tệp cấu hình mặc định của curl xem có ghi đè proxy hoặc kết nối nào không, và xác nhận tệp thực thi bạn thực sự đang chạy. Một bí danh shell, một hàm hoặc một script bọc có thể thêm các tùy chọn không bao giờ xuất hiện trên dòng lệnh của bạn.

So sánh ba lệnh gọi khi bật TLS

Dùng một đích chẩn đoán đã được phê duyệt và cùng một tệp nhị phân cho cả ba lần chạy.

curl -v https://service.corp.example/status
curl -q -v https://service.corp.example/status
curl -q --proxy '' -v https://service.corp.example/status

-q chặn tệp curlrc mặc định và phải là tham số đầu tiên trên dòng mới hoạt động. Nó không xóa các biến môi trường proxy, điều khiến những người mong đợi điều đó ngạc nhiên. Dạng thứ ba thêm một giá trị --proxy rỗng, ghi đè proxy do môi trường yêu cầu chỉ cho lần gọi đó. Hãy so sánh nỗ lực kết nối đầu tiên trong mỗi đầu ra, không phải mã trạng thái cuối cùng.

Đầu ra chi tiết có thể lộ tiêu đề, token và thông tin xác thực proxy, nên hãy giữ nó cục bộ và đọc các đoạn trích trước khi chia sẻ.

Mỗi kết quả loại trừ điều gì

Nếu việc bỏ qua cấu hình mặc định làm thay đổi kết nối thì tệp cấu hình là nguồn. Nếu việc vô hiệu hóa rõ ràng proxy được kế thừa làm thay đổi nó thì biến môi trường là nguồn. Nếu cả hai đều không thay đổi và localhost vẫn xuất hiện, hãy xem các ghi đè kết nối trên dòng lệnh, việc phân giải tên máy chủ và tệp thực thi đã chọn. Mỗi thứ có một cách sửa khác nhau, và không thứ nào là thay đổi định tuyến.

Việc nạp thư viện tùy chỉnh hoặc hành vi mạng bị chèn là lớp sau, và chỉ một biến môi trường thì không phải bằng chứng về điều đó.

Hãy tách quyết định về proxy khỏi VPN

Khi curl đã chọn một đích trực tiếp, hệ điều hành vẫn định tuyến kết nối đó. Vô hiệu hóa proxy của ứng dụng không vô hiệu hóa tuyến của VPN hay chính sách lọc của nó. Chỉ thực hiện so sánh truy cập trực tiếp ở nơi chẩn đoán đó được phép. Một bài kiểm tra lặng lẽ vòng tránh chính sách không phải kết quả hợp lệ, mà là sự cố.

Nếu cần một proxy cục bộ, hãy khôi phục dịch vụ và địa chỉ của nó thay vì xóa các cài đặt.

Nếu chỉ một số đích riêng tư được chọn cần truy cập trực tiếp, hãy thêm một ngoại lệ hẹp đã được phê duyệt và giữ proxy cho mọi thứ còn lại. Hãy lưu lỗi đầu tiên của đường đi đã chọn, vì sự từ chối từ localhost, sự từ chối CONNECT của proxy, lỗi chứng chỉ và lỗi ủy quyền chỉ ra bốn giai đoạn khác nhau.

Bài viết liên quan