Re: lug-bg: Рутиране към втори доставчик
- Subject: Re: lug-bg: Рутиране към втори доставчик
- From: Dimitar Terziev <mitak@xxxxxxxxxxx>
- Date: Mon, 11 Apr 2005 00:01:59 +0300
Едно *работещо* решение на проблема.
Това услях да измисля за 10-тина минути миналия ден,
задачата беше: Има два доставчика. Българският трафик да минава през единия,
всичко останало - през другия.
Решението в няколко думи:
Слагаме defult gw - този на доставчика, през който ще минава "всичко
останало". С iproute2 правим таблица, в която се дават правила за
"българският" трафик, който ще минава през втория доставчик. Нещата изглеждат
така (скрипта е малко дълъг, има някои неточности, но работи. Ще се радвам на
всякакви забележки и поправки към него):
[cut]
#!/bin/bash
echo "Setting variables"
ISP1IP=111.222.333.444
ISP1GW=111.222.333.1
ISP1NET=111.222.333.0/24
ISP1DEV=eth0
ISP1NAME=ISP-BG
ISP2IP=222.333.444.555
ISP2GW=222.333.444.1
ISP2NET=222.333.444.0/24
ISP2DEV=eth1
ISP2NAME="ISP-INT"
LOCALIP=192.168.0.1
LOCALNET=192.168.0.0/24
LOCALDEV=eth2
BG=/etc/routing/ip.bg #tuka e spisuka na bulgarskite mreji (ot ip.ludost.net)
case "$1" in
'flush')
echo "Flush All"
ip route flush all
echo "Add connected network"
ip r a $ISP1NET dev $ISP1DEV proto kernel src $ISP1IP
ip r a $ISP2NET dev $ISP2DEV proto kernel src $ISP2IP
ip r a $LOCALNET dev $LOCALDEV proto kernel src $LOCALIP
echo "Removing OLD rules ..."
ip ru d prio 201 from $ISP1NET
ip ru d prio 202 from $ISP2NET
ip ru d prio 211
echo "Flush Tables ..."
ip r f t 200
ip r f t 201
ip r f t 202
ip r f t 211
;;
'start')
$0 flush
echo "Table 201 $ISP1NAME"
ip ru a prio 201 from $ISP1NET t 201
ip r a 0/0 via $ISP1GW proto static t 201
ip r append prohibit default table 201 metric 1 proto static
echo "Table 202 $ISP2NAME"
ip ru a prio 202 from $ISP2NET t 202
ip r a 0/0 via $ISP2GW proto static t 202
ip r append prohibit default table 202 metric 1 proto static
echo "end"
echo "Table 211 $ISP1NAME"
ip ru a prio 211 t 211
echo "Add BG Peering to $ISP1NAME"
if [ -f /etc/routing/ip.bg ] ; then
for IP in `cat /etc/routing/ip.bg|awk '{print $1}'`; do
ip r a $IP via $ISP1GW proto static table 211
iptables -t nat -I POSTROUTING -s $LOCALNET -d $IP -j SNAT --to-source
$ISP1IP
done
fi
ip r f c
#route del default gw $ISP1GW
route add default gw $ISP2GW
;;
'stop' )
$0 flush
ip r a 0/0 via $ISP2GW
;;
'*')
echo "Usage: $0 start|stop"
exit 1
;;
esac
[/cut]
On Sunday 10 April 2005 17:36, Danail Petrov wrote:
> Danail Petrov wrote:
> > Здравей,
> > Имаш няколко варианта да направиш това.
> > 1. using netfilter / iptables /
> > iptables -t nat -I PREROUTING -p tcp --dport 80 -d `host
> > free._xxx_.xxx` -j SNAT --to x.x.x.x /* където х.х.х.х е ип-то през
> > което искаш да го изкараш */
>
> [snip]
> Да се чете `POSTROUTING'
> [/snip]
>
> > 2. using proxy /* squid */
> > Тука ма марзи да пиша acl-и , затова иди виж на www.squid-cache.org
> >
> > 3. iproute2 /* него можеш да го комбинираш с нетфилтъра , стават
> > чудеса :)) , на lartc.org има доста подробни описания*/
> >
> > 4. BGP /* zebra */
--
-
public key: http://unix-bg.org/mitak.asc
Attachment:
pgpDnWN9eRbmx.pgp
Description: PGP signature
|