Всем привет.
Существует теория, что любая сетевая проблема начинается с 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
А что вы думаете по этому поводу?