WSL의 resolvconf의 리셋을 쉽게 하려면

10886 단어 PowerShellWSLWSL 2tech
※ 대전제는 WSL2.
WSL2는 최근에 가끔 손상/etc/resolv.conf되며 IP 해결에 실패합니다.
일시적인 것인지 모르겠지만 명령만으로는 해결할 수 없다는 생각에 셸 스크립트.zshrc는alias로 등록되었습니다.

컨디션

  • Ubuntu 20.04 on WSL2
  • Windows build version 2004, 구축 번호 21292.1010(Windows insider 프로그램의 Dev 채널과 일치)
  • 전제 조건


    WSL2는 기본적으로 resolv입니다.conf가 자동으로 생성되지만, 독립적으로 설정된 DNS라면 매번 다시 쓰고 손상되는 문제가 있습니다.개인의 사용 수요에 따라 이것은 매우 어렵다.
    그래서 매번 Resolv.conf를 다시 쓰지 않기 위해서 /etc/wsl.conf에 다음과 같은 설정을 추가했습니다.
    [network]
    generateResolvConf = false
    
    하지만 지금은 이 설정이 되어 있지만 가끔 파일과 함께 사라지기도 한다(수수께끼)🥲

    WSL의 셸 파일에서 Powerherll 명령 호출


    WSL에 설정된nameserver IP는 powerherllipconfig 명령을 통해 확인할 수 있습니다.파워셸을 일부러 시작하지 않아도 WSL에서 확인할 수 있다.
    ❯ powershell.exe ipconfig
    
    Windows IP 構成
    
    
    イーサネット アダプター イーサネット:
    
       接続固有の DNS サフィックス . . . . .: flets-east.jp
    (中略)
    
    イーサネット アダプター vEthernet (WSL):
    
    (中略)
       IPv4 アドレス . . . . . . . . . . . .: 172.19.64.1
    (中略)
    
    ※ 대략ipconfig.exe도 가능합니다.
    이더넷 어댑터 vEthernet(WSL)의 IPv4 주소를 원합니다172.19.64.1.이것은 Resolv입니다.conf에 묻고 싶습니다.
    아래의 셸 파일에서 가져오려고 했지만, 파워홀입니다.exe를 찾을 수 없는 오류가 발생했습니다.
    명령줄에서 실행할 때 이미 움직여서 PATH의 해석 방법이 다를 수 있습니다.
    NAMESERVER=$(powershell.exe ipconfig | grep "IPv4" | tail -1 | awk '{print $NF}' | awk 'sub(/\r$/,"")')
    
    원본은 아래 글에서 빌려 썼다.
    https://qiita.com/souyakuchan/items/a484e1dd23639eb63bdb#결론 - 호스트 측 지정 - ip -
    이 문제는 지정된 절대 경로를 통해 해결되었다.tail -1는 WSL 측의 네트워크 어댑터가 자신의 환경에서 마지막으로 왔기 때문이다.
    # sh ファイル実行時、 powershell が見えなかったので、絶対パス指定
    POWERSHELL_COMMAND="/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe"
    NAMESERVER=$($POWERSHELL_COMMAND ipconfig | grep "IPv4" | tail -1 | awk '{print $NF}' | awk 'sub(/\r$/,"")')
    

    DNS 검색 설정 포함


    매개 변수로 수신하면 다음과 같은 두 파일로 나뉜다.아래와 같이 호출할 것을 구상하다.
    패스 같은 건 지저분하지만 혼자 해도 괜찮아요. 눈 감으세요.
    ~/scripts/write_resolv_conf_with_dns.sh
    
    보충
    다음은 tmux를 사용한 상태에서 순조롭게 진행되지 못하는 상황이 있기 때문에 아래에서 실시하는 것이 비교적 안전할 수 있음을 설명한다.
    wsl.exe sh -c "~/scripts/write_resolv_conf_with_dns.sh"
    

    write_resolv_conf_with_dns.sh


    에 구성됩니다.
    #!/bin/sh
    
    # DNS SERVER をスペース区切りで入れとく。適宜置き換え。
    DNS_SERVER="でぃーえぬえすさーばー1 でぃーえぬえすさーばー2 でぃーえぬえすさーばー3"
    sudo ~/scripts/write_resolv_conf.sh $DNS_SERVER
    

    write_resolv_conf.sh


    에 구성됩니다.
    #!/bin/sh
    TMP_FILE_NAME="tmp_resolve.conf"
    
    if [ -f $TMP_FILE_NAME ]; then
      rm $TMP_FILE_NAME
    fi
    touch $TMP_FILE_NAME
    
    # sh のバッチファイル実行上から powershell が見えなかったので、絶対パス指定
    POWERSHELL_COMMAND="/mnt/c/Windows/System32/WindowsPowerShell/v1.0//powershell.exe"
    NAMESERVER=$($POWERSHELL_COMMAND ipconfig | grep "IPv4" | tail -1 | awk '{print $NF}' | awk 'sub(/\r$/,"")')
    
    echo "# created by script, $(date "+%Y/%m/%d %H:%M:%S")" >> $TMP_FILE_NAME
    echo "nameserver $NAMESERVER" >> $TMP_FILE_NAME
    if [ $# != 0 ]; then
      echo "search $@" >> $TMP_FILE_NAME
    fi
    
    cat $TMP_FILE_NAME
    mv $TMP_FILE_NAME /etc/resolv.conf
    

    실행 결과


    끼워 넣은 물건이 정확하게 작동했다.DNS 서버는 샘플로 실제 넣는 것과 다르다.
    ❯ ~/scripts/write_resolv_conf_with_dns.sh
    # created by script, 2021/01/18 07:33:32
    nameserver 172.19.64.1
    search でぃーえぬえすさーばー1 でぃーえぬえすさーばー2 でぃーえぬえすさーばー3
    
    ❯ cat /etc/resolv.conf
    # created by script, 2021/01/18 07:33:32
    nameserver 172.19.64.1
    search でぃーえぬえすさーばー1 でぃーえぬえすさーばー2 でぃーえぬえすさーばー3
    

    zshrc에 명령 호출로 등록하기


    이것도 잡지인데 밑에 썼어요.알리스가 늘어나면 다른 파일로 나누는 게 좋을 것 같아요.
    또한 시도하는 과정에서 tmux를 실행할 때의 문제로 시작하면 스크립트가 순조롭게 작동하지 않습니다.
    일단문제를 회피하기 위해exe를 끼워서 실행합니다.
    물론 Tmux를 시작하지 않은 상태에서도 이동한다.
    # resolv conf
    if [ -f ~/scripts/write_resolv_conf_with_dns.sh ]; then
         alias reset_resolv='wsl.exe sh -c "~/scripts/write_resolv_conf_with_dns.sh"'
    fi
    
    (가끔 tmux에서 조작하면 실패할 때가 있어서 잘 모르겠어요...)

    전망 등


    설정이 더 복잡해지면 다른 프로그래밍 언어로 하고 싶은데...
    현재는nameserver 설정과 DNS 서버만 있기 때문에 파라미터 처리와 파라미터 처리를 고려할 필요가 없지만 더 이상 증가하면 고통스럽다.
    필요하면 다시 생각해봐.

    총결산


    지저분하지만 평소 괴롭혔던 문제를 자동으로 해결할 수 있기 때문에 그곳으로 생각을 돌리는 시간이 줄어들 것 같다.좋은 일.
    앞으로도 자신이 편리하게 사용할 수 있는 환경을 계속 맞춤형으로 만들어야 한다.
    비록 이번에 기재한 방법은 그다지 좋지 않지만, 나는 참고할 수 있다면 좋겠다고 생각한다.

    좋은 웹페이지 즐겨찾기