Lỗi 789 L2TP/IPsec trên Windows: tạo hồ sơ và ghim đề xuất
Lỗi 789 thất bại trong trao đổi IPsec, không phải ở mật khẩu. Viết script hồ sơ L2TP, ghim đề xuất và đọc các mã sau theo từng giai đoạn.
Lỗi 789 trên một kết nối L2TP của Windows nghĩa là đường hầm đã chết bên trong trao đổi bảo mật IPsec, điều này xảy ra rất lâu trước khi Windows gửi mật khẩu người dùng đến bất cứ đâu. Thử lại mật khẩu, hoặc đặt lại nó trong thư mục, không thể đưa giai đoạn đó tiến lên. Thứ đưa nó tiến lên là dựng lại kết nối từ PowerShell với đề xuất mà cổng thực sự cung cấp, vì trình hướng dẫn trong Cài đặt chọn các phép biến đổi IPsec trong im lặng và không bao giờ cho bạn thấy nó đã chọn gì. Đây là hướng dẫn vận hành cho việc đó: tạo hồ sơ, ghim đề xuất, rồi dùng bảng giai đoạn để mã tiếp theo nói với bạn điều gì đó.
Tạo hồ sơ không cần trình hướng dẫn
Add-VpnConnection ghi một mục sổ điện thoại gốc, nên kết quả là cùng một đối tượng mà ứng dụng Cài đặt sẽ chỉnh sửa sau này. Chạy nó từ một phiên nâng cao khi kết nối phải tồn tại cho mọi tài khoản trên máy, hoặc từ ngữ cảnh người dùng khi nó phải giữ riêng tư:
Add-VpnConnection -Name "Contoso L2TP" `
-ServerAddress 203.0.113.10 `
-TunnelType L2tp `
-EncryptionLevel Required `
-AuthenticationMethod MSChapv2 `
-RememberCredential -Force
Khớp -AuthenticationMethod với những gì cổng cung cấp. MSChapv2, EAP và PAP không thể hoán đổi cho nhau, và một hồ sơ đòi hỏi phương thức mà máy chủ sẽ không chấp nhận sẽ thất bại trước khi bất kỳ bản ghi người dùng nào được xem xét. Giữ -EncryptionLevel Required cho mọi thứ thật; Optional cho phép Windows chấp nhận một đường hầm không mã hóa nếu phía đối tác cung cấp một đường, đây là lối tắt phòng thí nghiệm chứ không phải cài đặt để phát hành.
Nếu bạn truyền -L2tpPsk, khóa chia sẻ trước đó được ghi vào hồ sơ trên đĩa, từ đó bất kỳ ai có thể đọc hồ sơ trên máy đó đều có thể khôi phục nó. Dùng chứng chỉ để xác thực phía đối tác khi cổng hỗ trợ, và khi buộc phải dùng PSK, hãy giữ nó ngoài kho lưu trữ và ngoài lịch sử shell thay vì dán nó vào mỗi lần chạy cấp phát.
Ghim đề xuất thay vì chấp nhận giá trị mặc định
Windows tự điền các phép biến đổi IPsec, đó là lý do hai máy có kết nối trông giống hệt nhau có thể thất bại khác nhau trước cùng một cổng. Set-VpnConnectionIPsecConfiguration là cách được hỗ trợ để ghim chúng:
Set-VpnConnectionIPsecConfiguration -ConnectionName "Contoso L2TP" `
-AuthenticationTransformConstants SHA256128 `
-CipherTransformConstants AES128 `
-EncryptionMethod AES128 `
-IntegrityCheckMethod SHA256 `
-DHGroup Group14 `
-PfsGroup None `
-PassThru -Force
Bộ đó là một cách bố trí L2TP/IPsec phổ biến, không phải câu trả lời vạn năng. Mỗi tham số chấp nhận một danh sách giá trị cố định, và một tổ hợp mà nền tảng không thể ánh xạ sẽ trả về như lỗi cmdlet thay vì một hồ sơ bị làm yếu đi trong im lặng. Hãy coi lỗi như vậy là một phát biểu về các giá trị, không phải về quyền của bạn.
Sao chép đề xuất từ tài liệu của cổng hoặc từ cài đặt giai đoạn 1 và giai đoạn 2 đang hoạt động của nó, và chỉ đổi một trường mỗi lần trong khi cổng ghi nhật ký các phép biến đổi mà nó từ chối. Đi qua năm trường tạo ra một kết nối tình cờ hoạt động và một bản ghi không giải thích gì cho người tiếp theo.
Đọc lỗi theo giai đoạn, không theo văn bản lỗi
789 thuộc về một họ mã mà trong hộp thoại của ứng dụng khách trông đều giống nhau. Đặt mã đối chiếu với giai đoạn mà nó thuộc về trước khi chạm vào hồ sơ lần nữa:
| What you see | Stage that failed | Check first |
|---|---|---|
| Nothing happens, then a timeout | No IKE response at all | Server address, UDP 500 and 4500 reachability, NAT traversal on the gateway |
| Error 789 | IKE security exchange | Proposal, pre-shared key, certificate trust and client clock |
| Error 691 or a repeated password prompt | User authentication | Account state, domain, RADIUS or NPS policy |
| Tunnel up, some hosts unreachable | Routing or DNS after PPP | Split-tunnel routes, pushed DNS, remote subnet mask |
Ở đây hai vai trò của thông tin xác thực đều quan trọng. Khóa chia sẻ trước hoặc chứng chỉ xác thực các phía với nhau, trong khi MSChapv2 hoặc EAP xác thực bạn bên trong đường hầm. Đặt lại mật khẩu người dùng không thể sửa cái thứ nhất, một bí mật chung mới không thể sửa cái thứ hai, và đổi cả hai cùng lúc sẽ phá hủy bằng chứng về việc cái nào sai.
Trên đường chứng chỉ, hãy kiểm tra đồng hồ của máy khách, chuỗi tin cậy và danh tính mà cổng mong đợi trước khi cân nhắc nới lỏng xác thực. Tắt xác thực biến một 789 nhìn thấy được thành một đường hầm kết nối trong khi tin nhầm phía đối tác, và không gì trong máy khách sẽ nói cho bạn biết điều đó đã xảy ra. danh sách lỗi truy cập từ xa của Microsoft là tài liệu tham chiếu cho chính các mã, và nó tách các lỗi của lớp bảo mật khỏi các lỗi đăng nhập.
Xác minh từ cả hai đầu trước khi nói đã sửa xong
Đọc lại hồ sơ, nhưng đừng mong thấy đề xuất trong đầu ra. Get-VpnConnection báo cáo tên, địa chỉ máy chủ, loại đường hầm, mức mã hóa và phương thức xác thực, và nó không biết gì về các phép biến đổi, nên việc đọc lại xác nhận mục tồn tại và trỏ tới đúng máy chủ:
Get-VpnConnection -Name "Contoso L2TP" |
Select-Object Name, ServerAddress, TunnelType, EncryptionLevel, AuthenticationMethod
Quay số từ dòng lệnh để nhận một con số thay vì hộp thoại: rasdial "Contoso L2TP" trả về cùng mã lỗi mà giao diện sẽ trả, và rasdial "Contoso L2TP" /disconnect xóa nó giữa các lần thử. Sau đó đọc phía cổng cho chính lần thử đó. ipsec statusall của strongSwan hoặc nhật ký IKE của router cho biết đề xuất nào đã đến và đề xuất nào bị từ chối, và so sánh điều đó với các giá trị cmdlet là bước duy nhất thực sự chứng minh hai đầu đã đồng ý.
Kết nối thành công không phải vạch đích. Hãy mở ứng dụng mà người dùng quan tâm, vì các tuyến, DNS được đẩy và cài đặt đường hầm tách rời thất bại sau khi đường hầm lên và hoàn toàn không tạo hộp thoại lỗi nào.
Hãy tự động hóa nó, và quay lui sạch sẽ
Cài đặt không giám sát là lý do để viết script cho việc này, và bước quay số là nơi thông tin xác thực bị rò rỉ. rasdial nhận chúng trên dòng lệnh của chính nó, nơi người dùng cục bộ khác và hầu hết trình thu thập nhật ký có thể đọc được:
subprocess.run(["rasdial", "Contoso L2TP"], check=True)
Ưu tiên một thông tin xác thực giới hạn cho tài khoản chạy công việc, hoặc để hồ sơ lưu nó bằng -RememberCredential, thay vì truyền mật khẩu làm đối số trong một tác vụ đã lên lịch. Bản thân các lệnh cấp phát an toàn để lặp lại với -Force, nhưng chúng sẽ vui vẻ ghi đè một đề xuất cũ, nên chạy lại chỉ hữu ích nếu script mang các giá trị hiện tại.
Hồ sơ tồn tại qua các lần khởi động lại và sống lâu hơn cấu hình cổng mà chúng được tạo cho. Khi đề xuất của cổng thay đổi, hãy xóa mục và tạo lại thay vì chồng thêm một bộ giá trị thứ hai: Remove-VpnConnection -Name "Contoso L2TP" -Force, rồi lặp lại hai cmdlet với bộ mới.
Khép vòng lặp bằng bốn kiểm tra sống cạnh script: Get-VpnConnection hiển thị loại đường hầm và mức mã hóa mong đợi; cổng ghi nhật ký giai đoạn 1 và giai đoạn 2 đã hoàn tất cho địa chỉ máy khách của bạn; rasdial trả về thành công và ứng dụng mở ra; và đề xuất được ghi trong script khớp với cài đặt hiện tại của cổng. Khi 789 tiếp theo đến, việc so sánh đó mất vài phút thay vì cả một buổi chiều.