Làm cách nào để tránh sự chậm trễ liên quan đến hồ sơ IPv6 AAAA?


11

Các máy chủ Windows của chúng tôi đang đăng ký AAAAbản ghi IPv6 với các máy chủ DNS Windows của chúng tôi. Tuy nhiên, chúng tôi không bật định tuyến IPv6 trên mạng của mình, vì vậy điều này thường gây ra các hành vi gian hàng.

Microsoft RDP là người phạm tội tồi tệ nhất. Khi kết nối với máy chủ có AAAAbản ghi trong DNS, máy khách từ xa sẽ thử IPv6 trước và sẽ không quay lại IPv4 cho đến khi hết kết nối. Người dùng có thể giải quyết vấn đề này bằng cách kết nối trực tiếp với địa chỉ IP. Giải quyết địa chỉ IPv4 ping -4 hostname.fooluôn hoạt động ngay lập tức.

Tôi có thể làm gì để tránh sự chậm trễ này?

  • Vô hiệu hóa IPv6 trên máy khách?
  • Vô hiệu hóa IPv6 trên máy chủ?
  • Mặt nạ bản ghi IPv6 trên người truy cập DNS người dùng facnig?
  • Ngăn chặn đăng ký bản ghi IPv6 AAAA trên máy chủ Microsoft DNS?
    • Tôi không nghĩ điều đó thậm chí có thể.

Tại thời điểm này, tôi đang xem xét việc viết một tập lệnh thanh lọc tất cả các bản ghi AAAA từ các vùng DNS của chúng tôi. Xin vui lòng, giúp tôi tìm một cách tốt hơn.


CẬP NHẬT: Độ phân giải DNS không phải là vấn đề. Như @joeqwerty chỉ ra trong câu trả lời của mình, các bản ghi DNS được trả về ngay lập tức. Cả hai AAAAAhồ sơ có sẵn ngay lập tức. Vấn đề là một số máy khách ( mstsc.exe) sẽ ưu tiên thử kết nối qua IPv6 và mất một thời gian để quay lại IPv4.

Điều này có vẻ như một vấn đề định tuyến. Các pinglệnh tạo ra một "thất bại chung" thông báo lỗi vì địa chỉ đích là unroutable.

C:\Windows\system32>ping myhost.mydomain
Pinging myhost.mydomain [2002:1234:1234::1234:1234] with 32 bytes of data:
General failure.
General failure.
General failure.
General failure.
Ping statistics for 2002:1234:1234::1234:1234:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),

Tôi không thể có được một gói chụp hành vi này. Chạy lệnh ping (không thành công) này không tạo ra bất kỳ gói nào trong Microsoft Network Monitor. Tương tự, việc thử kết nối với mstsc.exemáy chủ có AAAAbản ghi sẽ không tạo ra lưu lượng truy cập cho đến khi nó thực hiện dự phòng cho IPv4.

CẬP NHẬT: Tất cả các máy chủ của chúng tôi đều sử dụng các địa chỉ IPv4 có thể định tuyến công khai. Tôi nghĩ vấn đề này có thể dẫn đến cấu hình 6to4 bị hỏng. 6to4 hoạt động khác nhau trên các máy chủ có địa chỉ IP công cộng so với địa chỉ RFC1918.

CẬP NHẬT: Chắc chắn có một cái gì đó tanh với 6to4 trên mạng của tôi. Khi tôi tắt 6to4 trên máy khách Windows, các kết nối sẽ giải quyết ngay lập tức.

netsh int ipv6 6to4 set state disabled

Nhưng như @joeqwerty nói, điều này chỉ che giấu vấn đề. Tôi vẫn đang cố gắng tìm hiểu tại sao giao tiếp IPv6 trên mạng của chúng tôi hoàn toàn không hoạt động.


11
Kết thúc triển khai IPv6 trên mạng của bạn, tất nhiên.
Michael Hampton

1
Bạn đã chạy một bản ghi mạng trên máy khách để xác nhận lỗi / độ trễ độ phân giải IPv6 này chưa?
joeqwerty

1
Bên cạnh đó, Microsoft cung cấp một số công cụ Fixit tiện lợi để vô hiệu hóa / kích hoạt các thành phần IPv6 khác nhau: support.microsoft.com/kb/929852
joeqwerty

