If you only have access to a public Wi-Fi network while working with your Raspberry Pi, or the only Wi-Fi network available to you is 5 GHz, you may want to share the internet connection from your Windows laptop or computer with your Pi over ethernet. You can use Window's Internet Connection Sharing (ICS) feature to help you do this. Below are the steps required to set it up so it reliably works across reboots.

Steps

  1. Open Windows Control Panel and navigate to Control Panel> Network and Internet > Network and Sharing Center. Click Change Adapter Settings in the left-hand panel and you should be presented with a list of network adapters:
    adapter list
  2. Identify the Wi-Fi adapter with the active internet connection that you would like to share, and the Ethernet adapter you would like to share the connection to. In my case, the Wi-Fi adapter is called Wi-Fi and the ethernet adapter is called Ethernet.
  3. Right-click on the Wi-Fi adapter, and select Properties, then select the Sharing tab in the top of the window.
    adapter properties
  4. Tick the "Allow other users to connect through..." box and then select the ethernet adapter identified in step 2 from the drop-down menu below. Click ok.
    You should now see Shared beside the name of the Wi-Fi network you are connected to on the Wi-Fi adapter item.
  5. To make the ICS service startup automatically with Windows, search for Services in the start menu and open the Windows services utility.
    windows services list
  6. Find the service called Internet Connection Services (ICS), right-click it and select Properties. Select Automatic from the Startup type drop-down menu. Then click OK and exit the services utility.
    ics service properties
  7. To make the ICS service actually work after a reboot we need to create a registry key. Search for and open the Registry Editor in the start menu. Paste Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedAccess into the adress bar at the top of the window. Right-click anywhere and select New > DWORD (32-bit) Value. Name the new key EnableRebootPersistConnection. Double click the new key and change the Value data field to 1.
    registry key

At this point you should be all set. Plug your Raspberry Pi into the ethernet port of your computer, and power it up. You should see the ethernet activity lights on the Pi blinking away as Windows assigns it a new IP from the 192.168.137.* sub-net. Because Windows will assign your Pi an IP, you wont know what IP to use to ssh into it. You can test the connection as well as resolve the IP by opening a command prompt window in typing ping raspberrypi.mshome.net where rasperrypi is the hostname of the Pi (raspberrypi is the default).

Pi ping result

If all is well, you will see a response from the resolved IP of the Pi. To ssh into the Pi, you can either enter raspberrypi.mshome.net or the resolved IP into PuTTY, but be aware that the IP will likely change every time you connect the Pi.

Troubleshooting

  • If you can ping the Pi but can't connect via ssh, ensure that ssh is enabled. See the Raspberry Pi documentation for details on this.
  • If you can connect to the Pi but it cant reach the outside internet, make sure your computer is connected to the internet via Wi-Fi.
  • If the ICS stops working after a reboot, and you are sure steps 5-7 were done properly, you may be forced to disable and re-enable ICS in the Wi-Fi adapter settings after every reboot. This is a known issue with Windows some people have encountered.