[win] terminal rdp session hang troubleshooting in AWS

서비스 운영 중인 장비에서, 서버 접속이 되지 않는 다는 연락을 받게 되었습니다.

어떤 부분에서 연결이 안되는지 파악해보니,  기존 vpn 연결이 끊어지고, 접속중이던 mssql 서버로 터미널 접속이 되지 않아 문의가 온 상황입니다.

 

다행이 서비스 영향성을 파악해보니 디비와의 연결이나 서비스에는 이상이 없었습니다.

(이때는 약간 안정)

 

터미널 세션이 active state로 리미트에 걸려있을 것으로 예상하고 상태를 확인하려 하니,

콘솔 접속은 불가능하고 저역시 리모트 접속은 불가능한 상황입니다. (AWS windows)

 

부랴부랴 139,445 포트를 열고, sysinternals 를 받아서 psexec 를 실행해봅니다.

PsExec.exe \\1.2.3.4 /accepteula /h /u 관리자계정 /p 암호 cmd /c “query session”

 

역시 실행결과 session이 active state로 2개 꽉차있는 상황이었고, reset session [session ID] 으로 단순하게 해결될 거라 생각했습니다만, 리셋이나 테스크 중지가 먹히지 않는 상황이었습니다.

2년만에 윈도우 서버로 접속을..(?)  하다보니, 이때부턴 긴장이 되기 시작하더군요.ㅎㅎ

 

sc stop termservice 명령을 하면 dependent 로 인해 서비스 중지가 되지 않습니다.

 

net stop termservice /yes 명령을 통해서 관련 서비스를 포함해서 중지하려하니 또 문제가 생깁니다.  stop_pending 상태로 터미널 서비스가 멈춰있네요.

 

sc queryex termservice  명령을 통해 해당 pid를 찾아서

taskkill /f /pid [termservice PID] 로 중지하고 나서 다시 재시작 한 후에야

세션이 정상적으로 성립되었습니다.

 

rdp hang 의 상세한 원인을 찾으려면 이제부터 고생 시작일 것 같네요.

 

우선은 저와 비슷한 상황을 겪으신 분들이 계시다면 해당 포스트가 도움이 되길 바라며,  포스팅 합니다.

 

오랜만이라 매우 긴장되었습니다.   😥

 

윈도우 쉐어 디렉터리 마운트

2008은 기본 제공된다.

그래서 role 에서 nfs 를 추가한다.

 

그리고 나서 공유하려는 폴더에 properties 를 보면.?  nfs 설정이 된다.

윈도우 주소는 sungho.com 이라고 가정하고 공유 폴더가 share 라면

그럼 리눅스에서

mkdir test/

mount -t nfs sungho.com:/share /test

이렇게 하면 마운트가 된다.

 

/etc/fstab 에서

sungho.com:/share /test nfs 0 0 < 요거 추가해줘야지 안하면 재시작시 날라가요

[powershell] IP 주소 받아오기, 짝수 홀수 아이피 가르기

Get-WmiObject Win32_NetworkAdapterConfiguration -Namespace “root\CIMV2” | where{$_.IPEnabled -eq “True”}

하고 나서, ip만 뽑을땐?

(Get-WmiObject Win32_NetworkAdapterConfiguration -Namespace “root\CIMV2” | where{$_.IPEnabled -eq “True”}).ipaddress[0]

 

또는

 

(gwmi -query “Select IPAddress From Win32_NetworkAdapterConfiguration Where IPEnabled =  True” | Select-Object IPaddress).ipaddress[0]

 

이렇게 하면 IPv4 아이피를 딸 수 있다 .

그럼 이걸 octet 별로 쪼개려면 이렇게 해보자.

 

$iptest=(gwmi -query “Select IPAddress From Win32_NetworkAdapterConfiguration Where IPEnabled =  True” | Select-Object IPaddress).ipaddress[0]

$ipoctet=$iptest -split “\.”

 

Echo $ $ipoctet[3]

-split 로 “.” 으로 나누면, 이렇게 하면 ip주소가 ” . ” 을 기준으로 4등분 되며 각각 $ipoctet[0] ~ $ipoctet[3] 으로 저장된다.

 

여기서 그럼, IP 맨 마지막 숫자가 홀수인경우와 짝수인 경우를 별도의 실행을 시켜주는 방법을 생각해보자

 

if (($ipoctet[3] %= 2) -ne 1)

    {echo “jjaksu”}

else

    {echo “holsu”}

;

 

이런식으로 IP의 마지막 octet의 숫자를 2로 나눈 나머지 값을 1이 아닌 경우 짝수, 1인경우는 홀수 라고 볼 수 있겟다.