1
@joeqwerty Các máy chủ và người dùng nằm trên các mạng con riêng biệt, nhưng mọi thứ đều là một trang web lớn. Chúng tôi không sử dụng DNS tách não, do đó không có khái niệm về "DNS nội bộ".
Nic

2
Ngoài ra tôi nghĩ rằng bạn sẽ tìm thấy bài viết này từ RIPE cũng như RFC 6343 đọc rất thú vị và có liên quan. Đề nghị cá nhân của tôi cho bạn sẽ là đổ 6to4 hoàn toàn.
Michael Hampton

Câu trả lời:


10

Câu hỏi này khá thú vị và tôi phải thừa nhận rằng tôi chưa bao giờ thấy hành vi này. Khi cố gắng tìm hiểu và hiểu rõ hơn về nó, tôi đã lấy một đoạn truy vấn nslookup cho một trong các máy chủ W2K8R2 RDS của tôi từ một máy chủ W2K8R2 khác và tôi cũng đã bắt được một đoạn của một phiên RDP từ cùng một máy chủ RDS . Nslookup cho thấy không có sự chậm trễ trong việc trả lại bản ghi IPv6 và nslookup cho thấy máy chủ thử nghiệm của tôi truy vấn bản ghi IPv4 trước khi truy vấn bản ghi IPv6. Đồng bằng thời gian trong bản chụp cho thấy không có độ trễ đáng kể (mà tôi có thể xác định được) trong một trong hai truy vấn.


nhập mô tả hình ảnh ở đây


nhập mô tả hình ảnh ở đây


BIÊN TẬP

Bây giờ bạn đang vào một cái gì đó.

Đảm bảo bạn đang nắm bắt lưu lượng truy cập cho bộ điều hợp Microsoft 6To4, nếu không bạn sẽ không thấy IPv6:

nhập mô tả hình ảnh ở đây


Đây là kết quả nslookup cho máy chủ RDS của tôi. Lưu ý các địa chỉ IPv6:

nhập mô tả hình ảnh ở đây


Bây giờ đây là một đoạn trong bản chụp của tôi:

nhập mô tả hình ảnh ở đây


Và cuối cùng, đây là một đoạn trích từ netstat hiển thị kết nối:

nhập mô tả hình ảnh ở đây


Vì vậy, rõ ràng, như bạn đã xác nhận, độ phân giải DNS không phải là vấn đề. Vấn đề là kết nối RDP thích IPv6 hơn IPv4 (mặc định cho Windows - Windows thích IPv6 hơn IPv4) và vì IPv6 không hoạt động đúng nên gây ra sự chậm trễ (như bạn đã nêu) khi quay lại từ IPv6 IPv4. Bạn có thể khắc phục điều này bằng cách định cấu hình các máy khách thích IPv4 hơn IPv6, nhưng tôi nghĩ rằng điều đó sẽ chỉ che giấu vấn đề. Giải pháp tốt hơn là tìm hiểu tại sao IPv6 không hoạt động và khắc phục điều đó. Tôi không biết đủ về IPv6 để giúp đỡ nhưng tôi đoán là các bản ghi IPv6 được DNS trả về là địa chỉ "cục bộ" chỉ hợp lệ trên mạng con nơi máy chủ RDS tồn tại và vì các máy khách ở trong một mạng con khác, chúng có thể ' t đạt được các địa chỉ IPv6 đó.


Bro, bạn thậm chí RFC 1918?
Ryan Ries

CƯỜI LỚN. Họ đã vào sớm, được phân bổ khối / 24 của riêng họ và chọn sử dụng nó trong nội bộ thay vì giao dịch với NAT. Họ sử dụng khoảng 80% khối và đã đưa ra lập trường "nếu nó không bị hỏng thì đừng sửa nó".
joeqwerty

@joeqwerty Tôi đã cập nhật câu hỏi của mình với một số làm rõ. nslookup hoạt động tốt nhưng ping thất bại với General Failure.
Nic

@joeqwerty Cảm ơn tất cả các đầu vào của bạn. Tôi đã đăng câu trả lời cho câu hỏi này để làm rõ những gì đã xảy ra trong môi trường của tôi và gợi ý những gì người khác có thể làm trong tình huống tương tự.
Nic

