«0x80070721 A security package specific error occurred» при подключении к WMI между доменами

Симптомы:

Предположим, у вас есть 2 сервера IBM System x с установленной ОС Windows Server 2012 или более новой и с активированным сетевым интерфейсом IBM USB Remote NDIS Network Device. Они расположены в одном лесу Active Directory, но в разных доменах.
Вы пытаетесь установить соединение к WMI между ними (например, с использованием wbemtest). В этом случае, соединение не установится, и вы получите следующую ошибку:

Number: 0x80070721 Facility: Win32 Description: A security package specific error occurred.»
In System log of the server which initiates the connection we have:
Log Name: System
Source: Microsoft-Windows-Security-Kerberos
Date: 10/6/2013 9:13:09 PM
Event ID: 4
Task Category: None
Level: Error
Keywords: Classic
User: N/A
Computer: SRV1.alpha.example.com
Description:
The Kerberos client received a KRB_AP_ERR_MODIFIED error from the server srv1$. The target name used was host/srv2.beta.example.com. This indicates that the target server failed to decrypt the ticket provided by the client. This can occur when the target server principal name (SPN) is registered on an account other than the account the target service is using. Ensure that the target SPN is only registered on the account used by the server. This error can also happen if the target service account password is different than what is configured on the Kerberos Key Distribution Center for that target service. Ensure that the service on the server and the KDC are both configured to use the same password. If the server name is not fully qualified, and the target domain (ALPHA.EXAMPLE.COM) is different from the client domain (BETA.EXAMPLE.COM), check if there are identically named server accounts in these two domains, or use the fully-qualified name to identify the server.

Почему это происходит?

Начиная с Windows Server 2012, когда вы подключаетесь к WMI другого компьютера, Windows запрашивает список IP-адресов сетевых интерфейсов у удалённой системы. Далее, клиент определяет, к какому из полученных от удалённой системы IP-адресу ему лучше подключаться.
В случае серверов IBM System x, на них на обоих есть сетевой интерфейс с одним и тем же IP-адресом — 169.254.95.120. Windows выбирает его, как наиболее подходящий для установки соединения, но, т.к. клиентская машина обладает таким же IP-адресом, она подключается сама к себе. В результате, вы видите ошибку.

Когда вы пытаетесь подключиться к удалённому компьютеру с помощью wbemtest, вы вызываете WMI API. В фоне, WMI использует DCOM для связи с другими серверами. Когда DCOM устанавливает сессию, он использует запрос «ServerAlive2», чтобы проверить другой сервер.
Вот, как это выглядит в записи сетевого траффика:

14 14:38:55 10.01.2014 0.0111483 srv2.beta.example.com 135 (0x87) 91.103.70.14 55535 (0xD8EF) DCOM DCOM:IObjectExporter:ServerAlive2 Response {MSRPC:10, TCP:9, IPv4:8}
NetworkAddress: srv1
NetworkAddress: 169.254.95.120
NetworkAddress: 192.0.2.1

Тот же траффик, если мы попробуем подключиться с обратной стороны:

38 14:37:12 10.01.2014 37.1871388 srv1.alpha.example.com 135 (0x87) 10.253.12.2 59278 (0xE78E) DCOM DCOM:IObjectExporter:ServerAlive2 Response {MSRPC:14, TCP:13, IPv4:8}
NetworkAddress: srv2
NetworkAddress: 169.254.95.120
NetworkAddress: 203.0.113.2

Уровень приложения выбирает общий IP и заворачивает соединение назад. DCOM получает билет Kerberos и пробует аутентифицироваться с ним, вот почему мы видим ошибку AP_ERR_MODIFIED. То есть соединение на основе DCOM (WMI, как пример) не будет работать, если участники имеют общий IP-адрес.

Эта проблема известна Microsoft и не будет исправлена, т.к. это работает так, как задумано.

Как лучше всего выходить из такой ситуации?

  1. Отключите сетевой интерфейс IMM USB Network Interface на, по крайней мере, одном из серверов. Но будьте внимательны: обновление микрокода IMM из Windows или использование средства ASU64 включит этот интерфейс обратно.
    Если вы выберите этот способ, я рекомендую вам настроить вашу систему мониторинга таким образом, чтобы она предупреждала вас, если этот сетевой интерфейс будет активирован.
  2. Измените IP-адрес на любом из сетевых интерфейсов на какой-нибудь другой. Вы можете использовать практически любой адрес из частных сетей, но вот рекомендации IBM по этому поводу.