Using two wireless NICs at the same time on Windows 10 desktop PC
This is no different than connecting 2 wired Ethernet ports on the same computer to the same network... it requires what is called interface bonding, NIC teaming, or link aggregation, which is only officially supported by Windows Server OS for Microsoft products (it worked in Windows 10 up to build 10240, officially broken now), but this also requires a compatible switch or router that supports some kind of networking teaming or balancing protocol, which many enterprise grade switches and routers do, but virtually no consumer products do, and to my knowledge there is no wireless router or AP out there capable of this itself. Although using 2 switch ports that support link aggregation to two unique APs could potentially do this with a compatible OS, which Windows 10 is not (EDIT: Microsoft has confirmed that Windows 10 should have this capability, but it is broken in all builds of Win10 after 10240, with no ETA on fix at this time).
Honestly, your best bet is to just use the 5Ghz 802.11ac connection and not bother with the second wireless connection unless it is connecting to a different network, or switch to a hardwired connection.
I can give multiple links if you wish to confirm all this information, but nitty gritty of this is boils down to this from a Microsoft engineer (Jeffrey Tippet) when discussing this in a Microsoft's Social discussion channel, here is the summary: The NIC Teaming feature is technically implemented using the MAC layer (layer 2), and the MAC layer is different for each media type. You cannot team WLAN/WWAN NICs because we did not build the extra support for that; it wouldn't make sense to spend time building that support when NIC Teaming is squarely aimed as a server feature.
Microsoft's solution in Windows 10, NIC Teaming (LBFO), is not useful, as the documentation says:
NICs representing technologies other than Ethernet are not supported in teams (e.g., WWAN, WLAN/WiFi, Bluetooth, Infiniband including IPoIB NICs).
For wireless, the Microsoft solution is therefore out. In any case, one other unfulfilled requirement is that all adapters have the same speed.
This leaves third-party solutions. The ones that I know of are listed below, but I cannot recommend any since I have no experience with them.
- dispatch-proxy - free and open source.
- NetFusion - starting at $26.99 for 1 year.
- Speedify- free for 1GB per month, $9 for 50GB, $19 for unlimited, yearly offers also available. This is perhaps the best-known product in this category. I also believe that this is the only one that divides traffic between connections on a per-packet basis and that uses multiple world-wide servers, so seems the most serious of the bunch.
Otherwise, for doing without a third-party product, I reproduce below a testimony I have found on the Internet :
If your router has two WiFi radios, like mine which has a 5.0GHz radio and a 2.4GHz radio, there's no reason why you can't communicate to your router using both at the same time.
With Windows 7, I had both a 5.0GHz WiFi adapter and a 2.4GHz WiFi adapter and they'd both connect automatically on Start-Up, however, Windows 10 seems to select the 5GHz adapter and auto-connect to that one alone. I can manually connect the 2.4GHz adapter and both will work at the same time and there is traffic on both at certain occasions. Primarily, the most traffic is on the High-Speed 5.0GHz internal card WiFi adapter, but Win 10 will use the USB 2.4GHz adapter once in a while.
This is explained by @Tonny in a comment below that I prefer to include directly in the answer :
With both adapters connected to the same LAN (same ip-subnet) the IP-routing algorithms will use the faster NIC exclusively. The other one will only receive LAN traffic directed to all devices (broadcasts) and will sometimes (every 30 seconds or so) send out a little bit of broadcast traffic itself for network topology discovery purposes. This applies to all types of LAN, not just Wifi. So for all intends and purposes the second Wifi adapter is just there for redundancy in case the other one fails.
So I tried the dispatch-proxy solution and after about 9 hours of fiddling with it, I finally got it working the way I wanted. It's not a perfect solution, as it relies on a round robin approach to switching Nics, but it's better than nothing. I highly recommend that you use the installation instructions stored in his imgur album linked towards the top of the page. That will get everything you need in place. Configuring it correctly was another story.
The main example he provides sets up an HTTP proxy that you can use in your browser's settings to surf with, except that it can't handle https pages. What you really want to setup is the Socks proxy which will handle everything.
The HTTP proxy worked for browsers, but all of my background system apps that do things like check for program or weather updates were left out of the loop. Using the Socks proxy ties all traffic on your system into the sharing. The trick is that you have to change the system settings, and optionally the app settings, to get it to work.
You can't use the Network & Internet setting page that's found in Windows 8 through 10. Whatever you enter there will end up screwing up the configuration. You have to go to the Contol Panel and open Internet Options
and go to the Connections
tab. From there you want to go to the Proxy Server
section and check Use a proxy server for your LAN
and Bypass proxy server for local addresses
. Then you want to click the Advanced
button and on the page that opens you want to make sure every field is empty except the Socks:
fields. There you want to enter socks
for the Proxy address to use
and 1080
for the Port
. Also, make sure that the Use the same proxy server for all protocols
box is unchecked. After using this method, every app on my system uses Disptach-Proxy.
So my console command looks like this dispatch start 192.168.0.103@6 192.168.19.2@4
.
If you don't add the weight proportions after each address, it seems to behave just like it does without the proxy, sending most of the traffic through the interface that had the lowest system metric before the proxy was installed. So I highly recommend you include those.
One of those IP's is the onboard Nic in my desktop and the other is my tethered 4G phone. I disconnect the phone whenever I leave, but it looks like everything keeps working with the remaining Nic through the proxy until I plug my phone back in where it picks up using both.
The one issue that remains is what happens when you reboot your computer. The proxy doesn't run as a service so you have to run the script ever time you log on. I found a solution if your Nics are permanent and don't require a setup procedure after log on, like my phone does. This doesn't work for me, but it might work for you if you want to automate launching the script...
The best way to go about it is to add it as a startup task. Go to Control Panel
and choose Administrative Tools
, then run the Task Scheduler
and follow these steps...
- Make sure that
Task Scheduler (Local)
is selected in the left pane and from theAction
menu chooseCreate Basic Task
- On the first page enter a task name. I just entered Dispatch.
- On the next page select
When I Log On
. We do this instead of choosingWhen The Computer Starts
so that we know the Nics are up and running before creating the proxy. - On the next page choose
Start a Program
. - On the next page enter
Start
in theProgram/Script:
field and then enter/b dispatch start
and optionally the IP addresses with their weight proportions in theAdd Arguments
field. By using the Windows commandStart /b
we are telling the task to run without opening a new command window. If you prefer to have an open window, just enterDispatch
in the Program field andstart
, plus the IPs if you want them, in the Options field. - On the last page check the
Open The Properties Dialogue
box and clickFinish
. - On the
General
tab of theProperties
page make sure thatRun only when user is logged on
is selected and then in theConfigure For
drop down at the bottom, select whatever version of Windows you are using. - Go to the
Conditions
tab and uncheck everything. - Go to the
Settings
tab and uncheck everything. Click
OK
and you're done.This has a few drawbacks. First, if you choose to launch the task without a command window, you won't know if Dispatch has stopped running due to errors. I spent many hours searching and still haven't been able to find a way to determine the running state of a script. Second, your Nics have to be up and running before the task is launched. If this doesn't happen in the right order on your system then you might have to play around with inserting some kind of delay for launching the task.
Armed with this augmented information, it shouldn't take more than 20 minutes to get it all working.