Страница 1 из 4
ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-05 1:48:33
dsa
Имею сервер под FreeBSD 7.1, у него 3 интерфейса: один - в локальную сеть, два других - к разным провайдерам.
Интерфейсы провайдеров имеют реальные айпишники.
Что-то никак не могу сочинить сет правил, чтобы работали входящие соединения извне на айпишники обоих провайдеров.
Исходящую нагрузку разделять не надо, пусть бы так и шла по одному маршруту.
Пытался делать по местным статьям, но упорно одно подключение работает, а ответ на подключение на второй адрес уходит в шлюз по умолчанию.
Если шлюз по умолчанию поставить ко второму провайдеру - то наоборот - сервисы на втором айпи работают, а ответы от первого теперь уходят в шлюз по умолчанию.
Подскажите, как там правильно?
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-05 1:51:45
paradox
вообще правильно для таких случаев поднимать BGP
но можете попробовать извратиться через PF
и я не понял основного
что значит работали входящие от двух провадеров?
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-05 2:12:17
wel
paradox писал(а):и я не понял основного
что значит работали входящие от двух провадеров?
эт когда есть 1.1.1.1 и 2.2.2.2 на серваке и в любое время если один из провайдоров лежит то к серваку можно получить доступ
А так получается что все в дефолт уходит одного из провайдеров
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-05 2:19:38
paradox
я не зря спросил что значит входящие
ибо нет смысла иметь доступ входящими через два канала
пусть он расшифрует конкретно что он хочет и имеет ввиду
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-05 5:59:05
Nickuz
paradox писал(а):вообще правильно для таких случаев поднимать BGP
Где б найти таких правильных провайдеров, которые с каждым клиентом согласны BGP поднимать.
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-05 9:36:37
mediamag
тоесть по русски тебе нужно чтобы дефаултроутера было два?? или чтобы был запасной канал и резервный на случай падения основного??
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-05 10:04:12
dsa
Не, немного не так.
Есть сервер, у него два внешних айпи. Они оба живы одновременно.
Если к серверу извне обращаются по адресу первого провайдера, то и ответить на запрос сервер должен в шлюз первого провайдера, если обращаются по адресу второго, то ответ должен уйти в шлюз второго провайдера.
Шлюза по умолчанию не должно быть два, мне кажется это нарушает определение
. Шлюз по умолчанию должен быть один (шлюз предпочитаемого для исходящих соединений провайдера). И на этот шлюз должны идти все исходящие запросы от сервера и из локальной сети.
Локальная сеть за натом, в качестве ната на сервере используется natd.
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-05 10:16:32
cloudsv
может использовать этот пример?
http://www.lissyara.su/?id=1330
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-05 10:43:26
mediamag
Расскажи что ты хочешь сделать на конкретном примере..
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-05 13:10:09
dsa
Хм, что то мне эта статья не попадалась на глаза при самостоятельном поиске, спасибо.
В принципе, у меня ситуация та же, что и в статье, только я применял уже правила с established, что-то не помогло.
Нужно повнимательнее пойти прочесть статью и свои правила.
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-05 13:15:23
dsa
mediamag писал(а):Расскажи что ты хочешь сделать на конкретном примере..
Да типичная ситуация. Был один провайдер - быстрый, надежный, дорогой. Появился второй - недорогой.
По "недорогому" нужно пустить всех в Интернет, на "надежном" нужно оставить несколько сервисов (dns, web, ssh). Через "недорогой" также нужно иметь доступ извне хотя бы к ssh для резерва. Ну и желательно еще обеспечить возможность использования "надежного", когда "недорогой" упадет.
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-05 15:54:17
mediamag
сам сейчас бьюсь над поиском решения проблемы "когда основной канал падает"...нарыл 3 на мой взгляд вполне рабочих скрипта...но я их еще не опробовал...вот
скрипт №1
Код: Выделить всё
#!/bin/bash
PETERSTAR=82.XXX.XXX.XXX #PETERSTAR gateway
SAMPO=10.XXX.XXX.XXX #SAMPO gateway
if [[ `/bin/ping -c 3 ${PETERSTAR} | /bin/grep "64 bytes"` ]]
then
if [[ `/sbin/route | /bin/grep default | /bin/grep ${PETERSTAR}` ]]
then
echo "`date '+%d-%m-%Y-%H:%M:%S'`: Default gateway is ${PETERSTAR}" >>/var/log/chanel.log
else
{
#Switch chanel to PETERSTAR gateway
/sbin/route del default
/sbin/route add default gw ${PETERSTAR}
echo "`date '+%d-%m-%Y-%H:%M:%S'`: Switch chanel to PETERSTAR gateway" >>/var/log/chanel.log
}
fi
else
{
#Switch chanel to SAMPO
/sbin/route del default
/sbin/route add default gw ${SAMPO}
echo "`date '+%d-%m-%Y-%H:%M:%S'`: Switch chanel to SAMPO gateway" >>/var/log/chanel.log
}
fi
скрипт №2
Код: Выделить всё
#!/bin/bash
# опрашиваемый узел основного провайдера
HOST=10.1.0.254
# шлюз к основному провайдеру
GW1=10.1.0.1
# шлюз к резервному провайдеру
GW2=10.2.0.1
ping -q -c 1 ${HOST} > /dev/null 2>&1
if [ $? -eq 0 ]; then
ping -q -c 1 ${GW1} > /dev/null 2>&1
if [ $? -eq 0 ]; then
ip route change default via ${GW1}
else
ip route change default via ${GW2}
fi
else
ip route change default via ${GW2}
fi
Нужен еще постоянный маршрут до опрашиваемого узла
ip route add 10.1.0.254 via 10.1.0.1
Скрипт загоняется в крон на исполнение каждую минуту.
скрипт №3
Код: Выделить всё
xl0 -> 192.168.x.x
rl0 -> ISP A (ADSL 256 kbit)
rl1 -> ISP B (WiFi 1 Mbit)
Сию каку, по имени fallover.sh "пихаю" в 5-ти минутный крон.
#cat fallover.sh
#!/bin/sh
WAN_MAIN_CHECK_IP=google.ru # Надежный как кирпич ip-шник, я так думаю!? :-)
WAN_BACKUP_CHECK_IP= rl0 # Вместо фейса, его ip-шник конечно же.
DEFAULT_ROUTE_IP=`netstat -nr | grep default`
ISP_1_GATE=A.A.A.A
ISP_1_HALFBAND=`expr 32 \* 1024 \* 300 / 2`
ISP_1_ROUTE_COUNT=`ipfw show 40 | awk '{print $3}' ; ipfw -q zero 40`
ISP_2_GATE=B.B.B.B
ISP_2_HALFBAND=`expr 128 \* 1024 \* 300 / 2`
ISP_2_ROUTE_COUNT=`ipfw show 60 | awk '{print $3}' ; ipfw -q zero 60`
if echo $DEFAULT_ROUTE_IP | grep $ISP_1_GATE > /dev/null;
then
if [ "$ISP_1_HALFBAND" -gt "$ISP_1_ROUTE_COUNT" ];
then
if ! (ping -c 3 $WAN_MAIN_CHECK_IP > /dev/null);
then
route delete default;
route add default $ISP_2_GATE;
route add $WAN_BACKUP_CHECK_IP $ISP_2_GATE;
fi
fi
else
if [ "$ISP_2_HALFBAND" -gt "$ISP_2_ROUTE_COUNT" ];
then
if (ping -c 3 $WAN_BACKUP_CHECK_IP > /dev/null) || !(ping -c 3 $WAN_MAIN_CHECK_IP > /dev/null);
then
route delete default;
route delete $WAN_BACKUP_CHECK_IP;
route add default $ISP_1_GATE;
else
echo "<<L1e" > /dev/speaker;
fi
else
echo "<<e3e3e3e3" > /dev/speaker;
fi
fi
Поднимаю еще один НАТ, и добавляю каунты в ipfw:
/sbin/natd -f /etc/natd.conf -n rl1 -P /var/run/8669.pid
ipfw -q add 40 count ip from any to me in via rl0
ipfw -q add 60 count ip from any to me in via rl1
ipfw -q add 70 divert 8669 from any to any via rl1
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-05 16:11:35
paradox
сам сейчас бьюсь над поиском решения проблемы "когда основной канал падает"...нарыл 3 на мой взгляд вполне рабочих скрипта...но я их еще не опробовал...вот
а какой смысл скриптов
когда 7 и 8 это найтивно поддерживают
много дефолтов
а ядро само перебирает какой доступный в текущий момент
при недоступности текущего перебираеться следующий
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-05 16:43:50
mediamag
мануалов по двум дефолтным роутерам мало..я например найти не могу ничего подобного
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-05 16:54:39
paradox
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-06 13:49:55
skeletor
Тебе однозначно нужен BGP+PI. Ищи таких провов, копай в эту сторону, если не хочешь извращаться с файерволами.
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-06 14:43:16
sch
Вот уперлись все в этот ECMP routing, а он не отвечает на первначальный вопрос.
Ситуация у автора темы типа такого: на сервере стоит Apache, к серверу подключены два канала от разных провайдеров, Apache слушает оба внешних адреса. Приходит HTTP-запрос на первый адрес - ответ должн идти через шлюз первого провайдера. Приходит запрос на адрес второго провайдера - ответ уходит через шлюз второго провайдера. Эта задача никак не решается множественными маршрутами.
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-06 14:47:25
paradox
Ситуация у автора темы типа такого: на сервере стоит Apache, к серверу подключены два канала от разных провайдеров, Apache слушает оба внешних адреса.
в таких ситуациях ответ - токо BGP
и обсуждать нечего
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-06 15:03:12
terminus
sch писал(а):Вот уперлись все в этот ECMP routing, а он не отвечает на первначальный вопрос.
Ситуация у автора темы типа такого: на сервере стоит Apache, к серверу подключены два канала от разных провайдеров, Apache слушает оба внешних адреса. Приходит HTTP-запрос на первый адрес - ответ должн идти через шлюз первого провайдера. Приходит запрос на адрес второго провайдера - ответ уходит через шлюз второго провайдера. Эта задача никак не решается множественными маршрутами.
http://nuclight.livejournal.com/124348.html
Тот факт, что на самом деле "перепрыгивание" выполняется на параметры
действия, позволяет использовать это для интересных вещей. В частности, с
использованием появившегося во FreeBSD 6.2 параметра tag на каждый пакет можно
навешивать внутриядерный тег, что в применении со skipto позволяет сделать, к
примеру, запоминание, с какого шлюза пришел входящий пакет на машине с каналами
к двум разным провайдерам, и ответные пакеты отправлять в тот канал, откуда они
пришли (допустим, у вашей машины только один IP-адрес, и сделать fwd на базе
внешнего адреса не получится), т.е. реализовать аналог reply-to из pf:
ipfw add 100 skipto 300 tag 1 in recv $ext_if1 keep-state
ipfw add 200 skipto 300 tag 2 in recv $ext_if2 keep-state
ipfw add 300 allow { recv $ext_if1 or recv $ext_if2 } # входящие снаружи
ipfw add 400 allow in recv $int_if # разрешить ответы на внутреннем проходе
ipfw add 500 fwd $gw1 tagged 1 # остались ответы на внешнем интерфейсе,
ipfw add 600 fwd $gw2 tagged 2 # зарулим их куда надо
---
На 7.2 вместо fwd можно делать setfib для пущей красоты...
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-06 15:03:35
hizel
мне сейчас думать лень, но на линупсе такая задача рашается через маршрутизацию
http://www.opennet.ru/docs/RUS/LARTC/x348.html
значит и во фре тоже может быть решена и не надо вводить человека в заблуждение
BGP им, блин, с PI падавай, умники
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-06 15:05:05
hizel
во terminus нормальный пример откопал :-)
если еще setfib привернуть получитсо еще красивее ;]
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-06 15:05:57
terminus
hizel писал(а):во terminus нормальный пример откопал :-)
если еще setfib привернуть получитсо еще красивее ;]
+1024
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-06 15:11:57
paradox
с таким же успехом можно придумать и как pf настроить
а фиб врядли от этого спасет
dsa писал(а):Да типичная ситуация. Был один провайдер - быстрый, надежный, дорогой. Появился второй - недорогой.
По "недорогому" нужно пустить всех в Интернет, на "надежном" нужно оставить несколько сервисов (dns, web, ssh). Через "недорогой" также нужно иметь доступ извне хотя бы к ssh для резерва. Ну и желательно еще обеспечить возможность использования "надежного", когда "недорогой" упадет.
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-06 15:23:14
hizel
скрпит для управления fib-ами и выбрать по какому критерию будет определятся падение недорого канала - вот и решение
кстати а откуда pf вытащил? :-\
Re: ipfw, "2 провайдера" и входящие соединения
Добавлено: 2009-10-06 16:43:12
skeletor
Где-то встречал фразу "и микроскопом можно гвозди забивать", это к тому, что лучше использовать вещи, которые под это заточены. Имхо.