9

Công nghệ chuyển đổi IPv6 có tên 6to4 nổi tiếng là gây ra sự cố như thế này. Có một số yếu tố trong công việc. Cá nhân họ vô hại, nhưng hiệu quả kết hợp là người dùng cuối có thể gặp phải sự chậm trễ kết nối.

Một danh sách các yếu tố cho phép và suy nghĩ về giảm thiểu của chúng được trình bày dưới đây.


Windows cho phép 6to4 theo mặc định

Nếu máy chủ của bạn đang chạy phiên bản Windows gần đây (Vista trở lên), Windows sẽ kích hoạt đường hầm 6to4 một cách cơ hội khi có sẵn địa chỉ IPv4 có thể định tuyến công khai. Quan trọng, điều này áp dụng cho cả máy chủ và máy khách.

Để tìm hiểu xem hệ thống có đang sử dụng 6to4 hay không, hãy chạy ipconfigvà tìm địa chỉ IPv6 bắt đầu bằng tiền tố 6to4 2002:. Nó sẽ trông giống như thế này.

C:\> ipconfig
Tunnel adapter 6TO4 Adapter:
IPv6 Address. . . . . . . . . . . : 2002:1111:2222::1111:2222
  • Nếu các điểm cuối của bạn được kết nối với Active Directory, bạn có thể sử dụng Chính sách nhóm để vô hiệu hóa các giao thức chuyển đổi như 6to4 và Teredo. Đây là tài liệu tốt trong KB929852 . (Áp dụng điều này cho cả máy khách hoặc máy chủ của bạn là đủ, nhưng nếu bạn thực hiện bước này thì có thể vô hiệu hóa nó ở mọi nơi, trên cả máy khách máy chủ.)
  • Nếu bạn chỉ quản lý một vài máy chủ, bạn có thể vô hiệu hóa 6to4 trong từng trường hợp. Điều này tốt hơn nhiều so với việc vô hiệu hóa hoàn toàn IPv6.netsh int ipv6 6to4 set state disabled
  • Sử dụng một hệ điều hành khách hàng khác nhau. Ví dụ: Mac OS X không có 6to4 được bật theo mặc định.

Các địa chỉ IPv4 có thể định tuyến công khai đang được sử dụng

6to4 chỉ hoạt động trên các máy chủ có địa chỉ IPv4 có thể định tuyến công khai, vì vậy vấn đề này không bao giờ ảnh hưởng đến các máy chủ đằng sau tường lửa NAT.

  • Bạn có thể di chuyển máy khách và / hoặc máy chủ phía sau tường lửa NAT và bắt đầu sử dụng địa chỉ RFC1918. Nhưng trong một số trường hợp, địa chỉ có thể định tuyến công khai thực sự được ưa thích. Thay đổi địa chỉ của toàn bộ mạng cũng có thể là một lựa chọn không thực tế.

6to4 không hoạt động chính xác trên mạng

Rất khó để khắc phục sự cố 6to4 ở chế độ anycast. Thật rắc rối khi có một yêu cầu chính thức tới IETF rằng 6to4 nên được phân loại lại thành lịch sử . Theo ý kiến ​​của tác giả này, 6to4 đã bị phản đối.

Tóm lại, 6to4 hoạt động bằng cách gói các gói IPv6 vào các gói IPv4 bằng giao thức có tên 6in4 (giao thức IP = 41). Các gói IPv4 được gửi đến địa chỉ anycast 192.88.99.1với hy vọng rằng nó sẽ đến một rơle 6to4 hoạt động ở đâu đó trên internet. Nó thậm chí có thể ở gần về mặt địa lý, nếu bạn may mắn.

