ubuntu и 2 входящих канала | Крымский форум

ubuntu и 2 входящих канала

  • Добро пожаловать на форум! Рады видеть вас здесь! Зарегистрируйтесь или Войдите в аккаунт, чтобы иметь полный доступ к площадке!
S

Sammael

Guest
и так что есть:
ubunta 10.10
3 сетевых интрфейса
eth0 - провайдер № 1 (адрес получам по dhcp)
eth1 - провайдер № 2 (адрес получам по dhcp)
eth2 - внутренняя сеть
настроен nat с eth2 на eth0, установлен bind9

для чего всё это нужно и чего я хочу:
провайдер № 1 - даёт хорошую скорость по приемлемой цене и ip адрес даже белый но к сожалению он не статичен (((
провайдер № 2 - даёт не широки канал, но совсем недорого и самое главное даёт внешний статический ip
И собственно нужно совсем ничего - чтобы оно работало, а вот блин не получается...
При подключении сразу обоих провайдеров всё становится плохо - то дхцп по кому-нибуть не подтянится, то nat падает.
Отдельно друг от друга они заразы работают а вот вместе
censored.gif


Жду умных советов...
 
не силен в линухах, но пытался подобный вопрос под виндой решить - не получилось, ибо нужен был софт для bgp-сервера(или может кто знает, есть другой способ заставить винду использовать 2 канала одновременно?), а под убунтой я так понимаю есть
 
А в чем собственно заключается проблема?
Выложите что-ли настройки - /etc/network/interfaces

скрипт запуска iptables

по поводу dhcp выложите логи... не очень понимаю, как это, "по кому-нибуть не подтянится"?
 
при подключении по dhcp каждый интерфейс создает роут на 0.0.0.0
и инет будет идти через тот роут который прописан последним..

поэтому, надо в нате четко прописать, какой трафик куда пропускать.

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

iptables -t nat -A PREROUTING -d {белый айпи} -p tcp --dport 80 -j DNAT --to-destination {внутренний сервер}


Цитата(Sammael @ 21 Марта, 2011, 15:34)
iptables -A FORWARD -i eth0 -o eth0 -j REJECT

ИМХО бред forward значит пакеты из одного интерфейса в другой не может быть -i и -o одинаковыми.
 
Цитата(Sammael @ 21 Марта, 2011, 15:34)
# Разрешаем доступ из внутренней сети наружу
iptables -A FORWARD -i eth2 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
тут есть 3 варианта:
1. у вас FORWARD по умолчанию ACCEPT и тогда смысла в этих строках нет, т.к. и без них все открыто
2. у вас FORWARD по умолчанию DENY/DROP и тогда толку от этих строк 0, т.к. они открыли только в одну сторону, а именно от клиента наружу, а кто откроет обратно ?
3. вы показали не весь фаервол (iptables -L -n; iptables -t nat -L -n; iptables -t mangle -L -n)


Цитата(Пэтро @ 21 Марта, 2011, 19:15)
поэтому, надо в нате четко прописать, какой трафик куда пропускать.
указать что с белого айпи ломится на сервер
iptables -t nat -A PREROUTING -d {белый айпи} -p tcp --dport 80 -j DNAT --to-destination {внутренний сервер}
пакеты обратно пойдут согласно таблице маршрутизации, тоесть через "чужой" интерфейс, соотвественно смысла в данном DNAT нет, надо строить маршрутизацию

с dhclient почти не работал, но общую логику думаю описать получится:
во первых вам при получении по DHCP данных от второго провайдера надо вызвать скрипт, в котором:
1. Определить маршрут по умолчанию, который дает второй провайдер
2. Определить какой IP выдал этот провайдер
3. Снести этот маршрут
4. Прописать данный маршрут так, чтобы он работал, только для пакетов приходящих на интерфейс второго провайдера

скриптик думаю можно вызвать почитав man dhclient.conf на предмет опции script

ну и пример скриптика:
Код
#!/bin/bash

# Если почитать man, думаю следующие 3 строки можно получить из переменных окружения
eth=eth3 # интерфейс второго провайдера
def='ip ro ls | grep "dev $eth" | grep default | cut -d " " -f 3' # шлюз второго провайдера
ip='ip ro get $def | head -n 1 | sed "s/^.* src //g"' # ip выданный вторым провайдером

if [ "$def" = "" ]; then
exit
fi

# сносим лишний маршрут по умолчанию
ip ro del default via $def

# чистим на всякий случай наши рулезы и маршрут в таблице 20
# которые могли остаться от предыдущего запуска скрипта
ip ru del table 20
ip ro del default table 20

# создаем в таблице 20 маршрут по умолчанию через второго провайдера
ip ro add default via $def table 20

# отправляем все пакеты идущие от IP выданного вторым провайдером, в таблицу 20
ip ru add from $ip table 20
 
Sammael
Скрипт, в том, виде, что я дал, можно пробовать выполнить вручную, если не пойдет, для диагностики показать вывод команд до и после запуска:
ip ro ls
ip ru ls
ip ro ls table 20
ip a ls dev eth3

eth3 заменить на интерфейс, на котором висит второй провайдер, в скрипте разумеется тоже.
 
добавляй к скрипту echo и смотри, на каком этапе проблема

например воткни после
ip='ip ro ge .......

echo "def=$def"
echo "ip=$ip"

и как то этоЦитата(Sammael @ 22 Марта, 2011, 20:35)
inet 10.12.106.98/29 brd 10.12.106.103 scope global eth3
не похоже на Цитата(Sammael @ 21 Марта, 2011, 0:23)
внешний статический ip
 
Sammael
выполняй по одной строке ручками и смотри когда возникнет ошибка и почему
там где идет присваивание, проверяй, что присвоилось в результате
 
Все, понял в чем дело, форум покоцал кавычки, точнее подменил одни на другие
в строках
def='ip ro ls | grep "dev $eth" | grep default | cut -d " " -f 3' # шлюз второго провайдера
ip='ip ro get $def | head -n 1 | sed "s/^.* src //g"' # ip выданный вторым провайдером

одинарные кавычки должны быть обратными, теми, что под ~ на клавиатуре
 
Цитата(Sammael @ 23 Марта, 2011, 0:39)
возможно я чтото делаю не так, но при выполнении:

см. мое предыдущее сообщение
 
Скрипт отработал правильно и маршрутизация после него именно такая, как и задумывалось.
Но раз не работает то:
1. Что-то все таки не так с маршрутизацией, но я ошибок не вижу
2. Что-то не так с firewall, например DNAT воткнут, который не нужен, или просто закрыто.
3. Провайдер в реальности ничего не прокидывает

Рекомендую воспользоваться командой tcpdump -ni eth3 для просмотра, приходят ли вообще пакеты из вне и куда они потом уходят (если на eth3 уходящих нет, поискать их на других интерфейсах).
Так же посмотреть, что там в реальности с firewall, iptables -L -n; iptables -t nat -L -n; iptables -t mangle -L -n

если не поможет, показать вывод, попробуем дальше телепатией позаниматься, но уже завтра.
iptables -L -n
iptables -t nat -L -n
iptables -t mangle -L -n
 
Цитата(Sammael @ 23 Марта, 2011, 1:07)
194.187.149.130 не пингуется только из внутренней сети (eth1, eth2) а вот из инета он пингуется
ну я так понимаю, основная задача решена

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

простейший вариант выглядит так:
tcpdump -ni eth2
tcpdump -ni eth0
tcpdump -ni eth3

чтобы уменьшить количество мусора, можно смотреть только icmp пакеты, добавив фильтр
tcpdump -ni eth2 proto 1
tcpdump -ni eth0 proto 1
tcpdump -ni eth3 proto 1

можно еще усложнить фильтр, добавив конкретный адрес
tcpdump -ni eth2 proto 1 and host 194.187.149.130
tcpdump -ni eth0 proto 1 and host 194.187.149.130
tcpdump -ni eth3 proto 1 # почему здесь нельзя добавлять "and host 194.187.149.130" надеюсь понятно...

да, перед запуском tcpdump неплохо представить как в реальности должны пакеты бегать, ну или нарисовать это на листике.
 
ну собственно причина понятна, и человеческих решений я не вижу, т.к. таблица локальной маршрутизации стоит с максимальным приоритетом и двигать ее нежелательно, при помощи firewall, тоже не поменять

Разве, что сделай так:
ip a add 194.187.149.130/32 brd + dev lo
 
1. Конкретнее, что нужно или конкретней, что не выходит.
2. С какого адреса и на какой идет авторизация, что говорит программа авторизации, что выйдет, если попытаться пройти авторизацию pop3 при помощи telnet
 
1. Значит SNAT/DNAT для openvpn по какой-то причине не срабатывает, например идет соединение на одних портах, а передача данных на других или вообще ip-gre, или в передаваемых данных участвуют настоящие IP серверов, попробуй вместо UDP тунеля, например TCP.
2. Цитата(Sammael @ 1 Апреля, 2011, 11:27)
PASS 123456
-ERR Invalid command.

очень забавно, смени pop3 сервер.
 
а с роутера он пигуется?
 
Назад
Сверху