verhoum Опубликовано 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 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
skor78 Опубликовано 18 августа, 2009 (изменено) http://www.opennet.ru/base/net/debian_multilink.txt.html http://www.opennet.ru/docs/RUS/LARTC/x348.html Изменено 18 августа, 2009 пользователем skor78 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
verhoum Опубликовано 19 августа, 2009 (изменено) 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 Изменено 19 августа, 2009 пользователем verhoum Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...