и так что есть: ubunta 10.10 3 сетевых интрфейса eth0 - провайдер № 1 (адрес получам по dhcp) eth1 - провайдер № 2 (адрес получам по dhcp) eth2 - внутренняясеть настроен nat с eth2 на eth0, установлен bind9
для чего всё это нужно и чего я хочу: провайдер № 1 - даёт хорошую скорость по приемлемой цене и ip адрес даже белый но к сожалению он не статичен ((( провайдер № 2 - даёт не широки канал, но совсем недорого и самое главное даёт внешний статический ip И собственно нужно совсем ничего - чтобы оно работало, а вот блин не получается... При подключении сразу обоих провайдеров всё становится плохо - то дхцп по кому-нибуть не подтянится, то nat падает. Отдельно друг от друга они заразы работают а вот вместе
не силен в линухах, но пытался подобный вопрос под виндой решить - не получилось, ибо нужен был софт для bgp-сервера(или может кто знает, есть другой способ заставить винду использовать 2 каналаодновременно?), а под убунтой я так понимаю есть
Группа: Admin
Сообщений: 503
Регистрация: 13.08.03 Авторитет: 21
Вне форума
Цитата(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 adddefault via $def table 20
# отправляем все пакеты идущие от IP выданного вторым провайдером, в таблицу 20 ip ru add from $ip table 20
Группа: Admin
Сообщений: 503
Регистрация: 13.08.03 Авторитет: 21
Вне форума
Sammael Скрипт, в том, виде, что я дал, можно пробовать выполнить вручную, если не пойдет, для диагностики показать вывод команд до и после запуска: ip ro ls ip ru ls ip ro ls table 20 ip a ls dev eth3
eth3 заменить на интерфейс, на котором висит второй провайдер, в скрипте разумеется тоже.
Группа: Admin
Сообщений: 503
Регистрация: 13.08.03 Авторитет: 21
Вне форума
Все, понял в чем дело, форум покоцал кавычки, точнее подменил одни на другие в строках 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 выданный вторым провайдером
одинарные кавычки должны быть обратными, теми, что под ~ на клавиатуре
Группа: Admin
Сообщений: 503
Регистрация: 13.08.03 Авторитет: 21
Вне форума
Скрипт отработал правильно и маршрутизация после него именно такая, как и задумывалось. Но раз не работает то: 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