I set up Tailscale on my Family’s Windows PC a few years ago. Even though I’m on a different continent, I’m still their primary tech support, and sometimes I need a local IP to access some services like government websites.

Tailscale gave me:

  • Secure RDP access to diagnose/fix issues remotely (Using Rustdesk through Tailscale)
  • Exit node capability when I need to appear on their network

It worked perfectly….until it suddenly stopped.

The PC is still connected to tailscale and I can RDP without issue, but the exit node stopped working. All connections were hanging and I had no internet access when connected to the Windows exit node. So why did the exit node stop working?

After 3+ hours digging into the issue (and discovering how messy the windows networking and permissions system is), I found the issue, the PC was using a USB USB WiFi adapter that didn’t support “Internet Connection Sharing”. Exit nodes require ICS to route traffic, without it, the available Exit node can’t actually route any of the incoming traffic.

But…that doesn’t explain why it was working before. Turns out the primary WiFi card failed at some point. My family took the PC to be repaired and a USB WiFi adapter was added. Of course, they don’t remember when this happened or what was “fixed” or even if it was before or after when I initially setup Tailscale. Did the exit node work on the USB wifi adapter before? Did a Windows update cause the exit node to stop working?

This type of mystery really bothers me and I want to get to the bottom of it. A simple solution to my problem would be to set up a Tailscale Exit Node on another device, preferably Linux where they are known to reliably work. If Exit nodes are working for others on Windows, even if unreliably, why doesn’t it work at all on my family’s PC? Why did it used to work?

Debugging Journey

What I checked?

  • Tailscale settings were correct and exit node setup properly
  • Windows firewall rules - correct
  • Network configuration - Looked normal except for 2 Wifi options, only one was active though.
  • Double checked that sharing is enabled on the active Wifi device and allows connection sharing with Tailscale

Things looked right on the surface. But clearly something wasn’t working. Time to dig deeper.

In theory, the internet connection should’ve been shared with Tailscale. So I decided to look into why there are two Wifi options.

PS C:\Windows\system32> Get-NetAdapter

Name                      InterfaceDescription                    ifIndex Status      
----                      --------------------                    ------- ------      
Wi-Fi 2                   Linksys WUSB600N Wireless-N USB Netw...      19 Up          
Tailscale                 Tailscale Tunnel                             52 Up         
Ethernet                  Broadcom NetLink (TM) Gigabit Ethernet        6 Disconnected
Wi-Fi                     Broadcom 802.11n Network Adapter              5 Disconnected 

One of the adapters is built-in and the other is an external USB WiFi adapter. Why is the PC using the external Wifi adapter and not the internal one? I tried enabling the internal one and having it connect to the wifi, but it kept getting disabled within a minute. So the built-in WiFi card is broken. But when did it fail? My family doesn’t remember when they took it to a shop or what was repaired.This is the crucial unknown: did I set up the exit node before or after the switch to USB WiFi? If it was after, the exit node never worked with USB. If it was before, something changed.

Next, why wasn’t the exit node working? After some googling / chatGPT usage, it seems like on Windows “Internet Connection Sharing” needs to be enabled in order for different adapters to share connections. The settings menu shows that “Wifi 2” is setup to share it’s connections with “Tailscale”, so in theory that should be working, so tried to verify. ICS was in a “stopped” state and trying to start it was throwing out an error. I read that not all USB Wifi drivers support ICS and that I might have better luck with trying a newer version. Decided it was worth a try since:

  • The current driver was from 2015
  • My family was complaining about speed and network stability with the PC

They got a newer driver, had to use facetime to walk them through how to set it up and disable the older Wifi 2 interface - can’t RDP to a PC without network access. After the PC was connected to the internet, I configured sharing with the Tailscale adapter from the new Wifi adapter. I then checked ICS status, it was “stopped”, tried starting it, it didn’t throw an error this time and status was saying connected! Great. The exit node was still not working, and the PC requires a reboot after enabling ICS, so I rebooted and checked the status again…it was back to “stopped”.

A GIF of a cat banging head on a table

Looking into the driver information: the old adapter supported ‘Host Networking’ but ICS threw an error. The new adapter doesn’t list ‘Host Networking’ support, but ICS started without errors—yet didn’t persist after reboot. This is backwards from what I expected. The adapter claiming to support host networking fails hard. The one without that feature gets further but still doesn’t work

What do I know at this point:

  • It’s not just “USB WiFi adapters don’t support ICS”
  • Two different adapters, two different failure modes
  • The issue might not be purely hardware/driver related—there’s something more complex happening with Windows networking. Either the Windows networking stack or the ICS service itself seems broken or misconfigured.

