Git 403 khi đã kết nối VPN: tìm bên trả lời
403 là một câu trả lời, không phải phán quyết về VPN. Xác định thành phần nào đã từ chối, rồi so sánh từng biến một giữa các mạng và ghi lại điều gì đã thay đổi.
Nó chạy trên Wi-Fi của văn phòng và thất bại trên hotspot của điện thoại, trong cả hai trường hợp VPN đều được kết nối. Git trả về 403 và lỗi dài ba dòng. Cám dỗ là coi hotspot là nguyên nhân và thay đổi cài đặt mạng cho đến khi có gì đó dịch chuyển. HTTP 403 nghĩa là một máy chủ đã hiểu yêu cầu và từ chối nó, nên câu hỏi hữu ích là máy chủ nào, và bước tiếp theo hữu ích là một so sánh chỉ thay đổi một thứ mỗi lần.
Đọc trạng thái trước khi xem mạng
403 không phải là một tra cứu thất bại, một quá hạn TCP hay một bắt tay TLS không bao giờ hoàn tất. Đó là một quyết định, do một thứ gì đó đã phân tích yêu cầu của bạn đưa ra.
Cho đến khi bạn biết điều gì đã đưa ra quyết định đó, mọi thay đổi mạng bạn thử đều là phỏng đoán kèm theo một câu chuyện nghe hợp lý.
Ai có thể trả lời bằng 403?
Ứng dụng kho lưu trữ chỉ là một ứng viên. Một proxy, một cổng hoặc một dịch vụ lọc có thể đứng trước nó và trả lời trước, và máy khách nhìn thấy cùng một trạng thái dù theo cách nào. Hãy giữ trạng thái, các tiêu đề liên quan và phần thân lỗi đã được làm sạch, rồi tương quan chúng với nhật ký của dịch vụ được ủy quyền. URL từ xa và điểm cuối thực sự được chạm tới cũng có thể khác nhau do DNS hoặc cấu hình proxy, vì vậy hãy kiểm tra địa chỉ đã cấu hình và tiến trình gửi yêu cầu.
Nếu sự từ chối không bao giờ đến được kho lưu trữ, nhật ký của nó sẽ im lặng, và sự im lặng đó là bằng chứng.
So sánh từng biến một
So sánh với hotspot hữu ích vì nó thu hẹp vấn đề, không phải vì nó chứng minh nguyên nhân. Hai mạng có thể khác nhau về địa chỉ hóa, họ IP, proxy, thương lượng TLS và chính sách ra ngoài cùng một lúc.
Thay đổi một thứ mỗi lần thử và ghi lại phần còn lại. Bảng dưới đây là mức tối thiểu tôi giữ trong ghi chú khi làm việc này:
| Keep constant | Record when it changes |
|---|---|
| Repository, operation and credentials | Resolved address and IP family |
| Git process and configuration | Proxy use and the responding component |
| Intended VPN profile | Actual route and exit seen by the service |
Một hàng khác nhau giữa lần chạy thành công và lần chạy thất bại là nơi giờ tiếp theo sẽ đi.
Cách lách là bằng chứng, không phải lời giải thích
Buộc dùng một họ địa chỉ khác có thể thay đổi đích đến, tuyến đường hoặc bên trung gian được chọn, nên nó có thể thay đổi kết quả mà không chứng minh rằng IPv6 không tương thích với kho lưu trữ. Một phiên bản TLS được thương lượng khác cũng là một quan sát trong cùng nhóm. Không điều nào biện minh cho việc tắt kiểm tra chứng chỉ hoặc làm yếu kết nối. Hãy theo chính sách và nhật ký của thành phần đã từ chối đến quyết định thực sự thay vì dừng ở thay đổi đầu tiên có tác dụng.
Một cách lách bạn không thể giải thích sẽ lại thất bại ở nơi khác.
Viết một báo cáo sẽ được sửa
Hãy đưa cho chủ của thành phần đã trả lời cùng thao tác, hai đường dẫn và thành phần đã nói không. Xóa tiêu đề ủy quyền, thông tin xác thực nhúng và chi tiết kho lưu trữ riêng tư trước khi chia sẻ bất cứ điều gì.
Báo cáo hữu ích thì ngắn, có thể tái tạo và nêu tên lớp thay vì triệu chứng.
Bước kiểm tra tôi chạy, theo thứ tự
Xác nhận URL từ xa và điểm cuối đã phân giải, rồi ghi lại trạng thái và tiêu đề từ một lần chạy thất bại. Lặp lại thao tác y hệt trên mạng thứ hai và so sánh hai bản ghi.
Sau đó mang khác biệt đó đến thành phần đã trả lời:
- Cấu hình proxy trên máy khách và trên mạng.
- Chính sách ra ngoài hoặc lọc trước kho lưu trữ.
- Phạm vi của token hoặc tài khoản, bao gồm hết hạn và điều kiện SSO.
- Quyền của kho lưu trữ cho danh tính mà token đại diện.
Bản thân ngữ nghĩa của trạng thái nằm trong RFC 9110, và đáng để trích dẫn khi bạn viết báo cáo.