How to use two internet connections in one PC at the same time?

Solution 1:

While bundling multiple internet connections has been a dream for many internet users, its feasability is very limited.

On the network level, you don't actively download data (of any kind). It just reaches you as a result of billions of routers pushing all packets further towards their goals, one step at a time to the next router, and the next. The routers decide which direction to push the packets to based on the destination address of the packet. This means unless the remote skype process sends all packets to yyy.yyy.yyy.yyy, they won't reach you through your preferred connection. Too bad the remote Skype only knows xxx.xxx.xxx.xxx, because that's the sender's address in the packets you've send it.

So there are a couple ways in which you can influence the setup to reach your goal:

  1. Change the Internet Protocol, so multiple paths will be supported natively
  2. Change the forwarding tables of the intermediary routers, so they push packets destined for xxx.xxx.xxx.xxx towards yyy.yyy.yyy.yyy
  3. Change Skype, so it supports multiple paths, e.g. by just using TCP
  4. Introduce intermediary entities between sender and receiver which manipulate the packet's addresses (and hope this won't affect Skype in uninteded ways). This is obviously your best bet. A setup for a specific application (such as skype) and a specific remote end (say zzz.zzz.zzz.zzz) which works only for a limited period of time (because as always, things change).

At any event, there are no check boxes, no recipes, no C# libraries which let you do this easily. Unfotunately, you've got to engineer a solution tailored to your needs and according to the workings of today's internet in all its complexity.

Solution 2:

In order to do this, you would need two non-stateful routers capable of NAT, that do not randomise source ports. You would need to use static NAT for your machine.

I am assuming you will use private addressing internally.

One router (routerX) would have the public address of xxx.xxx.xxx.xxx and be used for outgoing packets, and the other router (routerY) has public address yyy.yyy.yyy.yyy and is used for incoming packets.

RouterX will be the default route.

So your machine, we will say is 10.10.10.10, and sends a packet to google.com on port 80, as it passes through RouterX, the packet's source address is changed via NAT to be the IP address of routerY.

Original Packet:

Src: 10.10.10.10 Src-port: 34343    Dst: google.com Dst-port: 80

The source port is ephemeral: "made up". However, it is vital any response packets reply to the correct port.

RouterX does the NAT, so it looks like this once on the net:

Src: yyy.yyy.yyy.yyy Src-port: 34343    Dst: google.com Dst-port: 80

Google gets the packet, and replies. So its reply is the reverse:

Src: google.com Src-port: 80   Dst: yyy.yyy.yyy.yyy Dst-port: 34343

This packet will naturally arrive at RouterY. It has a static NAT saying anything destined for IP address yyy.yyy.yyy.yyy should be natted to 10.10.10.10:

Src: google.com Src-port: 80   Dst: 10.10.10.10 Dst-port: 34343

Done - the packet arrives at your machine, blissfully unaware that it took such a circuitous route.

You can do this with Cisco IOS routers. In fact, while this scenario has two routers, you could do it with a single router, and some policy routing.