Questions This Raises

  • Why does ICS status show as ‘stopped’ even when sharing is configured in the UI? The Windows network settings show sharing enabled with Tailscale, but the service itself isn’t running. What’s the disconnect?
  • Why does ICS fail differently on each adapter? One adapter errors out when starting, the other starts but doesn’t persist across reboots.
  • Did a Windows update break something? Exit nodes worked for a time, maybe even with the USB wifi adapter. Could a change to Windows broken things?
  • Can I reproduce this in a VM? I can try to simulate the conditions of the family PC and check if it reproduces the issue. It would also provide a safer testing ground where I don’t have to worry about bricking the PC (during my investigation I tried to mess with registry values and that broke the windows menu)

Next Steps

My plan is to:

  • Try to reproduce this in a VM
  • Research Windows ICS requirements and recent changes (Windows updates that might have affected ICS behavior)
  • Verify if exit node works over Ethernet

This post is a note to myself of what I’ve found out so far, and where to pick up my efforts. I’m planning to follow this up with the investigation results once I figure out what’s truly going on.

If you’re hitting similar issues with Tailscale exit nodes on Windows (especially with USB WiFi adapters), I’d love to hear about it. Have you solved this? Found a workaround? Seen the same ICS persistence problem? Would love to hear from you. I’ll update this post with anything I discover.


Appendix

Is internet sharing really enabled?

# Status of ICS?
Get-Service SharedAccess
# Status : Stopped


# Start ICS
Start-Service SharedAccess
# Failed command or successful
Start-Service : Service 'Internet Connection Sharing (ICS) (SharedAccess)' cannot be started due to the following error: Cannot start service SharedAccess on computer '.'. At line:1 char:1 + Start-Service SharedAccess + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : OpenError: (System.ServiceProcess.ServiceController:ServiceController) [Start-Service], ServiceCommandException + FullyQualifiedErrorId : CouldNotStartService,Microsoft.PowerShell.Commands.StartServiceCommand

What’s the current networking state?

Check network driver info:

PS C:\Windows\system32> Get-NetIPConfiguration

InterfaceAlias : Tailscale 
InterfaceIndex : 44 
InterfaceDescription : Tailscale Tunnel 
NetProfile.Name : Tailscale 
IPv6Address : fd7a:115c:a1e0::4e01:df2b 
IPv4Address : 100.76.223.43 
IPv6DefaultGateway : 
IPv4DefaultGateway : 
DNSServer : fec0:0:0:ffff::1 fec0:0:0:ffff::2 fec0:0:0:ffff::3 

InterfaceAlias : Wi-Fi 2 
InterfaceIndex : 16 
InterfaceDescription : Linksys WUSB600N Wireless-N USB Network Adapter with Dual-Band ver. 2 
NetProfile.Name : Mobily_eLife_2.4G. 
IPv6Address : 2a02:ce0:1802:771a:31ae:bfc1:b9d0:3ca1 
IPv4Address : 192.168.100.193 
IPv6DefaultGateway : fe80::1 
IPv4DefaultGateway : 192.168.100.1 
DNSServer : fe80::1 192.168.100.1 

InterfaceAlias : Wi-Fi I
nterfaceIndex : 5 
InterfaceDescription : Broadcom 802.11n Network Adapter 
NetAdapter.Status : Disconnected 
InterfaceAlias : Ethernet 
InterfaceIndex : 6 
InterfaceDescription : Broadcom NetLink (TM) Gigabit Ethernet 
NetAdapter.Status : Disconnected


PS C:\Windows\system32> netsh wlan show drivers
>>

Interface name: Wi-Fi 2

    Driver                    : Linksys WUSB600N Wireless-N USB Network Adapter with Dual-Band ver. 2
    Vendor                    : Linksys,a division of Cisco Systems,Inc.
    Provider                  : Microsoft
    Date                      : 4/21/2015
    Version                   : 5.1.22.0
    INF file                  : netr28ux.inf
    Type                      : Native Wi-Fi Driver
    Radio types supported     : 802.11b 802.11a 802.11g 802.11n
    FIPS 140-2 mode supported : Yes
    802.11w Management Frame Protection supported : Yes
    Hosted network supported  : Yes
    Authentication and cipher supported in infrastructure mode: <omitted for brevity>
    Authentication and cipher supported in ad-hoc mode:  <omitted for brevity>

Interface name: Wi-Fi

    Driver                    : Broadcom 802.11n Network Adapter
    Vendor                    : Broadcom
    Provider                  : Microsoft
    Date                      : 6/2/2013
    Version                   : 6.30.223.256
    INF file                  : netbc64.inf
    Type                      : Native Wi-Fi Driver
    Radio types supported     : 802.11n 802.11g 802.11b
    FIPS 140-2 mode supported : Yes
    802.11w Management Frame Protection supported : Yes
    Hosted network supported  : Yes
    Authentication and cipher supported in infrastructure mode: <omitted for brevity>
    Authentication and cipher supported in ad-hoc mode:  <omitted for brevity>