Главная

Friday, 1 April 2022

Диагностика сетевого взаимодействия.


Всем привет. 

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

Вы начинаете с получения полного доменного имени (FQDN), fully qualifed domain name своего хоста и значения IP адреса его DNS сервера, а затем проверяете работает ли этот сервер DNS.

Затем вы применяете сконфигурированный сервер DNS на предмет определения значений имён контроллеров домена в своём домене и убеждаетесь что способны достигать каждого контроллера домена как по порту 389 (LDAP), так и по 445 (для GPO). 

Затем вы проверяете доступность шлюза по умолчанию. В конце, уже опционально, вы тестируете возможность достижения удалённого хоста по порту 80 (http) и по порту 443 (HTTP поверх SSL/ TLS). 

В приницпе весь рецепт диагностики состоит из кода Powershell для версии 7.0.

# Получаем значение имени DNS данного хоста

$DNSDomain = $Env:USERDNSDOMAIN

$FQDN      = "$Env:COMPUTERNAME.$DNSDomain"

# Получаем значение адреса этого DNS сервера

$DNSHT = @{

  InterfaceAlias = "Ethernet"

  AddressFamily  = 'IPv4'

}

$DNSServers = (Get-DnsClientServerAddress @DNSHT).ServerAddresses

$DNSServers

# Убеждаемся в доступности этих DNS серверов

Foreach ($DNSServer in $DNSServers) {

  $TestDNS = Test-NetConnection -Port 53 -ComputerName $DNSServer   

  $Result  = $TestDNS ? "Available" : ' Not reachable'

  "DNS Server [$DNSServer] is $Result"

}

# Определяем поиск Контроллеров домена в нашем домене

$DNSRRName = "_ldap._tcp." + $DNSDomain

$DNSRRName

# Получаем записи SRV для выявленных Контроллеров домена

$DCRRS = Resolve-DnsName -Name $DNSRRName -Type all | 

    Where-Object IP4address -ne $null

$DCRRS

# Проверяем каждый из Контроллеров домена на доступность через LDAP

ForEach ($DNSRR in $DCRRS){

  $TestDC = Test-NetConnection -Port 389 -ComputerName $DNSRR.IPAddress

  $Result  = $TestDC ? 'DC Available' : 'DC Not reachable'

  "DC [$($DNSRR.Name)]  at [$($DNSRR.IPAddress)]   $Result for LDAP" 

}

# Проверяем доступность Контроллеров домена для SMB

ForEach ($DNSRR in $DCRRS){

  $TestDC = Test-NetConnection -Port 445 -ComputerName $DNSRR.IPAddress

  $Result  = $TestDC ? 'DC Available' : 'DC Not reachable'

  "DC [$($DNSRR.Name)]  at [$($DNSRR.IPAddress)]   $Result for SMB"

}

# Проверяем шлюз по умолчанию

$NIC    = Get-NetIPConfiguration -InterfaceAlias Ethernet

$DG     = $NIC.IPv4DefaultGateway.NextHop

$TestDG = Test-NetConnection $DG

$Result  = $TestDG.PingSucceeded ? "Reachable" : ' NOT Reachable'

"Default Gateway for [$($NIC.Interfacealias) is [$DG] - $Result"

# При помощи ICMP проверяем некоторый удалённый веб-сайт, например google.com

$Site = 'google.com'

$TestIP = Test-Connection -ComputerName $Site

$ResultIP    = $TestIP  ? 'Site Reachable' : 'Site NOT reachable'

"ICMP to $Site : $ResultIP"

# Тестируем удалённый веб-сайт по http

$TestPort80 = Test-Connection -ComputerName $Site -TcpPort 80

$Result80    = $TestPort80  ? 'Site Reachable' : 'Site NOT reachable'

"$Site over port 80   : $Result80"

# Тестируем удалённый веб-сайт по https

$TestPort443 = Test-Connection -ComputerName $Site -TcpPort 443

$Result443   = $TestPort443  ? 'Site Reachable' : 'Site NOT reachable'

"$Site over port 443  : $Result443"


В самом простом варианте это все. Вы можете расширить этот код под свои сетевые задачи.

Слава Украине!

No comments:

Post a Comment

А что вы думаете по этому поводу?