verhoum Posted August 18, 2009 Posted August 18, 2009 Доброе время суток Есть мечта детства: одновременно пользоваться двумя провайдерами Есть PC с 3 NIC под управлением: lsb_release -aNo LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 8.04.3 LTS Release: 8.04 Codename: hardy на данный момент выполняет функции функции шлюза (netfilter: MASQUERADE + перенапрвление на прозрачный squid, dnsmasq)Есть 2 провайдера: ADSL (МГТС) и Ethernet (Corbina) eth0: Corbina_net 10.154.8.0/255.255.248.0 eth1: home_lan : 192.168.5.0/24 eth2: МГТС: 192.168.2.0/32, pppoe поднимает сам модем ppp999: Интернет от корбина VPN поднимался при помощи скрипта отсюда: http://homenet.corbina.net/index.php?showtopic=199266 Какие есть пути решения по поводу '2 провайдера на одном компе' + linux Вставить ник Quote
skor78 Posted August 18, 2009 Posted August 18, 2009 (edited) http://www.opennet.ru/base/net/debian_multilink.txt.html http://www.opennet.ru/docs/RUS/LARTC/x348.html Edited August 18, 2009 by skor78 Вставить ник Quote
verhoum Posted August 19, 2009 Author Posted August 19, 2009 (edited) skor78, спасибо, первую статью читал но уже забыл про этот пример где то туплю cat /etc/routet #!/bin/sh IP_LOCAL="192.168.5.1" # адрес нашего маршрутизатора в локальной сети. #IP_INET1=`ifconfig ppp999 | head -n 2 | sed 'N;s/\n/ /' | awk '{print $9}' | sed -e 's/P-t-P://'` # адрес нашего маршрутизатора в сети первого провайдера. IP_INET1=`ifconfig ppp999 | head -n 2 | sed 'N;s/\n/ /' | awk '{print $7}' | sed -e 's/addr://'` IP_INET2="192.168.2.1" # адрес нашего марщрутизатора в сети второго провайдера. IF_LOCAL="eth1" # имя интерфейса на локальную сеть IF_INET1="ppp999" # имя интерфейса на первого провайдера. IF_INET2="eth2" # имя интерфейса на второго провайдера. NET_LOCAL="192.168.5.0/24" # локальная сеть. NET_INET1="85.21.0.0/24" # адрес сети в которой гейт нашего первого провайдера. NET_INET2="192.168.2.0/24" # адрес сети в которой гейт нашего второго провайдера. GW1="`ifconfig ppp999 | head -n 2 | sed 'N;s/\n/ /' | awk '{print $9}' | sed -e 's/P-t-P://'`" # гейт первого провайдера. GW2="192.168.2.1" # гейт второго провайдера. ip route flush table T1 #обнуляем первую таблицу маршрутов ip route flush table T2 #обнуляем вторую таблицу маршрутов ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 table T1 #закидываем в первую таблицу инфу о сети первого провайдера ip route add $NET_LOCAL dev $IF_LOCAL table T1 #закидываем в первую таблицу инфу о том, что у нас существует локальная сеть ip route add $NET_INET2 dev $IF_INET2 table T1 #закидываем в первую таблицу инфу о том, что у нас существует еще одна сеть ip route add 127.0.0.0/8 dev lo table T1 #закидываем в первую таблицу инфу о существовании лупбека ip route add default via $GW_INET1 table T1 #закидываем в первую таблицу дефолтный гейт на первого провайдера ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2 table T2 #закидываем во вторую таблицу инфу о сети второго провайдера ip route add $NET_LOCAL dev $IF_LOCAL table T2 #закидываем во вторую таблицу инфу о том, что у нас существует локальная сеть. ip route add $NET_INET1 dev $IF_INET1 table T2 #закидываем во вторую таблицу инфу о том, что у нас существует еще одна сеть. ip route add 127.0.0.0/8 dev lo table T2 #закидываем во вторую таблицу инфу о существовании лупбека. ip route add default via $GW_INET2 table T2 #закидываем во вторую таблицу дефолтный гейт на второго провайдера ip route add $NET_INET1 dev $IF_INET1 src $IP_INET1 #заполняем основную таблицу адресов. сеть на первого провайдера ip route add $NET_INET2 dev $IF_INET2 src $IP_INET2 #заполняем основную таблицу адресов. сеть на второго провайдера ip route add default via $GW_INET1 #заполняем основную таблицу адресов. дефолтный гейт. ip rule delete table T1 #удаляем наши таблицы, если они присутсвуют в текущей конфигурации (вдруг мы просто перезапускаем скрипт?) ip rule delete table T2 #аналогично для второй. ip rule delete table T1 #и делаем это два раза, так как у нас два правила на каждую таблицу. ip rule delete table T2 #аналогично для второй. #а вот это важно для понимая! если понять что происходит в следующих строчках - то можно настраивать любые правила маршрутизации. ip rule add from $IP_INET1 table T1 #все пакеты от ip адреса первого провайдера маршрутизировать по таблице T1 ip rule add from $IP_INET2 table T2 #все пакеты от ip адреса второго провайдера маршрутизировать по таблице T2 ip rule add fwmark 10 table T1 #все пакеты, которые имеют метку 10 маршрутизировать по таблице T1 ip rule add fwmark 11 table T2 #все пакеты, которые имеют метку 11 маршрутизировать по таблицу T2 ip route flush cache #ну и на последок очистить кеш exit 0 $ sudo /etc/routet Error: an inet address is expected rather than "inet".Error: an inet address is expected rather than "table". RTNETLINK answers: Invalid argument Error: an inet address is expected rather than "table". Error: an inet address is expected rather than "inet". RTNETLINK answers: Invalid argument Command line is not complete. Try option "help" RTNETLINK answers: No such file or directory Error: an inet prefix is expected rather than "inet". Чищу все правила для netfilter, запускаю $ cat /etc/iptables2 $ cat /etc/iptables2 #!/bin/sh IP_LOCAL="192.168.5.1" # адрес нашего маршрутизатора в локальной сети. #IP_INET1="1.1.1.2" # адрес нашего маршрутизатора в сети первого провайдера. #IP_INET2="2.2.2.2" # адрес нашего марщрутизатора в сети второго провайдера. IP_INET1=`ifconfig ppp999 | head -n 2 | sed 'N;s/\n/ /' | awk '{print $7}' | sed -e 's/addr://'` IP_INET2="192.168.2.1" # адрес нашего марщрутизатора в сети второго провайдера. #IF_LOCAL="eth0" # имя интерфейса на локальную сеть #IF_INET1="eth1" # имя интерфейса на первого провайдера. #IF_INET2="eth2" # имя интерфейса на второго провайдера. IF_LOCAL="eth1" # имя интерфейса на локальную сеть IF_INET1="ppp999" # имя интерфейса на первого провайдера. IF_INET2="eth2" # имя интерфейса на второго провайдера. #NET_LOCAL="172.16.0.0/16" # локальная сеть. #NET_INET1="1.1.1.0/24" # адрес сети в которой гейт нашего первого провайдера. #NET_INET2="2.2.2.0/24" # адрес сети в которой гейт нашего второго провайдера. NET_LOCAL="192.168.5.0/24" # локальная сеть. NET_INET1="85.21.0.0/24" # адрес сети в которой гейт нашего первого провайдера. NET_INET2="192.168.2.0/24" # адрес сети в которой гейт нашего второго провайдера. NET_SUB1="192.168.5.0/24" # подсеть пользователей на первого провайдера NET_SUB2="192.168.5.0/24" # подсеть пользователей на второго провайдера #GW1="1.1.1.1" # гейт первого провайдера. #GW2="2.2.2.1" # гейт второго провайдера. GW1="`ifconfig ppp999 | head -n 2 | sed 'N;s/\n/ /' | awk '{print $9}' | sed -e 's/P-t-P://'`" # гейт первого провайдера. GW2="192.168.2.1" # гейт второго провайдера. IPT="/sbin/iptables" $IPT -t nat -F #очищаем таблицу nat $IPT -t mangle -F #очищаем таблицу mangle #все пакеты, которые попали в цепочку PREROUTING таблицы mangle обрабатываем по двум правилам: $IPT -t mangle -A PREROUTING -s $NET_SUB1 -d ! $NET_LOCAL -j MARK --set-mark 10 # все пакеты которые идут от $NET_SUB1 и не в $NET_LOCAL маркируем меткой 10 $IPT -t mangle -A PREROUTING -s $NET_SUB2 -d ! $NET_LOCAL -j MARK --set-mark 11 # все пакеты которые идут от $NET_SUB1 и не в $NET_LOCAL маркируем меткой 10 #все пакеты, которые попали в цепочку POSTROUTING таблицы nat обрабатываем по двум правилам: $IPT -t nat -A POTROUTING -m mark --mark 10 -j MASQUERADE # натим все пакеты которые имеют метку 10 $IPT -t nat -A POTROUTING -m mark --mark 11 -j MASQUERADE # натим все пакеты которые имеют метку 11 exit 0 $ sudo /etc/iptables2 iptables: No chain/target/match by that nameiptables: No chain/target/match by that name P.S. долбаный vpn Edited August 19, 2009 by verhoum Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.