Настройка маршрутизации для работы с двумя 2pppoe соединениями [SOLVED]

Здравствуйте.
Есть задача:

Два ADSL соединения с провайдером, одно без учета трафика но медленное и второе с учетом трафика но быстрое.
Есть некий сервер, к которому провайдер предоставляет доступ по внутренним ресурсам и доступ бесплатен. К серверу есть рутовский доступ.
Нужно настроить так все, чтобы все пакеты, которые адресованы на сервер посылать по внутренним ресурсам. Всех обычных пользователей отправлять на нетрафиковый АДСЛ, а неких определенных отправлять на трафиковый но уже не по гостевому соединению, а по обычному.

Т.е. на генту я ставлю две сет. карточки, одна подключена к локальной сети, другая к модему Acorp 422. На генту хочу поднять два ppoe соединения (одно для гостевого, другое обычное). И прописав в качестве шлюза по-умолчанию для пользователей, раздавать интернет.

Да еще забыл, модем Zyxel 660R временно в режиме роутера. На нем подымается ppoe соединение. Тут пока так :(

Возможно ли такое? Сложно ли будет?.. Через iptables идти или же через route add ?
Буду признателен за советы и сообщения. В организации подобного опыта большого нету, поэтому и пишу сюда.

Схема примерно такая (если клинкуть по картинке, изображение откроется в полный размер):
Увеличить

Спасибо.

Могу предложить

Могу предложить следующее:
Каждый pppoe сервер будет выдавать адреса из разных подсетей. На двух картах - два ардреса, одну подсетьсеть НАТить в один адрес, другую в другой. Пакеты, где dst-host - внутренний сервер, натить в IP на сетевухе, подключенной к этому серверу

А вообще я тут еще раз

А вообще я тут еще раз перечитал ваше сообщение. Наверное я немного не так вас понял. В первом посте, я предлагаю вам поднять два ппое сервера, ну и дальше как я написал.

Но если вопроса тарификации этих пользователей и их чесности не возникает, то есть совсем простое решение :)
Спецпользователям ставите шлюзом 192.168.1.1 и прописываете маршрут до внутреннего сервера через 192.168.1.2, остальным пишете шлюз 192.168.1.2. На генте шлюзом по умолчанию ставите 192.168.2.1.

А если надо тарифицировать пользователей тогда нарисованная схема не правильная. Надо так:
в генту 3 сетевухи: 2 для модемов, 1 для свича с пользователями. Всем пользователям шлюзом ставить генту. ну и далее как я написал. Вот только как быть с двумя роутами на генту, я чтото не соображу. У меня такая схема работает с bgp. Не знаю, получиться ли без него..

> > Но если вопроса

>
> Но если вопроса тарификации этих пользователей и их чесности не возникает, то есть совсем простое решение :)
пока именно так и надо,
на данный момент важнее непосредственно сделать одновременный доступ по внутренним и невнутренним ресурсам...
попробую Ваш вариант, почти все понял.. счас заканчиваю установку базового пакета Gentoo и примусь к настройке.

По поводу варианта с 3мя сетевухами, думаю позже так сделать.. и на роутере поднять анализатор трафика и т.п.

На будующее: вариант с 3-мя

На будующее: вариант с 3-мя сетевухами не простой. Генте надо обьяснить что у нее два канала, прописать два default-route! Как это сдалать без BGP я не знаю. Боюсь что никак. А если решите bgp (или что-то похожее) то вам нужна будет подержка со стороны провайдеров, что не всегда возможно.

спасибо

спасибо

Думаю, не надо 2

Думаю, не надо 2 default-route. Просто прописать 2 маршрута на соответствующие сети, а default-route на ту к-я медленная.

При поднятии впн у меня выполняется такой сценарий.

ip route replace 10.10.7.7 via 10.12.13.1 dev eth1 src 10.12.13.2
ip route replace default dev ppp0
ip route add 10.10.10.0/24 dev eth1
ip route add 10.10.10.5 dev ppp0

Здесь 10.12.13.2 - адрес шлюза, 10.10.10.0/24 бесплатные ресурсы провайдера, 10.10.10.5 - днс сервер (строка нужна, чтоб разрешались имена - особенность настройки провайдера).

emerge iproute2 && man tc

вообщем настроил два

вообщем настроил два соединения pppoe,
ppp0 и ppp1.

Теперь начинаю мучаться с маршрутизацией.
у меня сейчас на машине четыре интерфейса.

eth0 - 192.168.2.2
eth1 - 192.168.1.2
ppp0 - 86.57.X.X (статический ип, который провайдер выделяется)
ppp1 - внутренний ип, меняется провайдером.

для начало хотелось бы спросить, как мне настроить так, чтобы пакеты из локальной сети в глобальную просто доходили.
т.е. допустим чтобы я с ип адреса допустим 192.168.1.3 мог пингануть www.ya.ru.

что делаю:

1. в /etc/sysctl.conf устанавливаю ip_forward в 1
2. файл iptables:
http://rapidshare.com/files/235676512/firewall.html

