Ruteamiento un poco avanzado
En estos días estuve buscando por todos lados como balancear mi tráfico de red hacia dos salidas hacia Internet. Desafortunada mente no encontré nada que me convenciera o que funcionara. Luego se me ocurrió un balanceo basado en el puerto de destino, asi podria utilizar una conexión mía para “internet” (puerto 80,443 y otros) y la otra para la descarga de archivos como gtalk y/o aMule.
Intente sin tener un resultado algunos how-to, ya que todos se enfocan en GNU/Linux como router o gateway, y nadie como maquina en sí. Mis primeras pruebas fueron sin éxito, y me percate, luego de ver el log del iptable, que el paquete salia por el dispositivo correcto (ppp0), pero salía con la IP de mi otra conexión. Para resolver a este problema acudía a un ex-profesor universitario y algunos foros, ambos coincidieron en que me faltaba poco, solo hacer un “SNAT” (source network address translation). Luego al agregar el SNAT, todo funcionó!
#!/bin/bash
# (c) 2008. copyleft crodas. all wrongs reserved
#
IP="`/sbin/ifconfig ppp0 | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`"
iptables -t mangle -F
iptables -t mangle -X
iptables -t mangle -Z
iptables -t nat -F
for PORT in `echo 4662 4663 4664 4665 6881 6882 6883 6884 6885 6886 6887 6888 6889`
do
iptables -t mangle -A OUTPUT -p tcp --dport $PORT -j MARK --set-mark 0x2
done
for PORT in `echo 4672 4672 4673 4674 4675`
do
iptables -t mangle -A OUTPUT -p udp --dport $PORT -j MARK --set-mark 0x2
done
# NATeo
# aporte basado en http://www.linux.org.py/foro/viewtopic.php?pid=5865
# y un "profesor" universitario
iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to-source $IP
#crear una tabla para ruteamiento
PPP0=3
ip route flush table $PPP0
ip route add table $PPP0 default dev ppp0 src $IP
ip rule del from all fwmark 0x2
ip rule add from all fwmark 0x2 table $PPP0
ip route flush cache







