• 윈도우 시작시 프로그램 자동실행 c# 제작 소스코드

    윈도우 시작시 프로그램 자동실행 c# 제작 소스코드

    윈도우 시작시 프로그램 자동실행 소스코드

    보통 체크박스를 이용하여 윈도우 시작시 프로그램이 자동으로 실행하게 할껀지 아닐지 여부를 선택합니다.

    이렇게 체크박스를 만들어서 체크를 할 경우 윈도우시작할때 바로 프로그램이 실행되도록 할 수 있습니다.

    윈도우 시작시 프로그램 자동실행 소스코드

    // init()
    
                try
                {
                    if (ReadValue("info", "checkBox_윈도우자동시작") != null)
                    {
                        string text = ReadValue("info", "checkBox_윈도우자동시작");
    
                        if (text == "true")
                        {
                            checkBox_윈도우자동시작.Checked = true;
    
                        }
                        else
                        {
                            checkBox_윈도우자동시작.Checked = false;
                        }
    
                    }
    
                }
                catch { }
    
    
    // checkbox click
    
            RegistryKey runRegKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
    
            private void checkBox_윈도우자동시작_CheckedChanged(object sender, EventArgs e)
            {
                string 프로그램명 = string.Format("{0}", System.IO.Path.GetFileName(Application.ExecutablePath));
                if (checkBox_윈도우자동시작.Checked)
                {
                    runRegKey.SetValue(프로그램명,string.Format("{0}{1}", System.AppDomain.CurrentDomain.BaseDirectory, System.IO.Path.GetFileName(Application.ExecutablePath)
    ));
                    WriteValue("info", "checkBox_윈도우자동시작", "true");
                }
                else
                {
                    runRegKey.DeleteValue(프로그램명, false);
                    WriteValue("info", "checkBox_윈도우자동시작", "false");
                }
            }

    사실 위의 소스코드에서 가장 중요한 부분은 바로 RegistryKey 항목입니다.

    RegistryKey runRegKey = Registry.CurrentUser.OpenSubKey(“SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run”, true);

    레지스트리키에다가 현재 프로그램을 등록하는것이죠.

    윈도우 7, 8, 10, 11 시작프로그램 항목에 넣어서 할수도 있지만 조금 다른 부분은 바로가기 형식의 파일 링크를 걸어두는게 아닌 레지스트리키에 프로그램 경로를 String(문자열) 형태로 입력하는 방식입니다.

    이제 언제든지 컴퓨터를 켤때마다 자동으로 프로그램이 실행됩니다.

  • ESXi 서버구축 (대량설치 100대)

    ESXi 서버구축 (대량설치 100대)

    100대의 ESXi 서버를 대량으로 구축 할 때 필히 알아야 하는 사항

    1. Shift + O -> autoPartitionOSDataSize=8192

    USB 꽂아서 부팅시 작업

    2. root 아이디 제거 및 접속 아이디 생성, 관리자 권한

    3. 시간 동기화 -> NTP 설정 편집 time.bora.net -> NTP 서버 실행

    4. DCUI (콘솔모드) -> Enable SSH -> serverChecker 등록 (크론잡)

    5. SSL 인증서 등록

    이때 TCP/IP 작업해야함.

    6. SSH 접속 차단 및 보안 유지 – 방화벽 강화

    매크로를 이용한 접속 허용 IP 자동화 기술 추가

    7. 기타 편의사항 변경

    자동로그아웃 해제

    관리 > 시스템 > 고급 설정 > 검색 [ UserVars.HostClientSessionTimeout ] 값을 0 으로 변경

    고급 설정 항목을 수정해도 되지만 그냥 쉽게 도움말 왼쪽 설정을 변경하여도 됩니다.

    ESXi 용량추가 (익스텐트 확장)

    SSD 가격이 점점 저렴해지므로 SSD 500GB 이상 추가 확장

    이렇게 100개의 ESXi 마다 Email 시리얼키 발급

    끝!

    목표

    2023년 진행형

    ESXi 서버 100대 – 아파트 10채

    웹서버 1,000개 구동 – 유동 IP 갯수 1,100개 ( ISP 회선 22회선)

    네임서버 4대 운영 (AWS EC2 아시아 2대, USA 1대, 유럽 1대)

    워드프레스 50,000개 실행

    일 트래픽 10,000,000회

    전세계 웹사이트 점령 – 워드프레스 블로그, 포럼 사이트, 교육 시스템, 기업 시스템구축

  • 2차 네임서버 구축 AWS EC2 DNS Server (3차, 4차, 5차)

    2차 네임서버 구축 AWS EC2 DNS Server (3차, 4차, 5차)

    1차 네임서버 구축 완료

    2차 네임서버 구축 진행중

    AWS EC2 서버를 이용하여 1차 네임서버를 완료하였습니다.

    아무리 아마존이라고 하지만 서버가 다운될수도 있고 또 에러발생할수도 있기에 2차 네임서버 구축을 진행하고 있습니다. 지난주에 거의 40개 가까운 서버를 자동 백업시스템을 만들었죠.

    오늘은 2차 네임서버 구축 진행중에 있습니다.

    이 부분도 백업만큼 중요한 부분이기에 필히 해야합니다.

    1차 네임서버 구축 할 당시 AWS EC2 인스턴스로 만들었기에 Route 53 네임서버를 이용하는것보다는 더 정교하고 프로그래밍이 가능하여 원하는 시스템을 만들때 좋은듯합니다.

    최종적으로 남아 있는 DDNS 서버까지 완성되면 모든 유동 아이피를 고정아이피 처럼 자동화 할 수 있습니다.

    일단 최종단계가 올해 중으로 해결될꺼같고요. 각 서버별 부하량 체크, 백업, 자동화, TVM 생성, TVM 공유, 확장에 용이하도록 만들어놓은상태라 DDNS 완성되고 관리자 툴까지 개발도면 기본세팅은 마무리가 됩니다.

    대량 서버 관리 시스템을 만들고 있는 중이라 한두대 서버가 아닌 천대 이상의 서버를 관리 할 수 있도록 그 규모에 맞게끔 프로그램 제작과 설계를 하고 있죠.

    2차 네임서버가 왜 필요하냐하면 막연히 백업용이라고 할수도 있지만 점점 서버 규모라던지 커지다보니 3차 4차 네임서버까지 만들어서 운영해야할듯합니다.

    2차 네임서버 구축 세팅 방법

    1차 네임서버
    # vi /etc/named.conf
    options {
            listen-on port 53 { any; };
            listen-on-v6 port 53 { none; };
            directory       "/var/named";
            dump-file       "/var/named/data/cache_dump.db";
            statistics-file "/var/named/data/named_stats.txt";
            memstatistics-file "/var/named/data/named_mem_stats.txt";
            recursing-file  "/var/named/data/named.recursing";
            secroots-file   "/var/named/data/named.secroots";
            ...
            allow-transfer  { 2차 네임서버 아이피; };
    #만약 3차 4차 5차 네임서버가 구축 될 경우 아래처럼 아이피를 나열하면됩니다.
            allow-transfer  { 2차 네임서버 IP; 3차 네임서버 IP; 4차 네임서버 IP; 5차 네임서버 IP;};
    
    그리고 zone 영역에 한줄 더 추가합니다.
    zone "네임서버 도메인" IN {
            type master;
            file "Zones/nameServerDomain";
            allow-update    { 2차 네임서버 아이피; };
    #만약 3차 4차 5차 네임서버가 구축 될 경우 아래처럼 아이피를 나열하면됩니다.
            allow-update    { 2차 네임서버 IP; 3차 네임서버 IP; 4차 네임서버 IP; 5차 네임서버 IP;};
    
    };
    2차 네임서버
    # vi /etc/named.conf
    options {
            listen-on port 53 { any; };
            listen-on-v6 port 53 { none; };
            directory       "/var/named";
            dump-file       "/var/named/data/cache_dump.db";
            statistics-file "/var/named/data/named_stats.txt";
            memstatistics-file "/var/named/data/named_mem_stats.txt";
            recursing-file  "/var/named/data/named.recursing";
            secroots-file   "/var/named/data/named.secroots";
            ...
            allow-notify {  2차 네임서버 아이피; };
    #만약 3차 4차 5차 네임서버에 적용 할 경우에는 각 네임서버의 IP를 입력하면 됩니다.
    #3차 네임서버 라면...
            allow-notify {  3차 네임서버 아이피; };
    #4차 네임서러 라면...
            allow-notify {  4차 네임서버 아이피; };
    #5차 네임서버 라면...
            allow-notify {  5차 네임서버 아이피; };
    
    그리고 zone 영역에 한줄 더 추가합니다.
    zone "네임서버 도메인" IN {
            type slave;
            masters { 1차 네임서버 아이피; };
            file "Zones/nameServerDomain";       
    };
    
    2차 네임서버에는 자동 동기화 설정이 되므로 아래 폴더에 named 수정권한이 있어야 합니다.
    chmod 770 /var/named
    chmod 770 /var/named/chroot/var/named
    둘중 어느것을 하더라도 상관없을듯 하나 저는 /var/named 전체 770 권한으로 변경했습니다.
    

    이렇게 세팅하고 2차 네임서버를 실행하면 아래처럼 원래 있어야 할 파일들의 이름이 모두 db-랜덤문자 형식으로 바뀌며 (백업되며) 1차 네임서버에 적용되는 동일한 파일명으로 zone 파일이 생성됩니다.

    이때 바이너리 형태의 문자라서 슬레이브 (2차 네임서버)에서는 수정을 할 수 없습니다.

    위의 파일은 삭제하여도 상관없이 동작합니다.

    새로 생성된 바이너리 형태의 zone 파일들은 자동으로 1차 네임서버랑 연동되어 동작합니다.

    정리

    AWS EC2 인스턴스 3차, 4차, 5차 네임서버 만드는 과정

    1. 2차 네임서버 EC2 인스턴스 스냅샷 생성

    2. 스냅샷으로 AMI 생성

    3. AMI 이용하여 EC2 인스턴스 등록

    4. vi /etc/named.conf (수정)

    #1차 네임서버의 option
            allow-transfer  { 2차 네임서버 IP; 3차 네임서버 IP; 4차 네임서버 IP; 5차 네임서버 IP;};
    
    #3차 네임서버의 option
            allow-notify {  3차 네임서버 아이피; };
    #4차 네임서버의 option
            allow-notify {  4차 네임서버 아이피; };
    #5차 네임서버의 option
            allow-notify {  5차 네임서버 아이피; };

    5. 1차 네임서버 도메인 리스트가 나오는지 확인

    named-checkconf -z

    끝!

    이제 대량도 감당할수 있음.

  • dhclient-script overwrites resolv.conf 초기화 방지

    dhclient-script overwrites resolv.conf 초기화 방지

    지워도 지워도 계속 똑같은 resolv.conf 파일!!

    ; generated by /usr/sbin/dhclient-script
    search ap-northeast-2.compute.internal
    nameserver 172.31.0.2

    아마존 AWS EC2 사용자라면 가상화 VM 에서 사설 아이피로 인한 DHCP 환경으로 /usr/sbin/dhclient-script 스크립트에 의해서 자동으로 초기화가 됩니다.

    vi /sbin/dhclient-script

    vi 편집 프로그램으로 주석 하나 달아주면 해결됩니다.

    # After dhclient brings an interface UP with a new IP address, subnet mask, 
        # and routes, in the REBOOT/BOUND states -> search for "dhclient-up-hooks".
        if [ "${reason}" = "BOUND" ] || [ "${reason}" = "REBOOT" ] ||
           [ ! "${old_ip_address}" = "${new_ip_address}" ] ||
           [ ! "${old_subnet_mask}" = "${new_subnet_mask}" ] ||
           [ ! "${old_network_number}" = "${new_network_number}" ] ||
           [ ! "${old_broadcast_address}" = "${new_broadcast_address}" ] ||
           [ ! "${old_routers}" = "${new_routers}" ] ||
           [ ! "${old_interface_mtu}" = "${new_interface_mtu}" ]; then
    
            if [ -x ${ETCDIR}/dhclient-${interface}-up-hooks ]; then
                . ${ETCDIR}/dhclient-${interface}-up-hooks
            elif [ -x ${ETCDIR}/dhclient-up-hooks ]; then
                . ${ETCDIR}/dhclient-up-hooks
            fi
        fi
    
        #제 경우에는 626번째 라인이었습니다.
        #make_resolv_conf
    
        if [ -n "${new_host_name}" ] && need_hostname; then
            hostname ${new_host_name} || echo "See -nc option in dhclient(8) man page."
        fi
    
        if [[ ( "${DHCP_TIME_OFFSET_SETS_TIMEZONE}" = [yY1]* ) &&
              ( -n "${new_time_offset}" ) ]]; then
            # DHCP option "time-offset" is requested by default and should be
            # handled.  The geographical zone abbreviation cannot be determined
            # from the GMT offset, but the $ZONEINFO/Etc/GMT$offset file can be
            # used - note: this disables DST.
            ((z=new_time_offset/3600))
            ((hoursWest=$(printf '%+d' $z)))
    
            if (( $hoursWest < 0 )); then
                # tzdata treats negative 'hours west' as positive 'gmtoff'!
                ((hoursWest*=-1))
            fi
    
            tzfile=/usr/share/zoneinfo/Etc/GMT$(printf '%+d' ${hoursWest})
            if [ -e ${tzfile} ]; then
                cp -fp ${tzfile} /etc/localtime
    

    주석처리하고 네트워크 재실행 하면 이때부터 resolv.conf 계속 유지됩니다.

    검색 해보면 chmod 444 준다니 여러 방법 보이지만 버전이 오르면서 그러한 부분들도 모두 되지 않습니다.

    2023년 2월 기준으로 현재는 위 방법으로 해결하고 있으니 도움되셨으면 합니다.

    모든 부분들을 직접 해결하다보니 시간이 많이 걸리며 더디게 걸어가고 있지만…

    계속 성장중입니다.

    AWS EC2 인스턴스에서 네임서버 운영중인데 resolv.conf 파일이 변하니깐 DNS가 오락가락 했네요.

    서버때문에 2~3개월 다른일 못하고 있네요.

    곧 마무리되는대로 다시 돌아오겠습니다.

    오늘은 백업서버 자동화, DNS 서버 안정화 작업했습니다.

    일단 모두 해결되었습니다.

  • 윈도우 wget 대체 방법 vmware esxi 파일 공유 소스코드

    윈도우 wget 대체 방법 vmware esxi 파일 공유 소스코드

    윈도우 10, 11에서 VMWARE 강제 재부팅 문제 발생

    vmware 사용할때에는 자체 file share 기능을 이용하여 host 폴더를 지정하여 guest vm에서 같은 폴더를 지정하여 사용하였습니다. 그런데 host pc에서 최근들어 강제로 업데이트 되면서 vmware workstation 버전 상관없이 강제 재부팅이 자주 일어나고 있습니다.

    이를 해결하기 위해서 xenserver, vmware esxi, 기타 등등 linux 기반에서 vm을 관리하는 방법이 윈도우 10 강제 재부팅을 막을 수 있는 유일한 방법이더군요.

    게중에는 윈도우10, 11 업데이트를 막으면 된다는 글들이 많지만 실제로 수도 없이 해보았고 업데이트 안될시 불이익 등등 다 따져보았을때 운영체제를 바꾸는것이 정답이더군요.

    결국 ESXi 서버를 도입하게 되었습니다.

    그런데 이때 문제가 발생하더군요.

    기존에 vmware workstation 에서는 위에서 이미 말씀드린바 공유폴더를 지정할수 있었습니다.

    ESXi 와 Xenserver 와 같은 시스템에서는 그러한 부분들이 잘 되어 있지 않아 (제가 모를수도 있고요) 직접 guest vm마다 공유폴더를 만들어서 사용하려합니다.

    이렇다보니 윈도우7, 윈도우10 guest vm에서 파일을 강제로 다운받아야 하는데 리눅스처럼 wget 기능이 없어 윈도우 wget 대체 프로그램을 찾다가 파워쉘이 유일한 방법이더군요.

    그래서 제가 직접 만들게 된겁니다.

    wget.exe 파일 다운로드

    아래 파워쉘 방법은 그냥 참고 하시고요.

    매번 배치파일 만들어서 매번 저 명령어를 외울수도 없고…

    powershell "(New-Object System.Net.WebClient).DownloadFile('https://vlog.tion.co.kr/app/wget.exe','C:\Windows\System32\wget.exe')"
    
    powershell "(New-Object System.Net.WebClient).DownloadFile('https://URI','Filename.zip')"

    윈도우 wget 대체 소스코드 공유

    C#으로 만들었으며 소스코드는 그대로 올려놓을테니 저처럼 직접 필요한분들은 C#으로만들어 쓰세요.

    wget.exe 파일 다운로드

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Text;
    using System.Threading.Tasks;
    using static System.Net.Mime.MediaTypeNames;
    
    namespace wget
    {
        internal class Program
        {
            static void help()
            {
                Console.WriteLine("wget version: 1.0");
                Console.WriteLine("wget: missing URL");
                Console.WriteLine("Usage: wget https://vlog.tion.co.kr/app/wget.exe");
                Console.WriteLine("");
                Console.WriteLine("Try `wget --help` for help");
                Console.WriteLine("");
                Console.WriteLine("made by 리눅스맨 2023-02-24 vlog.tion.co.kr");
            }
            static void Main(string[] args)
            {
    
                if (args.Length == 0)
                {
                    help();
                }
                else
                {
                    switch (args.Length)
                    {
                        case 1:
    
                            if (args[0].Contains("http"))
                            {
                                Uri uri = new Uri(args[0]);
    
                                string fileName = null;
                                string[] uriSegments = uri.Segments;
                                int indexSegment = 0;
                                foreach (string getFileName in uriSegments)
                                {
                                    if (++indexSegment == uriSegments.Length)
                                    {
                                        //Console.WriteLine(getFileName);
                                        fileName = WebUtility.UrlDecode(getFileName.Trim());
                                    }
    
                                }
    
                                string remoteUri = uri.OriginalString;
                                string myStringWebResource = remoteUri;
                                // Create a new WebClient instance.
                                WebClient myWebClient = new WebClient();
                                // Concatenate the domain with the Web resource filename.
                                Console.WriteLine("Downloading File \"{0}\" from \"{1}\" .......\n\n", fileName, myStringWebResource);
                                // Download the Web resource and save it into the current filesystem folder.
    
                                myWebClient.DownloadFile(myStringWebResource, fileName);
                                Console.WriteLine("Successfully Downloaded File \"{0}\" from \"{1}\"", fileName, myStringWebResource);
                                Console.WriteLine("\nDownloaded file saved");
    
                            }
                            else if (args[0].Equals("--help"))
                            {
                                
                            }
                            else
                            {
                                help();
                                
                            }
    
                            break;
                    }
                }
                
            }
        }
    }
    

    이제 필요한 파일을 웹서버 하나 만들어서 업로드 하고 필요할때마다 wget.exe 파일 이용해서 다운받으면됩니다.

  • 웹서버 다운 원인 분석 결국 해커가 서버를 해킹

    웹서버 다운 원인 분석 결국 해커가 서버를 해킹

    웹서버 다운 원인 분석중입니다.

    워드프레스 홈페이지가 다운 되었다고 메일이 날라와서 그 시간대 로그를 확인해보았습니다.

    2023년 2월 17일 (금일 아침) 7시 47분 ~ 8시 8분 대략 22분정도 다운이 되었습니다.

    위의 파일은 serverChecker.php 파일을 1분마다 다운로드 받는것인데 제가 만들어놓은 스크립트가 있습니다.

    serverChecker.php 접속해서 자동으로 로그를 기록합니다.

    그걸 사용하시면 언제 웹서버가 다운되었는 정확하게 알 수 있습니다.

    파일 크키가 0일때 서버가 다운된것이므로 파일 크기 0일때를 조사해보았습니다.

    ll -SSh /root/_TION/_logs_tionServerMonitor/ | grep ^-

    3일정도를 분단위로 로그를 저장하고 있는데 하루에 한번씩 20분정도 서버가 멈추는 것으로 파악되었습니다.

    그리고 의문의 한가지가 있는데요.

    같은 시각 다른 서버에서도 동일한 흔적이 있었습니다.

    같은서버가 아님에도 불구하고 같은 시간 동일하게 서버가 다운되었습니다.

    그래서 로그를 확인해보니… 해킹시도로 인한 서비스 다운이 된듯합니다.

    최근에 관리자 접속이 계속 잠기고 로그인 할 수 없었는데 해커 2명정도가 계속 서버에 붙어서 로그인 시도를 하고 있었네요. 안타깝습니다.

    지금 확인하고 있는 가운데에도 계속 저렇게 해킹시도를 하고 있으니…

    이벤트 로그에서 해킹시도가 명백해졌으므로 IP 차단으로 해결할 문제는 아닌듯하고

    서버 root 접속 시도하는 모든 아이피를 자동으로 차단하도록 해야될꺼같단 생각이 들었습니다.

    아마존 EC2 운영은 보안서버가 EC2 서버 앞단에 있어서 방화벽으로IP를 제어할수 있지만

    ESXi, Xenserver 같은 개인서버를 운영할 경우 방화벽 단계가 없다보니 애시당초 로그인 자체를 못하게 막아야합니다.

    로그인 아이디 단 1번이라도 틀리면 접속을 못하도록 막아버려야 할꺼같습니다.

    ESXi 서버를 운영할 경우에는 아래 항목을 찾아서 변경합니다.

    Security.AccountLockFailures
    사용자 계정을 잠그기 전 허용되는 최대 로그인 실패 횟수입니다. 0은 계정 잠금을 사용하지 않습니다.
    5
    
    Security.AccountUnlockTime
    허용되는 최대 로그인 시도 실패 횟수를 초과한 후 사용자의 계정을 잠그는 기간(초)입니다.
    900
    

    저는 숫자를 900 기본값에서 999999999초로 변경하였습니다.

    31년동안 접속못하도록 막는 수치입니다.

    해커 IP가 31년 차단 당했네요.

    우리 31년 후에 만나자!~

    안녕.

    동시에 방화벽 설정에 접속 허용 IP를 지정해버렸습니다.

    완벽하게 접속하지 못하는것을 확인하였습니다.

    혹시나 유동IP 바뀌면 안되므로 고정아이피 3개랑 유동아이피 3개를 넣었습니다.

    바뀌더라도 어느 하나는 접속 가능하겠죠 ㅎㅎ

    해결 완료!

  • [ 해결 ] VMWARE VM-Tools 설치 안될때 윈도우7 SP1 보안업데이트 SHA-2 보안알고리즘 패치하세요

    [ 해결 ] VMWARE VM-Tools 설치 안될때 윈도우7 SP1 보안업데이트 SHA-2 보안알고리즘 패치하세요

    윈도우7 SP1 에서 vmware vm-tools 설치가 안되는 경우 있습니다.

    이때에는 보안업데이트를 제대로 하지 않아서입니다.

    보안업데이트 SHA-2 보안알고리 패치를 해야합니다.

    파일은 32비트 64비트 모두 다운받아놓았습니다.

    다른 윈도우에서는 접속을 하더라도 다운로드 받을 수 없어 파일을 리눅스맨 블로그에 올려놓았습니다.

    https://catalog.update.microsoft.com/Search.aspx?q=KB4474419

    보안 설치 후 윈도우 다시 시작하기 하면 아래처럼 업데이트를 받습니다.

    다시 VMWARE Tools 를 설치하면 정상적으로 에러 없이 설치가 진행됩니다.

    매번 VMware Tools 를 설치하면 설치 도중에 빨간색 경고창이 뜨면서 에러만 발생하고 설치가 안되었습니다.

    처음에는 윈도우7 SP1 설치가 안되어서 안되더니 SP1 업데이트 이 후에도 설치가 안되어서 이것저것 알아보다가

    보안업데이트 SHA-2 보안알고리 문제를 파악하고 패치 이후 모든것들이 잘 되기 시작했습니다.

    만약 이 패치가 진행되지 않게된다면 아래 내용들을 사용할 수 없게됩니다.

    닷넷 프레임워크 4.7버전 이상의 버전

    VMWARE Tools 설치 불가능

    익스플로러 브라우저 11버전 이상 설치 불가능

    패치 잘하세요~

  • ESXi 관리자 root 접속 차단 해킹막는방법

    ESXi 관리자 root 접속 차단 해킹막는방법

    사용자 이름이나 암호가 잘못되어 로그인을 완료할 수 없습니다.

    예전에 이와 관련하여 글을 작성한적 있습니다.

    ESXi 접속 시도가 많아 아래처럼 나오면서 관리자가 접속 못하는 일이 벌어집니다.

    예전에 이부분의 글을 작성하면서 사설 IP가 답이라고 생각했었죠.

    그런데 사설IP를 달기위해서는 랜카드2개와 공유기가 필요합니다.

    외부에서 VMWARE에서 네트워크 연결을 바로 할 수 없다는 점에서 상당히 불편하더군요.

    이를 보안하기 위해 글을 다시 작성하고 있는중입니다.

    ESXi ROOT 접속 차단

    ESXi root 접속을 막아버리고 모든 로그인 접속 시도를 수용하는 방식을 택하였습니다.

    root로 지속적으로 접속 실패시 root계정을 Lock 시켜버립니다.

    그리고 위에서 보셨던 [ 사용자 이름이나 암호가 잘못되어 로그인을 완료할 수 없습니다. ] 이 멘트와 함께 로그인 자체가 막혀버리게 됩니다.

    당장 접속이 되도록 풀어야하니 VM 게스트 PC를 모두 종료하고 재부팅을 한번 하시던지…

    root 접속이 안될때 timeout 시간을 0으로 바꾸고 [ Restart Management Agents ] 눌러주세요.

    (※ DCUI 모드에서 F2번 눌러 [ Troubleshooting Options ] 항목)

    원천적으로 ROOT 계정의 권한을 없애버릴경우 가장 이상적인 방법같습니다.

    ESXi root 관리자 사용안함

    1. [ 관리 -> 보안 및 사용자 -> 사용자 ] 이동해주세요.

    사용자 root 하나가 나와있다면 정상입니다.

    이곳에 이제 사용자 추가를 할겁니다.

    2. 사용자를 추가합니다.

    설명항목은 필수가 아니며 어떠한 계정인지 알기 쉽도록 적는 설명란입니다.

    새로운 ESXi 아이디가 추가 되었다면 권한을 줘야합니다.

    지금은 아무런 권한이 없어서 할 수 있는게 없습니다.

    3. 관리자 권한을 부여합니다.

    [ 호스트 -> 작업 -> 사용 권한 ] 항목을 들어가서 [ 사용자 추가 ] 항목을 클릭합니다.

    방금 생성한 계정을 선택합니다.

    관리자 항목을 선택합니다.

    Root 모든 항목을 체크합니다. (관리자 선택하면 자동으로 모두 체크됩니다)

    사용자 추가 버튼을 눌러주세요.

    추가 된 아이디가 관리자 권한을 획득한것을 확인하였습니다.

    4. 로그아웃 하고 새로 만든 계정으로 로그인합니다.

    이 과정은 root 계정을 역할을 없애서 로그인 접속할 수 없게 만들기 위함입니다.

    로그인이 정상적으로 되었는것을 확인하였습니다.

    다시 [ 호스트 -> 작업 -> 사용 권한 관리 ] 항목을 들어갑니다.

    [ 관리자 ] 항목을 [ 권한 없음 ] 항목응로 변경 합니다.

    정상적으로 바뀌었습니다.

    이제 로그아웃하여 root 로그인을 시도해봅니다.

    이 작업을 수행할 수 있는 사용 권한이 거부되었습니다.

    라고 나왔다면 정상적으로 되었습니다.

  • VMWARE ESXi does not support the multple monitors feature in shared or remote virtual machines

    VMWARE ESXi does not support the multple monitors feature in shared or remote virtual machines

    VMWARE ESXi does not support the multple monitors feature in shared or remote virtual machines

    Cannot Use Multiple Monitors

    This virtual machine cannot use multiple monitors for the following reasons:

    • VMware ESXi does not support the multiple monitors feature in shared or remote virtual machines.
    • Please check the user manual for help on fixing these issues.

    Originally, VMware allows you to create dual monitors by selecting the Cycle Multiple Monitors item in full mode.

    원래 VMware 에서는 전체모드 상태에서 Cycle Multiple Monitors 항목을 선택하여 듀얼 모니터를 만들 수 있습니다.

    However, the ESXi model does not support this part.

    하지만 ESXi 모델에서는 이 부분을 지원하지 않습니다.

    When operating on a local PC with a simple VMware workstation-like model, multiple monitors can be used with just the following two points.

    단순하게 VMware workstation 같은 모델로 로컬 PC에서 동작할 경우에는 아래 2가지 사항만 맞추면 듀얼모니터를 사용할 수 있습니다.

    로컬 VMware 듀얼모니터 만들기

    1. 세팅에서 모니터를 2개로 변경합니다.

    이때 그래픽카드 메모리를 너무 낮은 4MB 처럼 만들지 마시고 128MB 이상의 비디오 메모리를 지정해주세요.

    여유가 있다면 1기가 정도의 메모리를 세팅해도 좋습니다.

    2. vmware tools 를 설치하세요.

    만약 vmware tools 의 버전이 다르다면 Reinstall VMware Tools… 항목을 클릭하여 새로 설치해야합니다.

    설치가 안될경우 듀얼모니터는 동작하지 않습니다.

    결론

    VMware workstation 버전으로 로컬 VM에서는 듀얼모니터가 동작하지만, ESXi 원격 서버 VM에서는 자체적으로 지원하지 않아 듀얼 모니터를 사용할 수 없습니다. 사용하려면 로컬로 다운로드 받아서 사용하고 다시 업로드 하여 서버에 등록해서 사용해야합니다.

    ESXi 6.x, ESXi 7.x 모델 모두 듀얼모니터 사용불가능

    현재 사용하고 있는 버전은 ESXi 7.0.3

    ESXi 7.0.3 (2023년기준)에서도 여전히 듀얼모니터는 사용불가능합니다.

    감사합니다.

  • ESXi NAT NETWORK 만들기 IP 동일하게 같은 네트워크 만들기

    ESXi NAT NETWORK 만들기 IP 동일하게 같은 네트워크 만들기

    ESXi NAT NETWORK 만들기 IP 동일하게 같은 네트워크 만들기

    안녕하세요 리눅스맨 워드프레스 블로그에 오신것을 환영합니다.

    요즘 리눅스밍 툴도 개발하고 있으니 많은 검색과 관심 부탁드립니다.

    가끔 이 부분 NAT Network가 왜 필요하냐고 묻는분들이 계실듯합니다.

    공유기가 있으면 딱히 NAT 네트워크를 만들 필요가 없죠. 공유기에서 자동으로 만들어주기 때문이죠.

    공유기가 없지만 NAT 환경을 만들고 싶을때 사용합니다.

    사실 그 보다 더 중요한 부분은 특정 VM끼리 IP 를 동일하게 맞추기 위함입니다.

    가령 예를들어 블로그 운영을 할 경우 A라는 VM과 B라는 VM의 아이피를 동일하게 만들어서 A VM에서는 이웃관리를 자동화로 운영하고 B VM에서는 원격으로 접속하여 블로그관리대행을 할 경우에 바로 이러한 경우에 2개의 VM을 NAT으로 연결해야합니다.

    pfsense 툴 없이도 NAT 환경을 만들 수 있습니다.

    하지만 ESXi 에서는 NAT이 기본적으로 제공되지 않아 VMWRE처럼 방식대로 할 수 없습니다.

    VMWARE Workstation 버전에서는 아래 링크를 통해 2개이상의 VM을 같은 IP 대역대로 만들어 낼 수 있습니다.

    물론 NAT방식과 조금 다르지만 내가 원하는 VM끼리 NAT 방식으로 운영한다는 점에서는 IP 1개로 다수 VM을 여러개 운영할수 있죠. 호스트 IP를 공유하는건 아니고요. VM이 만들어낸 특정 IP 1개를 바탕으로 여러개 VM이 사용하는 방식입니다.

    이 방법식으로 여러 그룹의 NAT 운영을 할 수 있게됩니다.

    ESXi NAT NETWORK Setting

    1. 네트워킹 [ 가상 스위치 ] [ 포트 그룹 ] 항목에서 순서대로 각각 추가를 합니다.

    이 작업은 어렵지 않습니다.

    단순하게 포트 그룹 추가 버튼을 눌러서 기본으로 이름만 잡아주고 만들면됩니다.

    이름은 기억하기 편하도록 VM IP를 공유할 게스트의 이름으로 시작해도 됩니다.

    제 경우에는 네트워크 업데이트 이름을 [ NAT_TVM10_NOUPDATE ] 이렇게 만들었습니다.

    NAT을 사용할건데 TVM10_NOUPDATE 라는 VM 게스트의 이름을 활용한것이죠.

    매우중요

    ※ 이때 가상스위치는 위에서 새로 만든 NAT_TVM10_NOUPDATE 스위치로 선택해야합니다.

    만약 스가상스위치를 선택하지 않게된다면 이상하게 꼬이게되어 다른 네트워드크를 선택하더라도 NAT_TVM10_NOUPDATE 로 연결될 수 있습니다.

    2. 호스트로 지정할 VM의 설정항목에서 네트워크 어댑터 [ NAT_TVM10_NOUPDATE ] 하나 더 추가합니다.

    VM_NAT_TVM10_NOUPDATE 네트워크 어댑터를 이용하여 통신을 하기 위해 추가하는것입니다.

    즉 이 네트워크 어댑터로 게스트VM쪽으로 인터넷이 되도록 IP를 송출한다는 이야기입니다.

    3. 게스트로 지정할 VM의 설정항목에서 네트워크 어댑터를 새로 만든 NAT_TVM10_NOUPDATE 네트워크로 변경합니다.

    게스트로 지정되는 VM에서는 딱히 IP를 할당받을 필요가 없다면 기존 네트워크 어댑터를 위처럼 변경하면됩니다.

    아이피를 유지하면서 NAT을 연결하시려면 역시 네트워크 어댑터를 추가해서 동일하게 세팅하면됩니다.

    4. 호스트 VM에서 새로 추가한 네트워크 어댑터로 인터넷이 되도록 설정합니다.

    윈도우10 설정 – 이더넷 항목에서 [ 어댑터 옵션 변경 ] 항목에 들어갑니다.

    새로 만들어진 Ethernet1 이라는 네트워크가 보일 겁니다.

    현재는 이곳에 자동으로 IP가 할당된 상태이지만 속성에 들어가서 설정을 변경해야합니다.

    쿠팡 버튼은 리눅스맨 서버 호스팅 운영비라 생각해주시고 너그럽게 이해해주세요.

    손해보시는건 없고 그저 한번 쿠팡창 열릴뿐입니다.

    바로 닫고 아래 내용보시면됩니다.

    IP 설정을 꼭 제가 알려드린대로 바꾸셔야 합니다.

    아래 내용보시고 그대로 따라하시면 됩니다.

    [coupang]

    아래처럼 설정을 하지 않게된다면 호스트 VM에서는 총 2개의 아이피를 할당 받게 됩니다.

    내부 통신망을 만들어야하므로 네트워킹 -> 인터넷 프로토콜 버전 4(TCP/IPv4) 항목의 IP를 아래처럼 변경해주세요.

    [coupang_end]

    IP : 192.168.137.10
    SubMask : 255.255.255.0
    Gateway : 192.168.137.1
    
    DNS1 : 168.126.63.1
    DNS1 : 168.126.63.2

    그리고 아래 항목도 매우 중요하니 아래 항목을 꼭 설정해야합니다.

    원래 사용하던 네트워크 Ethenet 클릭 -> 속성 -> 공유 -> 다른 네트워크 사용자가 이 컴퓨터의 인터넷 연결을 통해 연결할 수 있도록 허용(N) 체크해야합니다.

    두개의 네트워크 어댑터 설정이 다르니 꼭 주의하셔야 합니다.

    이제 2개의 VM 아니 3개의 VM에 대해서 NAT이 제대로 이루어졌는지 확인해보겠습니다.

    일단 호스트 VM [ TVM10_NOUPDATE ] 의 IP를 확인해보니 211.xxx.xx.30 으로 나타납니다.

    게스트로 지정한 TVM10_ADOBE VM에 대해서 확인해보니 역시 211.xxx.xx.30 아이피로 동일하게 할당받았습니다.

    게스트로 지정한 TVM10_PROGRAMMING VM에 대해서 확인해보니 역시 211.xxx.xx.30 아이피로 동일하게 할당되었네요. 이로소 총 3대의 VM이 동일한 IP영역을 갖는 NAT 환경이 구성되었습니다.

    이 쉬운 방법을 외국에서는 이상한 프로그램 사용해서 만들어야 한다고 알려주더군요.

    조금 아쉬움도 남고해서 제가 알고 있는 방법을 여러분들에게 알려드리고자 리눅스맨 워드프레스에 남겼습니다.

    ESXi 뿐만 아니라 Xenserver에서도 가능하며 VMWARE 등 각종 가상화 OS에서 모두 사용할 수 있는 방법입니다.

    리눅스에서도 NAT 방식 만들려면 이러한 방법으로 윈도우7이나 윈도우10 호스트 만들고 보내는 네트워크 어댑터를 이용하면 됩니다.

    NAT 방식으로 할 수 있는 사업모델이 많습니다.

    클라이언트와 IP를 동일하게 맞춰야 하는 경우에도 이와같은 방식을 이용하여 호스트 PC에 VPN을 생성하여 게스트 PC에서 호스트PC로 접근하도록 만들수도 있습니다. 방법은 다양하고 많기 때문에 굳이 돈내가며 프로그램 사용해가며 할 필요는 없을겁니다.

    ESXi 와 Xenserver 그리고 VMWARE 만 존재하면 원격시스템과 무인화 시스템을 모두 만들어 낼 수 있습니다.

    감사합니다.

  • Sharing IP among guest PCs with host-only network in vmware

    Sharing IP among guest PCs with host-only network in vmware

    How to Share IP among guest PCs with host-only network in vmware

    Sometimes you create the same IP for each guest PC in the virtual window.

    This should be done in the following ways:

    가상윈도우에서 게스트PC끼리 아이피를 동일하게 만들어야 하는 경우가 있습니다.

    그러한 경우에 아래 방법대로 진행해야 합니다.

    How to Share IP among guest PCs

    1. Virtual Network Editor… Click!

    2. Add a Virtual Network and select one value

    In VMnet1, select one of the VMnet19s.

    If you need to share IP between guests, you must use only the specified VMnet.

    VMnet1 ~ VMnet19 중에 하나를 선택합니다.

    게스트간에 IP를 공유해야한다면 지정한 VMnet 만 사용해야합니다.

    I made 5.

    3. Virtual Machine Settings on GuestPC 1

    I will choose number 5 and share it with the guestPC.

    5번을 선택해서 공유할겁니다

    The guest PC that will receive the IP must create two networks.

    One needs to receive IP successfully, and the other is a host-only network that you just created.

    IP를 수신할 게스트 PC는 두 개의 네트워크를 생성해야 합니다.

    하나는 IP를 받아야 하고, 다른 하나는 방금 생성한 Host-only 네트워크 중 5번 입니다.

    4. Virtual Machine Settings on GuestPC 2

    GuestPC to share IP will only add Host-only network 5.

    아이피를 공유할 GuestPC는 Host-only 5번 네트워크만 추가합니다.

    5. GuestPC1 settings network adaptor with Internet connection

    When you enter a network environment, there are two networks.

    One of these can use the Internet and the other cannot.

    Click the network you want to enable, and then click Properties.

    네트워크 환경에 들어가면 2개의 네트워크가 있습니다.

    이중 하나는 인터넷이 되고 다른 하나는 인터넷이 되지 않습니다.

    인터넷이 되는 네트워크를 클릭하여 속성을 클릭합니다.

    Check it!! [ allow other network users to connect through this computer’s internet connection ]

    인터넷 되는 네트워크 어댑터에서 공유를 해야합니다.

    공유 탭을 클릭하여 [ 다른 네트워크 사용자가 이 컴퓨터의 인터넷 연결을 통해 연결 할 수 있도록 허용(N) ] 체크합니다.

    6. GuestPC1 settings other network adaptor

    다른 네트워크에 아래처럼 TCP/IPv4 항목을 세팅합니다.
    IP : 192.168.137.10
    SubMask : 255.255.255.0
    Gateway : 192.168.137.1
    
    DNS1 : 168.126.63.1
    DNS1 : 168.126.63.2
    

    보통 윈도우10 이상에서는 자동으로 다른 네트워크 어댑터에 아래처럼 세팅이 됩니다.

    윈도우7과 그 이하 버전에서는 직접 수동으로 설정해주셔야 합니다.

    Success!!

    성공!!

    Enjoy Internet!!

    인터넷을 즐기세요^^

  • 닷넷프레임워크 전체 버전 SDK 비쥬얼 스튜디오 개발 다운로드

    닷넷프레임워크 전체 버전 SDK 비쥬얼 스튜디오 개발 다운로드

     Download .NET SDKs for Visual Studio

    최근에 비쥬얼스튜디오에는 닷넷프레임워크 4.8 이상이 기본탑재되어 나옵니다.

    그 이전 단계의 닷넷프레임워크를 사용하거나 프로그램된 소스를 변경하려면 각 버전에 맞게 SDK를 설치해야지만 가능해집니다.

    저는 이번에 4.5.1 버전으로 제작된 C# 프로그램을 수정해야했습니다.

     

    Supported versions 과 Out of sepport versions 이렇게 두 항목으로 나뉘어집니다.

    보통 윈도우 7 까지 개발을 했다면 닷넷프레임워크 4.5까지라고 보면되고요.

    그 이후부터는 보안레벨이 변경되면서 윈도우7에서도 특정 보안 업데이트를 받지 않는이상 4.6 버전 부터 사용할 수 없습니다.

    4.5.1 버전이 보안업데이트 직전 버전이라고 보면되고 윈도우7이 현재 자동업데이트가 안되므로 대부분 4.5 이하의버전에서 프로그램잉을 해야합니다.

    보안업데이트가 된 윈도우 7에서는 4.8까지도 설치가 가능합니다.

     

    언제까지 버전을 다운로드 할 수 있도록 제공해줄지는 모르겠지만 최대한 온라으로 설치를 해보죠.

    만약 아래 링크로 다운되지 않거나 사라졌거나 한다면 저에게 따로 링크를 요청해보시기 바랍니다.

    최대한 개발을 하기 위해서 설치 SDK를 보관하고 있지만 저도 언제까지 보관할 수 있을 지 모르겠습니다.

    4.51, 4.52, 4.6, 4.61. 4.62, 4.7 4.71, 4.72, 4.8

    (현재 이 버전은 제가 SDK로 개발팩을 오프라인 확보 해 놓은 상태입니다.)

    Download matrix for .NET Framework
    Version Developer Pack Tooltip: Do you want to build apps? The developer pack is used by software developers to create applications that run on .NET Framework, typically using Visual Studio. Runtime Tooltip: Do you want to run apps? The runtime includes everything you need to run existing apps/programs built with .NET Framework. Release notes
    .NET Framework 4.8.1 Developer Pack Runtime Release notes
    .NET Framework 4.8 Developer Pack Runtime Release notes
    .NET Framework 4.7.2 Developer Pack Runtime Release notes
    .NET Framework 4.7.1 Developer Pack Runtime Release notes
    .NET Framework 4.7 Developer Pack Runtime Release notes
    .NET Framework 4.6.2 Developer Pack Runtime Release notes
    .NET Framework 3.5 SP1 Runtime Release notes

     

    Version Developer Pack Tooltip: Do you want to build apps? The developer pack is used by software developers to create applications that run on .NET Framework, typically using Visual Studio. Runtime Tooltip: Do you want to run apps? The runtime includes everything you need to run existing apps/programs built with .NET Framework. Release notes
    .NET Framework 4.6.1 Developer Pack Runtime Release notes
    .NET Framework 4.6 Developer Pack Runtime Release notes
    .NET Framework 4.5.2 Developer Pack Runtime Release notes
    .NET Framework 4.5.1 Developer Pack Runtime Release notes
    .NET Framework 4.5 Runtime Release notes
    .NET Framework 4.0 Runtime Release notes

     

    닷넷프레임워크 4.5.1 SDK 개발팩을 다운받아 설치했습니다.

    최근에 대부분 TVM 이미지를 윈도우 10으로 변경하기는 했지만…

    그래도 버전이 낮으면 조금 더 가볍겠죠 ㅎㅎ