Fixed IP for WSL instances

Bored of having to check for your WSL instance IP everytime you reboot your computer? I found the solution!

The issue

I recently published an article on how to find the IP of a WSL instance. At the time, something I did not know and just figured out is that the IP is dynamic. Meaning it changes everytime you restart your computer. Maybe even when you stop/start your instance, too lazy to check. Let me know.

This messes with your configuration. For example, I have a GUI app to play with my DB (for the curious, I use DBeaver). I configured the DB connections like in the image:

untitled

Now, it works on setting it up. But then, you have to change this every time you reboot your computer.

The solution

While looking for a way to assigned fixed IP addresses to WSL instances, I figured that there is currently no way to do this.

After more readings, I found out that setting the IP address in the hosts file would make things easier. You configure your connections with a custom domain, say wsl.local, and now, you have only one place where to update the IP address and all your apps are good to go.

But that's still tedious, and someone worked on that problem. Here comes WSL2Host.

WSL2Host

WSL2Host installs itself as a service. Every time a WSL instance launches, it updates the hosts file with the IP of the instance and assign it a domain based on the name of the distribution the WSL instance is running. For example, "Ubuntu-18.04" becomes ubuntu1804.wsl.

And that's all! It's a great piece of software! Read the installation instructions and you'll be good2go.

Troubleshooting

When I set it up, I had an issue where the service was registered but was not running at startup. I could run the service manually tho but that's not the purpose of it.

After watching at the system logs, I found an explicit error message (🙏) that stated my current user I was logged in with did not have the rights to run such a service. To fix that, look for the service in Services, it's called WSL2Host.

untitled 1

Access to its properties via right click, go to the Connexion tab, and make sure the service log on as Local System account.

Untitled

You should be good2go from there.

Local User

If you really want to use the local user, it's totally doable. It's just a bit more complex but we can make it!

The problem you might have is that even tho you set up the user correctly, this user might have the appropriate security policy so we have to change this.

Steps are:

Start 
> Administrative Tools 
> Local Security Policy 
> Local Policies 
> User Rights Assignment 
> Log on as a service
> Search for users or groups
> Advanced
> Find now
> [Select your proper username]
> OK
> OK
> Apply
> OK

Steps in image:

Untitled
Administrative Tools window
Untitled
Access "Log on as a service" property
Untitled
"Log on as a service" window: add a user or a group
Untitled
"Add users or groups" window: click on "Advanced..."
Untitled
"Select groups or users" window: click on "Search"
Untitled
"Select groups or users" window: find your user in the list and validate
Untitled
"Log on as a service" window: you should see your user then apply

Wrong password/user

If the security policies are OK but you still have issues running the service as a user, you might have set a wrong password and/or user.

To fix this, steps are:

Services App 
> Right Click WSL2 Host 
> Properties 
> Log On Tab 
> Browse 
> Advanced 
> Find Now 
> [Select your proper username] 
> Ok everything that comes up
Untitled
"Services" window: access WSL2 Host properties
Untitled
"WSL2 Host" properties window: Log on tab then browse your system users
Untitled
"Browse" window: access "Advanced"
Untitled
"Browse" window: click on "Find now" and look for your user

For further details, check the repos for issues.

Feel free to reach me: @adriengiboire

Enjoy!

Show Comments