Trong thực tế, một số rơle 6to4 được thiết lập không chính xác và rất nhiều mạng thậm chí không cho phép lưu lượng 6in4 vượt qua tường lửa. Thông thường, điều này xảy ra khi tường lửa cho phép tất cả lưu lượng truy cập đi, nhưng không cho phép rõ ràng cho phép các gói giao thức IP 41 trở lại qua tường lửa. (TODO lưu ý RFC có liên quan để khắc phục sự cố.) Lỗi này ("lỗ đen trong nước") và nhiều lỗi khác được mô tả trong RFC 6343 .

  • Thiết lập tường lửa của bạn để từ chối lớn giao thức IP 41 (với bộ đặt lại TCP) khi được gửi từ máy chủ nội bộ vào mạng của bạn. Điều này sẽ dẫn đến một hành vi "thất bại nhanh" có ý nghĩa hơn là sự chậm trễ kết nối không xác định. Điều này đã được chứng minh là làm việc trong môi trường thử nghiệm hạn chế .
  • Yêu cầu ISP hoặc nhà cung cấp dịch vụ chuyển tiếp đầu tiên của bạn thiết lập rơle 6to4 hoạt động. Nếu điều này được thực hiện đúng, nó sẽ mang lại trải nghiệm tốt nhất cho người dùng cuối. Bất kỳ người dùng cuối nào có địa chỉ IPv4 có thể định tuyến công khai đều có thể tham gia vào Internet IPv6.

Đăng ký DNS động

Trong môi trường Active Directory thông thường, mọi máy tính đều được phép đăng ký địa chỉ của chính nó với máy chủ DNS. Khi một máy chủ lưu trữ đa dạng, nó sẽ đăng ký tất cả các địa chỉ của nó, thậm chí từ một đường hầm 6to4.

Hầu hết các dịch vụ internet không sử dụng DNS động, vì vậy vấn đề này thường được giới hạn ở các trang web doanh nghiệp nơi máy khách và máy chủ đều "nội bộ" trong cùng một mạng.

  • Bạn có thể chọn tắt cập nhật DNS động. Sau đó, nếu bạn không đặt bất kỳ hồ sơ tài nguyên AAAA nào vào tệp vùng, chúng sẽ không bao giờ được phục vụ. Tuy nhiên, DNS động thường được mong muốn cho các máy chủ DNS nội bộ. (Nếu bạn làm điều này, hãy đảm bảo xóa mọi bản ghi AAAA có thể đã có mặt.)
  • Thiết lập máy chủ DNS để không cung cấp câu trả lời cho các bản ghi tài nguyên AAAA. Nhưng đừng làm điều này, bởi vì nó thực sự sẽ gây rắc rối cho bạn khi bạn muốn bắt đầu triển khai IPv6. (Có ai biết về tường lửa DNS miễn phí / nguồn mở không?)

Ứng dụng khách không bị lỗi

Máy khách RDP của Microsoft là một ví dụ về ứng dụng khách không xử lý các vấn đề định tuyến IPv6 một cách duyên dáng. Hầu hết các trình duyệt web tốt hơn trong việc xử lý các trường hợp cạnh IPv6 như thế này, vì vậy chúng không có xu hướng hiển thị hành vi này.

  • Hãy thử sử dụng một khách hàng khác. Có lẽ bạn sẽ gặp may mắn.

Tôi sẽ mở rộng cuộc thảo luận về các vấn đề 6to4 với đề cập đến cách các địa chỉ RFC 6598 có thể làm cho vấn đề trở nên tồi tệ hơn. Hầu hết các phần mềm tự động kích hoạt 6to4 nếu có sẵn địa chỉ IPv4 công khai được viết trước RFC đó. Do đó, địa chỉ RFC 6598 sẽ tự nhiên được phát hiện như thể đó là địa chỉ IPv4 công khai. Nhưng không phải vậy, và chạy 6to4 trên địa chỉ RFC 6598 sẽ không hoạt động. Nếu bạn thấy bất kỳ địa chỉ IPv6 nào từ 2002: 6440 :: / 26, thì bạn đã gặp phải vấn đề 6to4 + RFC 6598.
kasperd

Rơle 6to4 anycast chỉ tương đối khi giao tiếp giữa máy chủ 6to4 và máy chủ IPv6 riêng, nó không liên quan khi giao tiếp giữa hai máy chủ 6to4 (trớ trêu thay điều này có nghĩa là thêm IPv6 riêng vào một số nhưng không phải tất cả các máy chủ đều có thể làm mọi thứ tồi tệ hơn).
Peter Green

2

