I started having a look at GRE as a way to connect a cisco user to the MetaNet. There isn't much chance of porting WANd/Etud to IOS, so we have to make do with a protocol IOS understands already, and thankfully IOS does GRE well. We could have used PPTP as well, but it was messier.
I refer to the Linux 2.4 Advanced Routing HOWTO for most of this. In order to simplify things, I wrote a simple script to run at each end, although its entirely probably that there are better system scripts to use for this sort of thing.
To do GRE Tunneling, you need a few things first:
The URL mentioned above covers things fairly nicely, but it took a little bit of playing to get things working nicely.
As a note, if you are running a firewall on your external interface, make sure that you are allowing protocol 47 (GRE) in. eg
NAME="gre0" REMOTEIP="ip.of.other.end" LOCALIP="ip.of.this.end"
NETWORK="remote network address NETBITS="remote network netbits (eg, /24)"
So this script can be set up at either end - obviously make sure that the REMOTEIP, LOCALIP, NETWORK, NETBITS and TUNNEL_LOCAL values are set appropriately.
once this works, you should be able to ping hosts across the tunnel. If you find it doesn't work, try tcpdumping the interface (in this case, gre0). I found I was seeing icmp echo-requests and echo-responses, but they weren't actually being delivered. Turns out my firewall on ppp0 was dropping the gre protocol on the floor. If you dont see any responses, it might be that the other end is dropping gre on the floor.
if you want to bring a tunnel down...
This sample config is done with a Cisco 2514 router. In this example the outside interface (internet side) is Ethernet 1, and LAN interface is Ethernet 0.