이 스타일을 이용하여, 짝수 서버군과 홀수 서버군을 서로 다른 스타일 군으로 관리 할 수 있도록 구성에 적용할 수 도 있다.

 

[기타] 신뢰할수 있는 루트 인증서 등록 하는 법

Mac OS X

Add

Use command:

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ~/new-root-certificate.crt

Remove

Use command:

sudo security delete-certificate -c “<name of existing certificate>”

Windows

Add

Use command:

certutil -addstore -f “ROOT” new-root-certificate.crt

Remove

Use command:

certutil -delstore “ROOT” serial-number-hex

Linux (Ubuntu, Debian)

Add

  1. Copy your CA to dir /usr/local/share/ca-certificates/
  2. Use command:

sudo cp foo.crt /usr/local/share/ca-certificates/foo.crt

  1. Update the CA store:

sudo update-ca-certificates

Remove

  1. Remove your CA.
  2. Update the CA store:

sudo update-ca-certificates –fresh

Restart Kerio Connect to reload the certificates in the 32-bit versions or Debian 7.

Linux (CentOs 6)

Add

  1. Install the ca-certificates package:

yum install ca-certificates

  1. Enable the dynamic CA configuration feature:

update-ca-trust force-enable

  1. Add it as a new file to /etc/pki/ca-trust/source/anchors/:

cp foo.crt /etc/pki/ca-trust/source/anchors/

  1. Use command:

update-ca-trust extract

Restart Kerio Connect to reload the certificates in the 32-bit version.

Linux (CentOs 5)

Add

Append your trusted certificate to file /etc/pki/tls/certs/ca-bundle.crt

cat foo.crt >> /etc/pki/tls/certs/ca-bundle.crt

Restart Kerio Connect to reload the certificates in the 32-bit version.

[windows] windows default setting

::snmp 설치

servermanagercmd -install snmp-services

 

::community 설정 및 snmp-trap 설정

reg delete HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\PermittedManagers /va /f

reg add HKLM\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ValidCommunities /v COMMUNITY /t reg_dword /d 4 /f

reg add HKLM\SYSTEM\CurrentControlSet\services\SNMP\Parameters /v EnableAuthenticationTraps /t reg_dword /d 0 /f

 

::snmp-informant 설치

c:\gss\informant-std-17.exe /norestart /verysilent

 

:: firewall 정책 설정 [서버 방화벽 사용시 해당 옵션은 제거]

netsh advfirewall set allprofiles settings remotemanagement enable

netsh firewall set opmode disable

netsh advfirewall set allprofiles state off

 

::winrm setting – 리모트 프로토콜 사용시

winrm s winrm/config/service/auth @{Basic=”true”}

winrm s winrm/config/service @{AllowUnencrypted=”true”}

 

 

::사용자 USER 및 그룹 ADD

net user 사용자 /add

net localgroup administrators 사용자 /add

net user 사용자 비밀번호

 

::TCP TimeWaitDelay 30초 적용

reg add “HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters” /v TcpTimedWaitDelay /t REG_DWORD /d “0x1E” /f

 

:: TCP 최대 접속 수 65534적용

reg add “HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters” /v MaxUserPort /t REG_DWORD /d “65534” /f

 

::Enable RDP

reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server” /v fDenyTSConnections /t REG_DWORD /d 0 /f

 

::RDP 접근 2명 허용

reg add “hklm\system\currentcontrolset\control\terminal server\winstations\rdp-tcp” /v MaxInstanceCount /t reg_dword /d 0x2 /f

 

::RDP 멀티 세션 허용

reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server” /v fSingleSessionPerUser /t reg_dword /d 0x0 /f

 

::Telnet Client 설치

ServerManagerCmd.exe -install Telnet-Client

[protocol] HTTP 1.1 status code

HTTP 1.1 status codes [TOP]

100 : Continue

101 : Switching protocols

200 : OK, 에러없이 전송 성공

201 : Created, POST 명령 실행 및 성공

202 : Accepted, 서버가 클라이언트 명령을 받음

203 : Non-authoritative information, 서버가 클라이언트 요구 중 일부만 전송

204 : No content, 클라언트 요구을 처리했으나 전송할 데이터가 없음

205 : Reset content

206 : Partial content

300 : Multiple choices, 최근에 옮겨진 데이터를 요청

301 : Moved permanently, 요구한 데이터를 변경된 임시 URL에서 찾았음

302 : Moved temporarily, 요구한 데이터가 변경된 URL에 있음을 명시

303 : See other, 요구한 데이터를 변경하지 않았기 때문에 문제가 있음

