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...