Jump to content
Калькуляторы

multiply links: Corbina + MGTS (2 ISP), Интернет шлюз на Linux для двух провадеров

Доброе время суток

Есть мечта детства: одновременно пользоваться двумя провайдерами

Есть PC с 3 NIC под управлением:

 

lsb_release -a

No 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

Share this post


Link to post
Share on other sites

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 name

iptables: No chain/target/match by that name

P.S. долбаный vpn

Edited by verhoum

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this