304 : Not modified

305 : Use proxy

400 : Bad request, 클라이언트의 잘못된 요청으로 처리할 수 없음

401 : Unauthorized, 클라이언트의 인증 실패

402 : Payment required, 예약됨

403 : Forbidden, 접근이 거부된 문서를 요청함

404 : Not found, 문서를 찾을 수 없음

405 : Method not allowed, 리소스를 허용안함

406 : Not acceptable, 허용할 수 없음

407 : Proxy authentication required, 프록시 인증 필요

408 : Request timeout, 요청시간이 지남

409 : Conflict

410 : Gone, 영구적으로 사용할 수 없음

411 : Length required

412 : Precondition failed, 전체조건 실패

413 : Request entity too large,

414 : Request-URI too long, URL이 너무 김

415 : Unsupported media type

500 : Internal server error, 내부서버 오류(잘못된 스크립트 실행시)

501 : Not implemented, 클라이언트에서 서버가 수행할 수 없는 행동을 요구함

502 : Bad gateway, 서버의 과부하 상태

503 : Service unavailable, 외부 서비스가 죽었거나 현재 멈춤 상태

504 : Gateway timeout

505 : HTTP version not supported

T-shark 를 이용한 dump 수집 scheduled

Tshark

 

Tshark -D 누르면인터페이스목록이출력된다.

캡쳐할라는인터페이스번호를선택한다. (. 1)

 

Tshark -i 1

 

 

 

필터옵션을주자

-f tcp port 1111 or 2222

 

시간옵션을주자

-u hms

 

파일로남기자..

-w c:\log\

 

 
해당 옵션을 주고난후 실행되는 커멘드는 아래와 같음.

 

tshark.exe -i 1 -f tcp port 1111 or 2222” -u hms -w c:\log\packet_dump.pcap

 

 

 

스케쥴을 등록할때는 1시간에 한번씩 실행되도록.

시간단위로자르는스크립트 ( 스케쥴러로한시간단위로실행되도록?)

for /f “tokens=2-3 delims=- ” %%i in (‘date/t’) do @set DT=%%i%%j

for /f “tokens=2-3 delims=: ” %%i in (‘time/t’) do @set tm=%%i

 

::taskkill /f /im tshark.exe

 

“C:\Program Files\Wireshark\tshark.exe” -i 1 -f “tcp port 1234” -w c:\log\packet_dump_%dt%_%tm%.pcap -a duration:3600

네트워크 분석도구 Traceroute 와 MTR(Matt’s Traceroute) 을 이용해보자.

네트워크 분석도구 중 traceroute 와 MTR을 통해서 네트워크 통신 상태를 분석하는 간단한 방법을 정리.

윈도우의 Tracert 에서 제공하는 ICMP 프로토콜을 이용한 check방식과 기본적인 동작방식은 동일하나,

리눅스에서 실행하면 좀더 다양한 방법으로 테스트가 가능하다.

traceroute -d -T -p 80 hongblog.bbunbro.com

이와 같이 Traceroute 기능중 -d (디버깅 레벨) -T (TCP 체크) -p No. (포트번호) 옵션등을 활용하여,
실제 체크를 하고싶은 사항을 최대한 반영하여 테스트가 가능하다.

–help 나 man을 이용해서 상세한 추가 옵션이 많으니, 활용하는 것도 좋은 방법.
해당 실행 파일은 traceroute 패키지에 포함되어 있다.

그리고, MTR 이라는 Traceroute 분석도구를 이용하는 방법을 정리한다.

MTR 명령어는 mtr 패키지에 포함되어 있으며, 분석과 관련된 다양한 정보를 포함한다.
주 사용 방법으로는 mtr –report hongblog.bbunbro.com 과 같은 레포팅 기능이 있다.

 [root@bbunbro ~]# mtr –report –no-dns hong.bbunbro.com
HOST: bbunbro.com                 Loss%   Snt   Last   Avg  Best  Wrst StDev
  1. 175.41.192.62                 0.0%    10    0.9   0.8   0.6   1.0   0.1
  2. 54.199.164.218                0.0%    10    1.1   1.3   1.0   1.6   0.3

위와 같이 reporting 기능을 이용해서 확인시 각 구간별 packet loss 등과 같은 정보를 한눈에 확인 가능하다.

mtr –report-wide –no-dns hongblog.bbunbro.com
이런식으로 report-wide 기능을 통해서, 실시간으로 네트워크 상태를 확인할 수 있도록 제공하기도 한다.
모니터링 중 keys 를 이용해서 display 및 기타 리포팅 방식을 변경할 수 있다.

사용자 삽입 이미지