Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Маршрутизатор - 2 провайдера  (Прочитано 4365 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн rboy

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Маршрутизатор - 2 провайдера
« : 21 Декабря 2010, 19:43:52 »
Надо сделать роутер с 2 провайдерами. Чтоб в локальной сети одна подсеть ходила через 1 провайдера, а другая через 2 провайдера.

Исходные данные.

Установлено: ubuntu server 10.10

Interfaces

#Local
auto eth0
iface eth0 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.1

#Inet1
auto eth1
iface eth1 inet static
address 193.43.252.203
netmask 255.255.255.192
broadcast 193.43.252.255
gateway 193.43.252.193

#Inet2
auto eth2
iface eth1 inet static
address 195.184.221.118
netmask 255.255.255.252
broadcast 195.184.221.119
gateway 195.184.221.117


В /etc/iproute2/rt_tables добавлено 2 таблицы T1 и T2

255 local
254 main
253 default
0 unspec

10 T1
20 T2


Запускаю скрипт


#!/bin/sh

IP_LOCAL="192.168.0.1" # адрес нашего маршрутизатора в локальной сети.
IP_INET1="193.43.252.203" # адрес нашего маршрутизатора в сети первого провайдера.
IP_INET2="195.184.221.118" # адрес нашего марщрутизатора в сети второго провайдера.

IF_LOCAL="eth0" # имя интерфейса на локальную сеть
IF_INET1="eth1" # имя интерфейса на первого провайдера.
IF_INET2="eth2" # имя интерфейса на второго провайдера.

NET_LOCAL="192.168.0.0/24" # локальная сеть.
NET_INET1="193.43.252.192/26" # адрес сети в которой гейт нашего первого провайдера.
NET_INET2="195.184.221.116/30" # адрес сети в которой гейт нашего второго провайдера.

GW_INET1="193.43.252.193" # гейт первого провайдера.
GW_INET2="195.184.221.117" # гейт второго провайдера.

        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 #ну и на последок очистить кеш

/home/sergey/iptables/fw2

exit 0



Файл fw2

#!/bin/sh

IP_LOCAL="192.168.0.1" # адрес нашего маршрутизатора в локальной сети.
IP_INET1="193.43.252.203" # адрес нашего маршрутизатора в сети первого провайдера.
IP_INET2="195.184.221.118" # адрес нашего марщрутизатора в сети второго провайдера.

IF_LOCAL="eth0" # имя интерфейса на локальную сеть
IF_INET1="eth1" # имя интерфейса на первого провайдера.
IF_INET2="eth2" # имя интерфейса на второго провайдера.

NET_LOCAL="192.168.0.0/24" # локальная сеть.
NET_INET1="193.43.252.192/26" # адрес сети в которой гейт нашего первого провайдера.
NET_INET2="195.184.221.116/30" # адрес сети в которой гейт нашего второго провайдера.
NET_SUB1="192.168.0.64/26" # подсеть пользователей на первого провайдера
NET_SUB2="192.168.0.128/25" # подсеть пользователей на второго провайдера

GW_INET1="193.43.252.193" # гейт первого провайдера.
GW_INET2="195.184.221.117" # гейт второго провайдера.

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



После запуска скрипта инета на локальных машинах нет.

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Маршрутизатор - 2 провайдера
« Ответ #1 : 21 Декабря 2010, 20:32:32 »
И чего, разве не ругается? А синтаксические ошибки в скрипте есть, например слово POTROUTING совсем не так пишется. И в interfaces два раза eth1 описывается.  Да и мне кажется, что замудренно всё это слишком. Я бы так попробовал:

Код: (/etc/network/interfaces) [Выделить]
auto eth0 eth1 eth2

iface eth0 inet static
  address 192.168.0.1
  netmask 255.255.255.0


iface eth1 inet static
  address 193.43.252.203
  netmask 255.255.255.192

iface eth2 inet static
  address 195.184.221.118
  netmask 255.255.255.252

up ip rule add from 192.168.0.64/26 table 10
up ip route add default via 193.43.252.193 table 10

up ip rule add from 192.168.0.128/25 table 20
up ip route add default via 195.184.221.117 table 20

Код: (/etc/network/if-up.d/iptables (на него нужно дать права на исполнение (chmod +x)) [Выделить]
#!/sbin/iptables-restore
*filter
:FORWARD DROP
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m conntrack --ctstate NEW -i eth0 -j ACCEPT
COMMIT
*nat
-A POSTROUTING -o eth1 -j MASQUERADE
-A POSTROUTING -o eth2 -j MASQUERADE
COMMIT

На ошибки и работоспособность конечно я не проверял, писал на одном дыхании и по памяти...

Оффлайн rboy

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Маршрутизатор - 2 провайдера
« Ответ #2 : 21 Декабря 2010, 21:22:22 »
сделал как Вы написали, но не появилось
на маршрутизаторе делаю ping ya.ru
ответ unknown host

инет есть точно на обеих провайдерах

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13763
    • Просмотр профиля
Re: Маршрутизатор - 2 провайдера
« Ответ #3 : 21 Декабря 2010, 21:24:41 »
Ну Вы бы показали результирующие данные в таблесах и в маршрутах, а то как-то на пальцах изъясняетесь.

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Маршрутизатор - 2 провайдера
« Ответ #4 : 21 Декабря 2010, 21:29:12 »
Проверять на клиентах надо. А чтоб еще на маршрутизаторе инет был, то надо прописать в качестве шлюза по умолчанию в основную таблицу маршрутизации один из шлюзов проавйдера. А если по имени обращаться к узлу, то должен быть прописан провайдерский dns сервер.

Оффлайн rboy

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Маршрутизатор - 2 провайдера
« Ответ #5 : 21 Декабря 2010, 21:31:59 »
ip r

195.184.221.116/30 dev eth2  proto kernel  scope link  src 195.184.221.118
193.43.252.192/26 dev eth1  proto kernel  scope link  src 193.43.252.203
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.1


ip rule

0:      from all lookup local
32764:  from 192.168.0.128/25 lookup T2
32765:  from 192.168.0.64/26 lookup T1
32766:  from all lookup main
32767:  from all lookup default

Что еще показать?


Я правильно понял, что нужно в /etc/network/interfaces внести изменения как написал Mam(O)n

auto eth0 eth1 eth2

iface eth0 inet static
  address 192.168.0.1
  netmask 255.255.255.0


iface eth1 inet static
  address 193.43.252.203
  netmask 255.255.255.192

iface eth2 inet static
  address 195.184.221.118
  netmask 255.255.255.252

up ip rule add from 192.168.0.64/26 table 10
up ip route add default via 193.43.252.193 table 10

up ip rule add from 192.168.0.128/25 table 20

и в /etc/network/if-up.d/iptables

#!/sbin/iptables-restore
*filter
:FORWARD DROP
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m conntrack --ctstate NEW -i eth0 -j ACCEPT
COMMIT
*nat
-A POSTROUTING -o eth1 -j MASQUERADE
-A POSTROUTING -o eth2 -j MASQUERADE
COMMIT




Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Маршрутизатор - 2 провайдера
« Ответ #6 : 21 Декабря 2010, 21:32:27 »
Также нужно убедиться, что в таблицы не попало ничего лишнего от предыдущих попыток:
sudo iptables-save
ifconfig -a
ip ru
ip r
ip r s t 10
ip r s t 20

Оффлайн rboy

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Маршрутизатор - 2 провайдера
« Ответ #7 : 21 Декабря 2010, 21:33:20 »
Проверять на клиентах надо. А чтоб еще на маршрутизаторе инет был, то надо прописать в качестве шлюза по умолчанию в основную таблицу маршрутизации один из шлюзов проавйдера. А если по имени обращаться к узлу, то должен быть прописан провайдерский dns сервер.

проверял на машине в win получил по dhcp адрес 192.168.0.69 - инета нет
потом 192.168.0.149 - тоже нет...

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Маршрутизатор - 2 провайдера
« Ответ #8 : 21 Декабря 2010, 21:36:34 »
получил по dhcp адрес 192.168.0.69 - инета нет
Кроме адреса еще и маска шлюз и днс должны прийти. Какие показания? Как инет проверял?

Пользователь решил продолжить мысль 21 Декабря 2010, 21:37:44:
И да, главное, что говорит sysctl net.ipv4.ip_forward ?

Оффлайн rboy

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Маршрутизатор - 2 провайдера
« Ответ #9 : 21 Декабря 2010, 21:38:12 »
sudo iptables-save
# Generated by iptables-save v1.4.4 on Tue Dec 21 20:33:48 2010
*nat
:PREROUTING ACCEPT [1834:155294]
:OUTPUT ACCEPT [19:1429]
:POSTROUTING ACCEPT [19:1429]
-A POSTROUTING -o eth1 -j MASQUERADE
-A POSTROUTING -o eth2 -j MASQUERADE
COMMIT
# Completed on Tue Dec 21 20:33:48 2010
# Generated by iptables-save v1.4.4 on Tue Dec 21 20:33:48 2010
*filter
:INPUT ACCEPT [1061:130360]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [414:75502]
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -m conntrack --ctstate NEW -j ACCEPT
COMMIT
# Completed on Tue Dec 21 20:33:48 2010


ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:c0:26:69:64:6a
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::2c0:26ff:fe69:646a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:926 errors:0 dropped:0 overruns:0 frame:0
          TX packets:390 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:95370 (95.3 KB)  TX bytes:84562 (84.5 KB)
          Interrupt:9 Base address:0xd800

eth1      Link encap:Ethernet  HWaddr 00:14:85:bb:5d:a1
          inet addr:193.43.252.203  Bcast:193.43.252.255  Mask:255.255.255.192
          inet6 addr: fe80::214:85ff:febb:5da1/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:4511 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:373531 (373.5 KB)  TX bytes:528 (528.0 B)
          Interrupt:11 Base address:0xd400

eth2      Link encap:Ethernet  HWaddr 00:15:8a:00:ab:ec
          inet addr:195.184.221.118  Bcast:195.184.221.119  Mask:255.255.255.252
          inet6 addr: fe80::215:8aff:fe00:abec/64 Scope:Link
          UP BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:468 (468.0 B)
          Interrupt:11 Base address:0xd000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:76 errors:0 dropped:0 overruns:0 frame:0
          TX packets:76 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:5638 (5.6 KB)  TX bytes:5638 (5.6 KB)


ip ru
0:      from all lookup local
32764:  from 192.168.0.128/25 lookup T2
32765:  from 192.168.0.64/26 lookup T1
32766:  from all lookup main
32767:  from all lookup default


ip r
195.184.221.116/30 dev eth2  proto kernel  scope link  src 195.184.221.118
193.43.252.192/26 dev eth1  proto kernel  scope link  src 193.43.252.203
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.1


ip r s t 10
default via 193.43.252.193 dev eth1


ip r s t 20
default via 195.184.221.117 dev eth2



Цитировать
Кроме адреса еще и маска шлюз и днс должны прийти. Какие показания? Как инет проверял?

Да.. все пришло... шлюз и днс 192.168.0.1


net.ipv4.ip_forward = 1



таблицы T1 и T2 под номерами 10 и 20
« Последнее редактирование: 21 Декабря 2010, 21:40:06 от rboy »

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Маршрутизатор - 2 провайдера
« Ответ #10 : 21 Декабря 2010, 21:40:52 »
и днс 192.168.0.1
А почему адрес шлюза? На нём поднят какой-то dns сервер? sudo netstat -ntulp это подтверждает?

Оффлайн rboy

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Маршрутизатор - 2 провайдера
« Ответ #11 : 21 Декабря 2010, 21:41:42 »
Да бинд

sudo netstat -ntulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 192.168.0.1:53          0.0.0.0:*               LISTEN      699/named
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      699/named
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      688/sshd
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      699/named
tcp6       0      0 :::22                   :::*                    LISTEN      688/sshd
tcp6       0      0 ::1:953                 :::*                    LISTEN      699/named
udp        0      0 192.168.0.1:53          0.0.0.0:*                           699/named
udp        0      0 127.0.0.1:53            0.0.0.0:*                           699/named
udp        0      0 0.0.0.0:67              0.0.0.0:*                           722/dhcpd3

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Маршрутизатор - 2 провайдера
« Ответ #12 : 21 Декабря 2010, 21:46:10 »
А, ну тогда получается, раз нет у маршрутизатора инета, то и бинд не сможет рекурсивные запросы сделать. Тогда пропиши шлюз одного из провайдеров, как основной в основную таблицу маршрутизации. Например:
ip route add default via 193.43.252.192
Пользователь решил продолжить мысль 21 Декабря 2010, 21:46:42:
Или в interfaces добавь gateway к одному из интерфейсов.

Оффлайн rboy

  • Автор темы
  • Новичок
  • *
  • Сообщений: 16
    • Просмотр профиля
Re: Маршрутизатор - 2 провайдера
« Ответ #13 : 21 Декабря 2010, 21:53:57 »
в interfaces добавил gateway 193.43.252.192 к eth1
на машине с win инета нет... на маршрутизаторе ping ya.ru пошел

Пользователь решил продолжить мысль 21 Декабря 2010, 21:56:15:
не... шлюз 193.43.252.193 добавил
« Последнее редактирование: 21 Декабря 2010, 21:56:15 от rboy »

Оффлайн Mam(O)n

  • Старожил
  • *
  • Сообщений: 5855
    • Просмотр профиля
Re: Маршрутизатор - 2 провайдера
« Ответ #14 : 21 Декабря 2010, 21:56:34 »
Так а если с вин машины не по имени, а по айпихе, например ping 8.8.8.8 ?

Пользователь решил продолжить мысль 21 Декабря 2010, 21:58:56:
не... шлюз 193.43.252.193 добавил
Ага, да я опечатался..
« Последнее редактирование: 21 Декабря 2010, 21:59:09 от Mam(O)n »

 

Страница сгенерирована за 0.022 секунд. Запросов: 19.