![WSL2의 DNS 설정을 어떻게 변경합니까?](https://rvso.com/image/1618338/WSL2%EC%9D%98%20DNS%20%EC%84%A4%EC%A0%95%EC%9D%84%20%EC%96%B4%EB%96%BB%EA%B2%8C%20%EB%B3%80%EA%B2%BD%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
제가 알아낸 한, Windows 10의 WSL2에서 사용되는 DNS 서버를 변경하는 공식 프로세스는 다음과 같습니다. (WSL2는 Windows 10의 경량 VM에서 실제 Linux 커널을 실행하는 Linux용 Windows 하위 시스템의 새로운 릴리스입니다.)
그러나 이 프로세스는 나에게 적합하지 않습니다. 결국 시간 초과가 발생하고 어떤 주소도 확인할 수 없는 시스템이 됩니다.
내가 도대체 뭘 잘못하고있는 겁니까?
지금까지 제가 정리한 과정은 다음과 같습니다.
1. 생성을 끄십시오/etc/resolv.conf
Linux 프롬프트를 사용하여(저는 Ubuntu를 사용하고 있습니다) 다음 내용으로 /etc/wsl.conf를 수정(또는 생성)합니다.
[network]
generateResolvConf = false
(분명히 현재 릴리스에는 이 줄의 후행 공백으로 인해 문제가 발생하는 버그가 있습니다.)
2. WSL2 가상 머신을 다시 시작합니다.
모든 Linux 프롬프트를 종료하고 다음 Powershell 명령을 실행합니다.
wsl --shutdown
3. 사용자 정의 만들기/etc/resolv.conf
새 Linux 프롬프트를 열고 CD를 사용하여/etc
다른 파일에 소프트 링크된 경우 resolv.conf
다음을 사용하여 링크를 제거하십시오.
rm resolv.conf
resolv.conf
다음 내용으로 새 항목을 만듭니다 .
nameserver 1.1.1.1
4. WSL2 가상 머신을 다시 시작합니다.
2단계와 동일
5. 새 Linux 프롬프트를 시작합니다.
이익!
2020년 3월 18일 업데이트
내 /etc/hosts
파일에는 다음이 포함되어 있습니다.
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateHosts = false
127.0.0.1 localhost
127.0.1.1 [redacted] bearps-desktop
10.168.244.140 host.docker.internal
10.168.244.140 gateway.docker.internal
127.0.0.1 kubernetes.docker.internal
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
파일이 /etc/switch.conf
존재하지 않습니다.
도구가 resolvectl
내 경로에 없습니다. 에는 존재하지 않습니다 /usr/bin/resolvectl
.
마찬가지로 systemd-resolve
내 길에 있지 않습니다. 에는 존재하지 않습니다 /usr/bin/systemd-resolve
.
답변1
위에 문서화된 프로세스는 정확합니다.~이다WSL2에서 DNS 설정을 변경하는 방법.
내 실수는 테스트 목적으로 잘 알려진 CloudFlare(1.1.1.1) 및 Google(8.8.8.8 및 8.8.4.4)용 공용 DNS 서버를 사용한 것입니다. 내 로컬 네트워크가 공용 DNS 사용을 차단하는 것으로 나타났습니다.
올바른 내부 DNS 서버 IP 주소로 위 프로세스를 테스트했을 때 모든 것이 제대로 작동했습니다.
답변2
여기에 다른 답변을 추가하면또한불변 으로 설정하고 싶습니다 resolv.conf
.
sudo chattr +i /etc/resolv.conf
제 경우에는 부팅할 때마다 삭제되었습니다 wsl.conf
.
그러한 이유로 나는 하나의 셸로 모든 것을 자동화하는 다음과 같은 작은 프로그램을 만들었습니다.
답변3
나는 집(코로나바이러스)에서 이 작업을 수행해야 했고 결국 내 배포판(debian)을 시작하기 위해 Powershell 관리자 프롬프트 스크립트를 작성하게 되었습니다. 또한 이렇게 하면 WSL에서 지정한 기본 배포판이 시작됩니다. 그렇지 않은 경우 마지막 줄을 변경해야 합니다. \\wsl$\[distro name]
귀하의 이름이 Debian이 아닌 경우 WSL2에 도달하기 위한 Windows 탐색기 경로의 첫 번째 부분을 입력하십시오. 즉, 탐색기 상단 표시줄에 Enter를 입력하면 배포판이 나열 \\wsl$\
됩니다.
그러면 Windows 호스트에서 DNS 서버를 가져와서 새 resolv.conf를 생성하고 이를 Unix 형식으로 WSL2 인스턴스에 씁니다. 따라서 /etc/wsl.conf를 편집하여 다음을 수행해야 합니다.
[network]
generateResolvConf = false
그래서 슈퍼유저가 이를 resolv.config로 변경하려고 했습니다. 다른 Linux 배포판을 사용하고 있기 때문에 해당 파일이 존재한다면 그 파일이 대신 원하는 파일이라고 가정합니다. 따라서 그에 따라 수정하십시오. 어떤 문서에서도 해당 파일을 본 적이 없으며 내 게시물의 편집이 올바른지 확신할 수 없습니다.
그런 다음 PowerShell 관리 프롬프트를 시작하고 ./debian.ps1처럼 실행합니다(파일 이름을 지정한 경우).
# Filename: debian.ps1
#
# Get the DNS server of the Windows machine, save into variable nameserver
$nameserver = Get-WmiObject -Namespace root\cimv2 -Query "Select dnsserversearchorder from win32_networkadapterconfiguration" | where {$_.DNSServerSEarchOrder -ne $null} | select -ExpandProperty DNSServerSearchOrder
# Convert nameserver object into a string
$nameserver = Out-String -InputObject $nameserver
# Run Set-Contents (sc) to write the resolv.conf file in a public location as it has DOS formatted line endings written by PowerShell, not readable by Linux
sc -Path 'c:\Users\Public\Documents\resolv.conf' -Value ('nameserver ' + $nameserver) -Encoding utf8
# Convert the DOS formatted file into UNIX format for WSL2 and write it in the proper place (\etc\resolv.conf, its primary location is \\wsl$\[distro_name] from Windows)
[string]::Join( "`n", (gc 'c:\Users\Public\Documents\resolv.conf')) | sc '\\wsl$\debian\etc\resolv.conf'
# Launch the default WSL2 distribution - if you want to use another one, specify in the line below
wsl.exe
이는 Debian Buster 및 Zscaler(기업) VPN에서 테스트되었습니다. 이것은 좋은 출발점입니다. 회사 PC의 WSL2 인스턴스에서 DNS 액세스를 얻는 데 직면했던 골치 아픈 일을 누군가가 덜어주기를 바랍니다!
답변4
변경에 대한 매우 자세한 답변입니다. 나는 단지 기본값을 사용하고 계속 진행하고 싶었습니다. 첫 번째 답변과 같은 몇 가지 가이드를 따랐지만 나에게 적합하지 않았습니다. 방금 변경했는데 /etc/wsl.conf
다시 작동합니다.
sudo nano /etc/wsl.conf
이 파일에 삽입하거나 변경하십시오.
[network]
generateResolvConf = true
Powershell/CMD에 삽입:
wsl --shutdown
또는:
wsl --terminate <<Linux distro>>
완료되었습니다. 이것이 당신에게 도움이 되었는지 알려주세요.
Tailscale을 시작할 때 설정이 변경되었기 때문에 설정이 엉망이 되었습니다. 이제 다시 작동합니다.