GeoRoute - Geographically Constrained Routing
GeoRoute is an overlay network that allows geographically constrained routing through
source routing and probing with traceroutes. I deploy GeoRoute worldwide on Planet-Lab. My goal is to show that it is possible to develop an overlay network that provides
an altered Internet service in which a user can specify a geographic constraint that is
respected when routing packets. I measure the resulting performance of the Internet
when using these altered routes. The motivation for this work comes from the fact that
dierent countries apply dierent communication, inspection, and censorship policies.
This makes GeoRoute interesting as a user application as well as a framework to measure geographic properties of the Internet and the impact of the communication policies
on the Internet.
I evaluate the eectiveness of GeoRoute by estimating the accuracy of the geolocation
data as well as the stability of routes. Though GeoRoute cannot guarantee that packets
do not traverse countries specied to be avoided, the results indicate that the constraints
are met with high probability, at least on IP level. The results include examples of alternative routes avoiding countries as well as the associated performance penalty given
as simulated delay times and as measured TCP throughput.
Research report and files
Notes on how to compile the new click elements
- Download the source code tarball of the Click Modular Router and untar
- Copy the respective .h and .cc files of the click elements that you want to compile from the directory or tarball above to click-X.Y.Z/elements/local
- Compile with ./configure, make, ... as usual (see Click documentation), using "--enable-local" with ./configure.
Notes on how to send out raw TCP/IP packets from PlanetLab nodes
I created a new element for the Click Modular Router (VSysTun, documentation) to send and receive raw TCP/IP packets from PlanetLab nodes (from a slice). The source code is among the links listed above.
The new click element VSysTun uses PlanetLab's privilege allocation tool Vsys to allocate a TUN/TAP device and set it up properly. To use the element, get a slice on PlanetLab and ask PlanetLab staff for the following tags:
Then compile and deploy click with the VSysTun element as described above.
Raw TCP/IP packets can be send to the VSysTun element and must have as source IP address 10.6.0.2. The PlanetLab node rewrites the source IP to the node's global IP address before sending out the packet. Packets that the PlanetLab node receives in response can be read from VSysTun.
Contact me (matthias 〈if you pass the Turing test, this should be obvious〉 math dot berkeley dot edu) or Sapan Bhatia if you have any questions or problems.
- ip_addresses 10.6.0.1
- ip_addresses 0.0.0.0
- vsys vif_up
- vsys vif_down
- vsys fd_tuntap
- vsys_vnet 10.6.0.0/24