P.s. Ещё хотелось бы увидеть минимальную конфигурацию фаервола, которая сделает доступным интернет для локальной сети.
я думал, что достаточно в конфиге прописать ip_forward = 1 и чтобы в iptables была строчки:
$iptables -P FORWARD ACCEPT
и
$iptables -A FORWARD -i ppp0 -o eth1 -j ACCEPT
$iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT

но как оказалось, я ошибся..
стал проводить эксперементы удаленно, машина пропала из сети.. прийдется только завтра утром ногами прийти и перезагрузить её, т.к. доступа сейчас нету.

В интернете масса инструкций,

В интернете масса инструкций, ключевые слова router howto iptables
-j ACCEPT означает разрешить пропускать пакеты, что бы пакеты "маскарадились" надо написать что то типа $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
$EXTIF - интерфейся куда отправлять пакеты из локалки

ps перед экспериментами советую первым правилом разрешить все пакеты связанные с ssh

iproute2

На сколько я понимаю, до iptables вам нужно настроить policy route.
Это возможно реализовать при использовании iproute2.

Ниже пример, как одних пользователей отправляют по одному маршруту, а других по другому
ip rule add from 192.168.2.0/24 to 0/0 table 101 pref 100
ip route add table 101 via 86.57.X.X
ip rule add from 192.168.1.0/24 to 0/0 table 102 pref 100
ip route add table 102 via чего то там

Ну и еще может тоже помочь
http://www.opennet.ru/docs/RUS/LARTC/x348.html
http://www.linuxfoundation.org/en/Net:Iproute2_examples
http://ornellas.apanela.com/dokuwiki/pub:firewall_and_adv_routing

Спасибо большое за ответы,

Спасибо большое за ответы, теоритически вроде понимаю... но на практике, не получается немног..

Попробую отрезать задачу, и спросить о простом.

На компьютере два интерфейса eth0 и eth1.
Допустим eth0 - 192.168.1.1, eth1 - 192.168.2.1

К интерфейсу eth0 подключен лок. сеть. С компьютера лок. сети пытаюсь пингануть 192.168.2.1.
Что нужно, чтобы ип адрес второй сетевой карты в этом случае был доступен компьютеру локальной сети?

На сервере:
в /etc/sysctl.conf изменяю net.ipv4.ip_forward = 1.
На клиенте указываю в качестве шлюза 192.168.1.1.

Перезагрузиться =)

После установки форварда в 1 надо перезагрузиться либо выполнить
echo /proc/sys/net/ipv4/ip_forward

Убедиться на сервере, что 192.168.2.1 пингуется

Убедиться что клиент подключен именно к сети eth0

Убедиться что в настройках клиента указана маска 255.255.255.0

Вроде все =)

Это руководство знакомо?

Это руководство знакомо? http://www.gentoo.org/doc/ru/home-router-howto.xml
Оно простое и от него легко плясать.

Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.

нет, не видел

нет, не видел его..
Спасибо.

счас почитаю, в ожидании ответа..

Получается действительно

Получается действительно этого хватило.

Продолжаю отрезать задачи, пытаясь режить свою первоначальную.

На компьютере два интерфейса eth0 и eth1.
Допустим eth0 - 192.168.1.1, eth1 - 192.168.2.1

К интерфейсу eth0 подключена лок. сеть. К интерфейсу eth1 подключен модем с ип 192.168.2.2.
С компьютера лок. сети пытаюсь пингануть 192.168.2.2 (модем).
Что нужно, чтобы был доступен?

На сервере:
в /etc/sysctl.conf изменяю net.ipv4.ip_forward = 1.

# ip rule add from 192.168.1.0/24 to 192.168.2.0/24 table 101 pref 100
# ip route add table 101 via 192.168.2.1
# ip rule add from 192.168.2.0/24 to 192.168.1.0/24 table 102 pref 100
# ip route add table 102 via 192.168.1.1

На клиенте указываю в качестве шлюза 192.168.1.1.
На модеме в кач. шлюза указываю 192.168.2.1

