Ip tunneling on linux :)
Let's suppose that we've two vps on two remote isps, a vps A with 20 ips, vps B with only one, you want to use some resources from B with some ips but you only have one, in order to use the ips from A on vps B you've to tunnel all traffic from one to another, and here is how:
Public ips:
A = 50.2.2.2-22
B = 70.2.2.3
tunneling with gre:
On A:
# adding the interface for the tunnel
ip tunnel add tun2 mode gre remote 70.2.2.3 ttl 64
# setting the private ip address
ifconfig tun2 10.0.201.1/24
ifconfig tun2 up
# A point to point
ifconfig tun2 pointopoint 10.0.201.2
# enabling multicast (it's not necessary for this)
ifconfig tun2 multicast
ifconfig tun2 arp
ifconfig tun2 broadcast
# default route for the tunnel
ip route add 10.0.201.2 dev tun2
# enable ip forward
echo 1 > /proc/sys/net/ipv4/ip_forward
# add the permanent entries to the arp table in order to get the complete loop. (without this doesn't work)
# replace the public ips for your ips, and the mac for your real mac for your interface
# the word pub it's the most important here, if it's not there the arps will never go outside
arp -s 50.2.2.20 00:00:00:00:00:00 -i eth0 pub
arp -s 50.2.2.21 00:00:00:00:00:00 -i eth0 pub
arp -s 50.2.2.22 00:00:00:00:00:00 -i eth0 pub
On B:
# adding the interface for the tunnel
ip tunnel add tun2 mode gre remote 50.2.2.2 ttl 64
# setting the private ip address
ifconfig tun2 10.0.201.2/24
ifconfig tun2 up
# point to point B
ifconfig tun2 pointopoint 10.0.201.1
# enabling multicast (it's not necessary for this)
ifconfig tun2 multicast
ifconfig tun2 arp
ifconfig tun2 broadcast
# default route for the tunnel
ip route add 10.0.201.1 dev tun2
echo 1 > /proc/sys/net/ipv4/ip_forward
# putting the ips to listen in the eth0 as secondary ips
ip ad add 50.2.2.20/32 dev eth0
ip ad add 50.2.2.21/32 dev eth0
ip ad add 50.2.2.22/32 dev eth0
And that's it, you should have a fully functional tunnel and the ability to route ips that are far away from were you want to use them, so you can now start to bind some daemons to those ips...
Another think to have in mind is that if you have so many ips, you've to be careful with your broadcast domain on point A, and if you're planning to tunnel more than 500 ips, then you've to change the default values of linux for the arp table in order to keep all entries:
echo 1024 > /proc/sys/net/ipv4/neigh/default/gc_thresh1
echo 4096 > /proc/sys/net/ipv4/neigh/default/gc_thresh2
echo 16384 > /proc/sys/net/ipv4/neigh/default/gc_thresh3
A further explanation of this things could be found here:
seems that the first link it's not available right now, so I'm putting the same from google cache.
http://webcache.googleusercontent.com/search?q=cache:6MBqIXDmxIIJ:waldner.netsons.org/d4-encapsulation.php+&cd=1&hl=es-419&ct=clnk&gl=ar
http://www.lartc.org/lartc.html
http://linux-ip.net/gl/ip-tunnels/node9.html
http://yurisk.info/2009/12/15/arp-table-overflow-in-checkpoint-nad-linux-in-general/
Good Luck!
