Re: private networks
Thanks.
Here's the gist of it.
Often, corporate networks use addresses in the range 10.0.0.0 - 10.255.255.255 in order to create private networks. This address range is designated for this purpose, and is the only class A range designated as such.
O2's GPRS network uses NAT in order to cut down the number of IP addresses they require. In doing so, they also use the private address range.
It is not recommended practice to use NAT for subscription networks, as they do not provide a 'complete' internet service. Certain peer-to-peer services will not work through NAT, as they require both devices to be publicly addressable - this however, is not the cause of this issue.
Lets look at the process of connecting to a VPN.
1) a 'dial up' connection is made to the GPRS service. When I say 'dial up' I do not mean a circut switched call is made (before you techies correct me), but still, some kind of PPP connection is made.
2) IP addresses are negotiated. An address is allocated to the device in the 10.0.0.0 range. During this allocation proceedure no subnet mask is specified, and the device assumes 255.0.0.0 as for a class A network.
3) The device adds a route to 10.0.0.0 mask 255.0.0.0 on the GPRS virtual adapter.
The connection to the VPN can now be made
1) a 'dial up' connection is made to the VPN service.
2) IP addresses are negotiated. An address is allocated to the device in the 10.0.0.0 range (depending on corporate config). During this allocation proceedure no subnet mask is specified, and the device assumes 255.0.0.0 as for a class A network.
3) The device adds a route to 10.0.0.0 mask 255.0.0.0 on the VPNvirtual adapter.
All seems fine - no? Try connecting to any host on the private network. Mail server, terminal server, web server. I bet you it doesn't work. That's because two routes have been allocated on the 10.0.0.0 mask 255.0.0.0 network. When you try and connect to your mail server (eg 10.0.0.6) the packets go straight out through the first matching route - the GPRS, and never even see the VPN route.
My software tool watches the route table (I use a function in the IPhlpapi.dll for those interested), and waits for a change. When it spots a change, it re-writes the routing table, narrowing the routing entries to 24 bit masks (it works out the missing octets from the gateway address).
So an example would be:
10.0.0.0 mask 255.0.0.0 gw 10.34.23.254 if GPRS
10.0.0.0 mask 255.0.0.0 gw 10.0.0.1 if VPN
becomes
10.34.23.0 mask 255.255.255.0 gw 10.34.23.254 if GPRS
10.0.0.0 mask 255.255.255.0 gw 10.0.0.1 if VPN
This allows you to access stuff in the 10.0.0.0 network.
Drawback:
You won't be able to peer to peer with other O2 XDA's who aren't on the same class C netowork - big deal, does anyone do this?
You are limited to contacting hosts on the same class C within your private network. I am working on broadening this range.
Files:
There is 1 file required - the executable, which should be placed in the startup folder. Let me know where to send this, and it can be made public.