На данный момент не пингуется модем.. :(
В чем я ошибаюсь.?

----
С модема когда делаю пинг второго интерфейса сервера, то выдает Network is unreacheble..

нашел на модеме такую штуку, Static Routing Table.
Прописал destination 192.168.1.0 mask 255.255.255.0 getway 192.168.2.1

и только в этом случае заработало.. т.е. начал модем пинговаться из локальной сети и наоборот.

Но почему так?.. на модеме же был настрое адрес шлюза по умолачиню, я думал что если указан шлюз, то все пакеты по умолчанию будут идти на шлюз..
или ошибаюсь?

Получилась, что модем

Получилась, что модем наверное не сохранил себе шлюз. И понадобилась перезагрузка.
После перезагрузки у модема удалил статический маршрут и все заработало.

Причем правил iproute2 не понадобилось.
# ip rule add from 192.168.1.0/24 to 192.168.2.0/24 table 101 pref 100
# ip route add table 101 via 192.168.2.1
# ip rule add from 192.168.2.0/24 to 192.168.1.0/24 table 102 pref 100
# ip route add table 102 via 192.168.1.1
и без них заработало.

=====

Теперь я отделил следующую задачу. Дать возможность пользователям локальной сети пинговать адреса интернета.

На компьютере два интерфейса eth0 и eth1.
Допустим eth0 - 192.168.1.1, eth1 - 192.168.2.1

На сервере:
в /etc/sysctl.conf изменяю net.ipv4.ip_forward = 1.
К интерфейсу eth0 подключена лок. сеть.
К интерфейсу eth1 подключен модем с ип 192.168.2.2.
На клиенте: указываю в качестве шлюза 192.168.1.1.
На модеме: в кач. шлюза указываю 192.168.2.1

Как я понял, на сервере нужно в iptables добавить правило для nat'а.
Добавляю:
$iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
А так же у меня по умолчанию FORWARD всех пакетов DROP, то добавляю правила
1) чтобы доступность модема оставалась:
$iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
$iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
2) чтобы доступность интернета оставалась:
$iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT
$iptables -A FORWARD -i ppp0 -o eth1 -j ACCEPT

И получилось.

Осталось последние шаги, сделать еще одно соединение и сделать возможность по гостевым ресурсам ходить именно по этому соединению.
Пока думаю, попробую и результат напишу.

Ну вот и почти последний

Ну вот и почти последний шаг.

Для того, чтобы пустить по гостевым ресурсам по другому соединению, то необходимо выполнить комманду на сервере:
ip route replace default dev ppp0
ip route add 86.57.X.X dev ppp1

и в iptables прописать nat для второго соединения:
$iptables -t nat -A POSTROUTING -o ppp1 -j MASQUERADE

и всё..
и теперь все по-умолчанию ходит через ppp0 и не гостевые,
а все гостевые добавляю правилом(ами) iproute2 (за это огромное спасибо Eveler)

И последний шаг, нужно часть пользователей отправлять на другой шлюз, т.е. на 192.168.1.2, который находится в локальной сети с пользователями. Там нетрафиковый adsl специально для общего пользования.

Думаю как это сделать, пробовать счас буду используя правила iproute2 или же используя IPTABLES.
Отпишусь.

Ответтье пож-та на вопрос.У

Ответтье пож-та на вопрос.
У меня при создании двух соединений иногда выдается один и тот же ип адрес шлюза для двух соединений.
Как мне кажется, это бред..

Вот к примеру:

adsl-router-ito1 conf.d # route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
86.57.160.24    *               255.255.255.255 UH    0      0        0 ppp0
86.57.160.24    *               255.255.255.255 UH    0      0        0 ppp1
192.168.2.0     *               255.255.255.0   U     0      0        0 eth0
192.168.1.0     *               255.255.255.0   U     0      0        0 eth1
loopback        *               255.0.0.0       U     0      0        0 lo
default         86.57.160.24    0.0.0.0         UG    0      0        0 ppp0

adsl-router-ito1 conf.d # ifconfig
eth0      Link encap:Ethernet  HWaddr 00:02:a5:35:fc:f7
          inet addr:192.168.2.1  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3784 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3685 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3379742 (3.2 MiB)  TX bytes:549789 (536.9 KiB)

eth1      Link encap:Ethernet  HWaddr 00:e0:4c:36:1e:c3
          inet addr:192.168.1.4  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19776 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6266 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2192636 (2.0 MiB)  TX bytes:4167003 (3.9 MiB)
          Interrupt:18 Base address:0xe000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:504 (504.0 B)  TX bytes:504 (504.0 B)

ppp0      Link encap:Point-to-Point Protocol
          inet addr:86.57.X.X  P-t-P:86.57.160.24  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:126 errors:0 dropped:0 overruns:0 frame:0
          TX packets:167 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:73848 (72.1 KiB)  TX bytes:43608 (42.5 KiB)

ppp1      Link encap:Point-to-Point Protocol
          inet addr:1.102.83.69  P-t-P:86.57.160.24  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:30 (30.0 B)  TX bytes:30 (30.0 B)

Причем иногда второму pppoe гостевому (интерфейс - ppp1) выдается такие данные, когда все работает:

ppp1      Link encap:Point-to-Point Protocol
          inet addr:1.102.1.7  P-t-P:1.102.0.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:30 (30.0 B)  TX bytes:30 (30.0 B)

Думал в службу тех поддержки позвонить, но провайдер такой, что 1 оператор дежурит с 8 до 16 и все, а потом просто тупо занято. Причем да и дозвонится то тоже невозможно в теч. дня, опять же занято.

вопрос решился, оказалось

вопрос решился, оказалось изменились правила доступа по гостевым ресурсам.. и все заработало..
Всем спасибо, тему в приципе закрываю.. т.к. задача с маршрутизацией пакетов на второй adsl модем второстепенная и решение ее отложено на нек. время.

Всем спасибо за помощь.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".