Tôi nhận ra rằng nó không hữu ích cho tình huống này, nhưng đối với những người triển khai phải đối mặt với một vấn đề nan giải tương tự, có một kỹ thuật triển khai được gọi là "Happy Eyeballs" (RFC 6555) chỉ định một kỹ thuật kết nối với ipv4 và ipv6 đồng thời và chọn bất kỳ kết nối nào trước.


0

Đây là giải pháp của tôi. Theo mặc định, Windows cung cấp cho các tuyến IPv6 mức độ ưu tiên cao hơn các tuyến IPv4. Nếu bạn chỉnh sửa chính sách tiền tố IPv6, bạn có thể thay đổi hành vi này để khiến nó sử dụng IPv4 theo sở thích thành IPv6.

Để đảm bảo tất cả các hệ thống trong mạng của tôi được thiết lập theo cùng một cách, tôi đặt các lệnh sau vào tập lệnh .bat chạy trong khi cài đặt phần mềm sau khi xây dựng hoặc tân trang lại máy.

netsh int ipv6 isatap set state disabled
netsh int ipv6 6to4 set state disabled
netsh interface teredo set state disable

netsh interface ipv6 delete prefixpolicy ::1/128
netsh interface ipv6 delete prefixpolicy ::/0
netsh interface ipv6 delete prefixpolicy 2002::/16
netsh interface ipv6 delete prefixpolicy ::/96
netsh interface ipv6 delete prefixpolicy ::ffff:0:0/96
netsh interface ipv6 delete prefixpolicy 2001::/32

netsh interface ipv6 add prefixpolicy ::1/128 50 0
netsh interface ipv6 add prefixpolicy ::ffff:0:0/96 40 1
netsh interface ipv6 add prefixpolicy ::/0 30 2
netsh interface ipv6 add prefixpolicy 2002::/16 20 3
netsh interface ipv6 add prefixpolicy ::/96 10 4
netsh interface ipv6 add prefixpolicy 2001::/32 5 5

Để giải thích điều này:

3 dòng đầu tiên vô hiệu hóa các giao diện đường hầm dựng sẵn, vì chúng là dự phòng cho hầu hết các mạng. Bạn có thể không muốn sử dụng 3 dòng đó nếu bạn không cung cấp địa chỉ IPv6 cho máy của mình, trong trường hợp của tôi, tôi có máy chủ DHCPv6 và cơ sở hạ tầng liên quan gán IPv6 cho kết nối có đường hầm

Khối lệnh thứ hai xóa tất cả các chính sách tiền tố định tuyến IPv6 hiện có.

Khối thứ ba sau đó tạo lại các chính sách tiền tố IPv6, nhưng sử dụng một nhóm ưu tiên khác. Giống như vậy, tiền tố tương ứng với IPv4 được ưu tiên hơn IPv6 và khi đó máy sẽ muốn sử dụng IPv4 trừ khi ứng dụng chỉ định sử dụng IPv6.

Giải pháp này vẫn duy trì khả năng xếp chồng kép chức năng, nhưng ưu tiên sử dụng IPv4 có nghĩa là các trang web có IPv6 không đầy đủ, không đáng tin cậy hoặc hoạt động kém sẽ tránh sử dụng trừ khi được chương trình trên hệ thống cho biết.

Theo ý kiến ​​của tôi, việc làm cho các hệ điều hành sử dụng IPv6 ưu tiên cho IPv4 thực sự gây trở ngại cho việc áp dụng. Trong giai đoạn chuyển tiếp, sẽ có lúc chủ nhà nghĩ rằng nó có kết nối IPv6 nhưng thực sự không có kết nối đầy đủ chức năng, dẫn đến sự cố phần mềm và sự chậm trễ lớn. Nhiều người tôi biết đã vô hiệu hóa hoàn toàn IPv6 tại bộ định tuyến của họ như một cách giải quyết cho các ISP triển khai IPv6 theo kiểu hỏng hóc ban đầu trước khi thiết lập kết nối đầy đủ, và những người này sẽ đơn giản quên bật lại khi không có IPv6 cho đến khi họ cấu hình lại bộ định tuyến của họ.


+1 để vô hiệu hóa đường hầm, -1 để thích IPv4. Đây không phải là vấn đề đối với hầu hết mọi người và chỉ nên được áp dụng cho những người dùng cụ thể trong những trường hợp cụ thể.
Michael Hampton
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.