DMA전략 관리를 위한 모니터링 서버 만들기

1.
DMA를 위한 서버가 한 두대인 경우가 대부분입니다. 누구나 처음에는 한대로 시작하고 수익율이 잘 나오고 거래하는 증권사들이 늘어나면 서버도 늘어납니다. 전략마다 트레이더마다 전략을 운용하는 방식이 다르지만 많은 경우 단말을 통하여 전략을 모니터링합니다. 주문체결 데이타를 주로 살피고 필요한 경우 패러미터를 변경합니다.

서버가 늘어날 경우 전략모니터링을 어떻게 해야할까요? 아주 다양한 조건이 있습니다. 만약 Clinet/Server구조에 따라 단말을 개발하지 않는 경우에는 RDP로 접속하여 위 작업을 진행합니다. RDP인 경우 멀티세션이 가능하니까 여러 서버에 접속할 수 있습니다. 다만 큰 모니터를 사용하여야 합니다. C/S구조인 경우에 클라이언트를 개발할 때 어떤 환경을 고려했는지가 관건이지만 대부분 데스크탑 하나에서 서버 하나로 접속가능합니다. 가상화하여 VM을 여럿만들고 단말을 사용해야 합니다.

여기까지는 그냥저냥할 수 있습니다. 이제부터 복잡해집니다. VPN때문입니다. DMA 투자자들은 VPN을 통하여 서버에 접속합니다. 증권사마다 사용하는 VPN이 다릅니다. 각 증권사가 제공하는 프로그램을 설치해서 사용해야 합니다. 만약 한 증권사에 서버가 여럿이면 VPN접속을 할 때 필요한 VPN용 ID도 여럿 있어야 합니다. 더불어 트레이더가 한 명이 아니고 여럿명일 경우에는 관리하여야 하는 것들이 많아집니다.

그래서 고민한 방법입니다. 매매를 위해 사용하던 서버중 안정성이 높은 서버를 하나 선택합니다. 보통은 Linux를 설치하지만 Windows를 설치할 계획입니다. 제가 선택한 OS는 Windows 2016 Server Essentials입니다. 소규모로 적합니다. OS를 설치하는 방법은 일반적인 Windows와 다르지 않습니다. 이제 VM을 설치할 차례입니다. Windows OS는 기본적으로 Hyper-V Manager라고 하는 가상화툴을 제공합니다. 아래를 참조하시길.

Windows Server에 Hyper-V 역할 설치

Hyper-V Manager를 사용하려면 Windows 2016 Server에서 사용가능하도록 해야 합니다. Enable Virtualization (Hyper-V) in Windows Server 2016를 보면 잘 설명하고 있습니다.


이상의 작업을 한 후 Hyper-V Manager를 실행하면 아래와 같은 화면입니다.

혹 Linux에서 Virtual Machine Manager를 사용한 경험이 있는 분이면 쉽게 적응해서 VM을 만들 수 있습니다. OS를 설치하는 것은 쉬웠지만 저는 Network Setting에서 헷갈렸습니다.

Virtual Switch를 보면 세종류입니다.

  • External: Switch is used to connect the virtual machines to external network and Internet. The virtual machines (Guest) and Host will be on the same network.
  • Internal: Switch is used to create network connection between guest machines and the host.
  • Private: The private switch is used to create network connection between virtual machines only.

최초 시험을 할 때에는 External Switch를 만들어서 했습니다. 바로 성공하였습니다. 그런데 네트워크 환경이 바뀌면서 혼란에 빠졌습니다. 공인IP를 하나만 사용할 수 있는 환경으로 바뀌면서 External Switch가 동작하지 않기때문입니다. 그래서 Internal로 바뀌어서 해보니까 역시나 되지 않았습니다. 이런저런 검색을 하다가 How to Connect Hyper-V Machines to Internet?을 보고 이해를 하였습니다.

첫째 External은 Virtual Machine Manager를 기준으로 할 때 Bridged Network라고 할 수 있습니다. 내부망일 때는 별 문제가 발생하지 않지만 인터넷망으로 공인IP를 할당받을 수 없는 환경에서 동작을 하지 않습니다.
둘째 Internal은 NAT Network라고 할 수 있습니다. Internal Switch를 사용하여 인터넷환경을 공유하려고 하면 Internet Connection Sharing (ICS)을 설정해야 합니다.

저도 위와 같이 하여서 해결하였습니다. Windows 2016 Server에서 NAT를 지원하도록 하는 방법은 Server Manager에서 Remote Access Role을 설정하는 것입니다. Configuring NAT in Hyper-V on Windows Server 2016: A Guide에서 잘 설명하고 있는데.. 러시아어라서 화면을 추가합니다.


2.
VM과 관련한 이슈를 살펴보았습니다. 이제 VPN프로그램을 공유하는 방식입니다. 정확히 말하면 VPN 세션을 공유하는 방법입니다. 이를 위하여 VPN만을 위한 VM을 설치하였습니다. OS는 Windows 10이었습니다. 다만 마이크로소프트가 제공하는 Windows 10이 아니라 저용량에서 사용할 수 있는 패킹한 Tiny 10입니다.

