Назад | Перейти на главную страницу

Как настроить сетевой интерфейс для RDP в Windows Server 2012?

У меня есть сервер с несколькими сетевыми интерфейсами, и мне нужно, чтобы RDP прослушивал соединения только на одном из них; сервер не является сервером удаленного рабочего стола, RDP используется только для удаленного администрирования.

В Windows Server 2008 R2 я смог настроить это с помощью Remote Desktop Session Host приставка; в Windows Server 2012 этой консоли больше нет.

Как я могу настроить это в WS2012?

Службы удаленных рабочих столов на самом деле имеют довольно богатую библиотеку объектов WMI, которую вы можете использовать для запроса и управления конфигурацией. Начиная с Vista / 2008, он расположен в корень \ cimv2 \ TerminalServices пространство имен. Вот хорошее место для начала просмотра того, что доступно: Классы конфигурации служб удаленных рабочих столов

Что касается вашего конкретного вопроса, я просто хотел бы уточнить, что RDP может быть привязан только к сетевому адаптеру, а не к конкретному IP-адресу. Я знаю, что вы сказали «сетевой интерфейс». Я просто хотел прояснить для других, кто может наткнуться на этот вопрос. Это довольно распространенный запрос на машинах, у которых есть только один адаптер и несколько IP-адресов. Если это то, что вы ищете, есть другие вопросы по ServerFault с более подробными ответами. Но если я правильно помню, лучше всего просто ограничить соединения с помощью встроенного брандмауэра.

Конкретный класс, в котором есть то, что вам нужно, называется Win32_TSNetworkAdapterSetting. С классом связаны 3 метода, которые вы можете использовать:

По моему опыту, SetNetworkAdapterLanaID надежнее, чем SelectNetworkAdapterIP из-за опции «Все сетевые адаптеры». Похоже, что если он в настоящее время настроен на «Все сетевые адаптеры», он не изменится на конкретный адаптер с указанным вами IP-адресом, он просто сохранит его на «Все сетевые адаптеры», что технически все еще правильно.

Итак, вам осталось использовать SetNetworkAdapterLanaID и для которого требуется целочисленное значение идентификатора в качестве аргумента метода. Итак, вот как вы можете использовать идентификатор. Сначала получите ссылку на экземпляр класса. В моем примере здесь будет использоваться имя терминала по умолчанию, называемое «RDP-Tcp», но возможно (хотя и маловероятно) в ваших системах есть дополнительные или другие имена терминалов.

Вы можете проверить текущий статус того, какой сетевой адаптер настроен, с помощью следующей оболочки PowerShell:

gwmi Win32_TSNetworkAdapterSetting -filter "TerminalName='RDP-Tcp'" -namespace "root/cimv2/TerminalServices" | Select NetworkAdapterLanaID,NetworkAdapterName

Чтобы вызвать метод, хорошо иметь экземпляр класса, назначенный переменной, поэтому давайте сделаем это:

$ts = gwmi Win32_TSNetworkAdapterSetting -filter "TerminalName='RDP-Tcp'" -namespace "root/cimv2/TerminalServices"

Удобная особенность этого класса заключается в том, что пара возвращаемых им свойств представляет собой списки возможных сетевых адаптеров, которые вы можете использовать.

$ts | select -expand DeviceIDList
$ts | select -expand NetworkAdapterList

Это должно вернуть два списка. Первый - это список идентификаторов, отсчитываемый от 0, а второй - понятное имя адаптеров, связанных с первым списком. Итак, на моей тестовой машине он вернулся:

0
1

и

All network adapters configured with this protocol
Intel(R) PRO/1000 MT Network Connection

Если вы хотите сопоставить идентификаторы в DeviceID собственности на их имена в NetworkAdapterList, вы можете сделать это так:

$adapters = $ts | select -expand NetworkAdapterList
$device_ids = $ts | select -expand DeviceIDList

$adapter_list = @()
foreach ($device_id in $device_ids) {
  $adapter_list += @{$device_id = $adapters[$device_id]}
}
$adapter_list # Mapping of device IDs to adapter names

По умолчанию он настроен на использование идентификатора 0, который является «Все сетевые адаптеры, настроенные с этим протоколом». Поэтому, если мы хотим изменить его для явного использования сетевой карты Intel, нам просто нужно вызвать метод, используя наш существующий объект и связанный с ним идентификатор.

$ts.SetNetworkAdapterLanaID(1)

Затем вы можете проверить изменение, повторно запросив объект:

gwmi Win32_TSNetworkAdapterSetting -filter "TerminalName='RDP-Tcp'" -namespace "root/cimv2/TerminalServices" | Select NetworkAdapterLanaID,NetworkAdapterName

запустить regedit

ключ поиска + соответствие только всей строке: Терминальный сервер

get lanatable. example:
    {564D81F9-15B4-42EC-9019-534A56DBEB81}
    {B5A5F6CC-5DFD-43F7-B5B0-20490A58A2EB}
note LanaId for each of them
set HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Terminal Server\Winstations\RDP-tcp\LanAdapter 
    HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Control\Terminal Server\Winstations\RDP-tcp\LanAdapter
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Winstations\RDP-tcp\LanAdapter
to LandaID you want accept remote desktop connection

Насколько я знаю, Remote Desktop Session Host больше не существует в Windows Server 2012.

Вы можете найти его конфигурацию в Server Manager --> Server Role