-
-
Save coltenkrauter/608cfe02319ce60facd76373249b8ca6 to your computer and use it in GitHub Desktop.
More recent resolution: | |
1. cd ~/../../etc (go to etc folder in WSL). | |
2. echo "[network]" | sudo tee wsl.conf (Create wsl.conf file and add the first line). | |
3. echo "generateResolvConf = false" | sudo tee -a wsl.conf (Append wsl.conf the next line). | |
4. wsl --terminate Debian (Terminate WSL in Windows cmd, in case is Ubuntu not Debian). | |
5. cd ~/../../etc (go to etc folder in WSL). | |
6. sudo rm -Rf resolv.conf (Delete the resolv.conf file). | |
7. In windows cmd, ps or terminal with the vpn connected do: Get-NetIPInterface or ipconfig /all for get the dns primary and | |
secondary. | |
8. With the dns primary and secondary getted replace the numbers in the next step in the X.X.X.X | |
9. echo "nameserver X.X.X.X" | sudo tee resolv.conf (Create resolv.conf and append the line.) | |
10. echo "nameserver X.X.X.X" | sudo tee -a resolv.conf (Append the line in resolv.conf) | |
11. wsl --terminate Debian (Terminate WSL in Windows cmd, in case is Ubuntu not Debian). | |
12. sudo chattr +i resolv.conf | |
13. And finally in windows cmd, ps or terminal: | |
Get-NetAdapter | Where-Object {$_.InterfaceDescription -Match "Cisco AnyConnect"} | Set-NetIPInterface -InterfaceMetric 6000 | |
Credit: @MartinCaccia, @yukosgiti, @machuu and @AlbesK: | |
https://github.com/microsoft/WSL/issues/4277 | |
https://github.com/microsoft/WSL/issues/4246 | |
--- | |
Original resoltuion: | |
1. Create a file: /etc/wsl.conf. | |
2. Put the following lines in the file in order to ensure the your DNS changes do not get blown away | |
[network] | |
generateResolvConf = false | |
3. In a cmd window, run wsl --shutdown | |
4. Restart WSL2 | |
5. Create a file: /etc/resolv.conf. If it exists, replace existing one with this new file. | |
6. Put the following line in the file | |
nameserver 8.8.8.8 # Or use your DNS server instead of 8.8.8.8 which is a Google DNS server | |
7. Repeat step 3 and 4. You will see git working fine now. | |
Credit: https://github.com/microsoft/WSL/issues/4285#issuecomment-522201021 |
The "More recent resolution" worked.
Didn't run step 13 though.
For the benefits WSL provide, what a mess this issue is... Thank for the solution.
I like this approach.
Makes /root/resolv.conf.sh executable using wsl.conf boot command
Deletes the /etc/resolv.conf file on start-up
Runs the script /etc/resolv.conf.sh and populated with DNS servers from the script.
Change the servers as desired: DNS_SERVERS=("9.9.9.9" "1.1.1.1" "8.8.8.8")
Outputs a log file to /root/resolv.conf.log
vi /etc/wsl.conf
[boot]
command = /bin/bash chmod +x /root/resolv.conf.sh; /bin/bash /root/resolv.conf.sh > /root/resolv.conf.log 2>&1
systemd=true
[network]
generateResolvConf = false
vi /root/resolv.conf.sh
#!/bin/bash
# Specify the DNS servers
DNS_SERVERS=("9.9.9.9" "1.1.1.1" "8.8.8.8")
# Log file path
LOG_FILE="/root/resolv.conf.log"
# Delete the existing /etc/resolv.conf
sudo rm /etc/resolv.conf
# Create or update the /etc/resolv.conf file
for server in "${DNS_SERVERS[@]}"; do
echo "nameserver $server" | sudo tee -a /etc/resolv.conf
done
# Log the changes to the specified log file
echo "DNS servers updated: $(date)" | sudo tee -a "$LOG_FILE"
I like this approach.
Makes /root/resolv.conf.sh executable using wsl.conf boot command Deletes the /etc/resolv.conf file on start-up Runs the script /etc/resolv.conf.sh and populated with DNS servers from the script. Change the servers as desired: DNS_SERVERS=("9.9.9.9" "1.1.1.1" "8.8.8.8") Outputs a log file to /root/resolv.conf.log
vi /etc/wsl.conf
[boot] command = /bin/bash chmod +x /root/resolv.conf.sh; /bin/bash /root/resolv.conf.sh > /root/resolv.conf.log 2>&1 systemd=true
vi /boot/resolv.conf.sh
#!/bin/bash # Specify the DNS servers DNS_SERVERS=("9.9.9.9" "1.1.1.1" "8.8.8.8") # Log file path LOG_FILE="/root/resolv.conf.log" # Delete the existing /etc/resolv.conf sudo rm /etc/resolv.conf # Create or update the /etc/resolv.conf file for server in "${DNS_SERVERS[@]}"; do echo "nameserver $server" | sudo tee -a /etc/resolv.conf done # Log the changes to the specified log file echo "DNS servers updated: $(date)" | sudo tee -a "$LOG_FILE"
Works great! Just a typo in the path of the script /boot/resolv.conf.sh
should be /root/resolv.conf.sh
, right?
What is this solution to? I am switching back to windows+WSL after abandoning it (due to various networking nags), and I remember from a few years ago that I had to toggle this resolv.conf between public DNS servers and corporate DNS server when the windows host is off VPN.
@bayeslearner
The solution from @teeesss fixes the issue of failing DNS because of conflicts with the IP directions randomly assigned and instead using public DNS. Just make sure to have this in /etc/wsl.conf
:
[network]
generateResolvConf = false
Here is my solution for this problem. Basically I have accumulated everything mentioned above: https://gist.github.com/ThePlenkov/6ecf2a43e2b3898e8cd4986d277b5ecf
- script removes all nameservers in /etc/resolv.conf and replaces them with actual IPs from powershell
sudo sed -i '/nameserver/d' /etc/resolv.conf powershell.exe -Command '(Get-DnsClientServerAddress -AddressFamily IPv4).ServerAddresses | ForEach-Object { "nameserver $_" }' | tr -d '\r' | sudo tee -a /etc/resolv.conf > /dev/null
- script is configured as a boot command which is available in Win 11. If it's applicable for you - it helps a lot
This works for me! Thank you so much!
Here is my solution for this problem. Basically I have accumulated everything mentioned above: https://gist.github.com/ThePlenkov/6ecf2a43e2b3898e8cd4986d277b5ecf
- script removes all nameservers in /etc/resolv.conf and replaces them with actual IPs from powershell
sudo sed -i '/nameserver/d' /etc/resolv.conf powershell.exe -Command '(Get-DnsClientServerAddress -AddressFamily IPv4).ServerAddresses | ForEach-Object { "nameserver $_" }' | tr -d '\r' | sudo tee -a /etc/resolv.conf > /dev/null
- script is configured as a boot command which is available in Win 11. If it's applicable for you - it helps a lot
thanks it worked for me
Didn't work like a charm. Thank so much
So here is my configuration
Version WSL : 2.1.5.0
Version du noyau : 5.15.146.1-2
Version WSLg : 1.0.60
Windows 11 version : 23h2 22631.3296
I don't know how it happened, but from the day to the next it stopped working.
I did the original resolution, but putting my router's ip worked.
Original resoltuion:
1. Create a file: /etc/wsl.conf.
2. Put the following lines in the file in order to ensure the your DNS changes do not get blown away
[network]
generateResolvConf = false
3. In a cmd window, run wsl --shutdown
4. Restart WSL2
5. Create a file: /etc/resolv.conf. If it exists, replace existing one with this new file.
6. Put the following line in the file
nameserver 8.8.8.8 # Or use your DNS server instead of 8.8.8.8 which is a Google DNS server
7. Repeat step 3 and 4. You will see git working fine now.
I noticed that the IP that's in the /etc/resolv.conf
is the one indicated here (ipconfig /all)
Which is apparently the WSL Hyper-V firewall....
would it mean that the issue lies in the "forwarding" or letting through of that Hyper V firewall and the host ? at least for dns, the traceroute seemed to work fine
Maybe this will help someone (source)
Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultOutboundAction Allow
As @gtedavid mentioned it seems like Hyper-V is blocking some outbound connection by default, for whatever reason.
My setup is with Mullvad VPN. I am also using Windows Firewall Control tool by Malwarebytes.
To add my Mullvad VPN DNS server to WSL, do ipconfig.exe /all and grab the DNS address under your VPN name. Then sudo nano /etc/resolv.conf and add:
nameserver <IPHERE>
I did have to set Local network sharing ON, on Mullvad VPN settings. Try that if you still have issues and you're using a VPN.
The provided steps worked great, thank-you! I utilized Google’s DNS (8.8.8.8/8.8.4.4) and the fix worked like a charm. 🤘