VPN VM의 역할은 두가지입니다.

첫째 SSH세션 공유=SSH Gateway
둘째 단말접속을 위한 SSH 터널링

이상의 작업을 위해서는 SSH Server가 필요합니다. 처음에는 Mobaxterm에서 제공하는 ssh service를 이용하였지만 찾아보니까 Windows 10은 SSH Service를 Enable할 수 있는 기능이 있었습니다.

Setting>App>Apps & Features를 클릭합니다. Optional Features를 선택하면 아래와 같은 화면이 나옵니다.

설치를 마친 후 아래와 같은 명령어를 실행하여 openssh server의 상태를 확인합니다.

리눅스로 이야기하면

systemctl status openssh-server
systemctl enable openssh-server
systemctl restart openssh-server

와 같은 작업을 해주십니다.



3.
이제 mobaxterm을 이용하여 VPN VM이 제공하는 SSH Service를 이용하여 VPN망에 연결되어 있는 서버에 접속하도록 환경을 만듭니다.putty나 xshell과 같은 프로그램을 사용할 수 있지만 저는 Mobaxterm을 선택하였습니다. 윈도우 환경에서 쓰기 편합니다.

SSH 세션을 사용하도록 하는 SSH Gateway 설정하여야 합니다. 이를 Jump Host라고 합니다.


여기에 더하여 추가로 필요한 기능이 Port-Forwarding입니다. ZeroAOS의 단말을 이용하여 서버에 접속할 때 필요한 기능입니다. 16501 포트를 사용합니다. 집에서 사용하는 인터넷공유기에도 있는 기능입니다. Port-Forwading을 위해 SSH Tunnel기능을 사용합니다.

mobaxterm에서 제공하는 화면을 이용하면 아래와 같습니다. Remote Server가 ZeroAOS를 설치한 서버입니다. My Computer는 이용자가 단말을 실행하는 서버(VM)입니다.

4.
이상은 VM에 접속할 수 있다는 조건을 전제로 합니다. 모니터링서버를 사무실에 두고 운용하든, IDC에 입고하여 운용하든 관계없이 모니터링서버 VM에 접속할 수 있는 환경을 만들어야 합니다. 이는 VM에서 할 작업이 아니라 Host에서 하여야 하는 작업입니다.

윈도우에서 외부서버(윈도우 데스크탑이나 서버)에 접속할 경우 가장 보편적인 방식은 RDP(Remote Desktop Protocol)입니다. 보통 3308포트를 사용합니다. RDP를 이용하려면 VM마다 RPD를 사용하도록 설정을 해야 합니다.

RDP로 VM에 접속하려면 필요한 정보가 두가지입니다.

첫째는 IP주소입니다.
둘째는 포트입니다.

앞서 VM은 NAT로 네트워크환경을 구축하였습니다. 192.168.135.0/24로 주소를 자동으로 할당받습니다. 물론 고정IP로 바꾸어도 상관없습니다. NAT이기때문에 외부에서 192.168.135를 가진 주소로 접속할 수 없습니다. VM이 아닌 Host에서 무슨 작업을 해주어야 합니다. 앞서 터널링에서 언급하였던 Port-Forwarding이 필요합니다. 이번에는 mobaxterm과 같은 도구를 사용하지 않고 윈도우가 제공하는 기능을 이용하도록 하겠습니다. 저도 익숙하지 않는 Powershell은 다양한 명령어를 이용하여 윈도우를 관리할 수 있도록 합니다. 그중에서 NetNat와 관련한 명령어들입니다. Powershell에서 이용가능한 명령어들은 PowerShell Module Browser에서 확인할 수 있습니다.

 

 

Add-NetNatExternalAddress Adds an external address to a NAT instance.
Add-NetNatStaticMapping Adds a static mapping to a NAT instance.
Get-NetNat Gets NAT objects.
Get-NetNatExternalAddress Gets external addresses configured for NAT instances.
Get-NetNatGlobal Retrieves global settings for all NAT instances on a computer.
Get-NetNatSession Gets all active NAT sessions.
Get-NetNatStaticMapping Gets static mappings configured on NAT instances.
New-NetNat Creates a NAT object.
Remove-NetNat Removes NAT objects.
Remove-NetNatExternalAddress Removes an external address from a NAT instance.
Remove-NetNatStaticMapping Removes static mappings from a NAT instance.
Set-NetNat Modifies settings for NAT objects.
Set-NetNatGlobal Modifies global settings for NAT instances on a computer.

 

위 명령어중 포트포워딩을 위한 사용하는 명령어는 Add-NetNatStaticMapping 입니다. 아래는 사용예입니다.

제가 HOST에서 설정한 결과중 일부입니다.

이제 RDP로 VM에 접속합니다. 아래는 Linux환경에서 RDP로 접속한 이미지입니다.

이상의 작업을 Powershell Script로도 가능합니다.

(*)페친이신 이형채이 공유한 글… 이해하기 무척 쉽습니다.

Visual guide to SSH tunneling and port forwarding

Leave a Comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.