WSL2에서 Host IP 자동으로 구하기

igotoo·2021년 5월 27일
1

개요

  • WSL2 VM(guset)에서 Host(WIndows10) 웹서비스, SSH 접속을 하기 위해서 Host IP가 필요
  • 노트북을 회사와 집에서 사용하고 있어 매번 Host IP를 확인하기 번거로워 shell script로 자동으로 구하는 방법 필요
  • nameserver IP 또는 windows 명령어 ipconfig.exe를 활용 ip를 구하고 환경변수로 저장하고 호스트 서비스 접속이 필요할때 해당 환경 변수를 사용
  • 아래 방법은 guest vm이 Linux 일경우만 가능함

nameserver IP

  • Linux에서 WSL 시작 될 때 설정 하는DNS 서버 설정 파일의 nameserver IP을 활용

  • Window에서 어뎁터 설정(제어판\네트워크 및 인터넷\네트워크 연결)에서 보면 vEthernet (WSL) 표시 되는 어뎁터의 IP

    > cat /etc/resolv.conf
    # This file was automatically generated by WSL. 
    To stop automatic generation of this file, 
    add the following entry to /etc/wsl.conf:
    # [network]
    # generateResolvConf = false
    nameserver 192.168.61.129
  • WSL guest vm은 기본적으로 동적으로 IP 할당 받아 NAT를 통해 외부와 통신함

    > ip addr |grep eth0
    5: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc 
    mq state UP group default qlen 1000
        inet 192.168.61.130/28 brd 192.168.61.143 scope global eth0
  • /etc/resolv.conf의 nameserver 뒤의 IP를 가져와 $HOSTIP로 저장

    > export HOSTIP=$(cat /etc/resolv.conf | grep -oP '(?<=nameserver ).+')
    > echo $HOSTIP
    192.168.61.129
    
    #perl 정규표현식이 어렵다면
    > tail -1 /etc/resolv.conf | cut -d' ' -f2
    192.168.61.129
    • P, --perl-regexp
      Interpret PATTERNS as Perl-compatible regular expressions
    • o, --only-matching
      Print only the matched (non-empty) parts of a matching line, with each such part on a separate output line.

ipconfig.exe

  • WSL에서 windows 명령어를 사용할 수 있으므로 Linux grep 명령어로 WSL IP 획득

    > export HOSTIP=$(/mnt/c/Windows/System32/ipconfig.exe \
    | grep -A 10 WSL | grep IPv4 | awk '{print $14; exit;}')
    ~
    > echo $HOSTIP
    192.168.61.129

    -A NUM, --after-context=NUM
    Print NUM lines of trailing context after matching lines.

    -B NUM, --before-context=NUM
    Print NUM lines of leading context before matching lines.
    -C NUM, -NUM, --context=NUM
    Print NUM lines of output context.

.zshrc(또는 .bashrc)

  • 로그인 시에 자동으로 실행 되도록 .zshrc(또는 .bashrc)에 추가

    export HOSTIP=$(cat /etc/resolv.conf | grep -oP '(?<=nameserver ).+')
    
    alias gokdrvstg01='ssh vagrant@$HOSTIP -p 60001'
    alias gokdrvstg02='ssh vagrant@$HOSTIP -p 60002'
    alias gokdrvstg03='ssh vagrant@$HOSTIP -p 60003'
    alias gokdrvstg04='ssh vagrant@$HOSTIP -p 60004'

참고

profile
개발자가 되고 싶은 오래된 아키텍트

0개의 댓글