Jump to content
iT4iT.CLUB
Sign in to follow this  
Maerhekil

Разными дорогами

Recommended Posts

Так получилось, что у меня имеются два провайдера у одного из которых я вижу внутреннюю сеть, а ещё есть Zabbix который начинает ничего мне не сообщать если я не на работе про то, что происходит если провайдер через которого он это делает "уснул".

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

Имеем два шлюза с апи нашей локалки 1.1.1.1 и 1.1.1.2.

Имееем айпи 3.3.3.3 из внутренней сети провайдера.

Создаём рабочую директорию для скрипта в /usr/local/scripts/bin/status

В принципе это всё что нам надо.

#!/bin/sh
FPING="/usr/local/sbin/fping"
WRKDIR='/usr/local/scripts/bin'
DATE=`/bin/date`
MAININET='3.3.3.3'
MAIN='1.1.1.1'
BACKUP='1.1.1.2'
main_status_old=`/bin/cat $WRKDIR/status/main | /usr/bin/awk '{ print $1 }'`
main_try=`/bin/cat $WRKDIR/status/main | /usr/bin/awk '{ print $2 }'`
router=`/bin/cat $WRKDIR/status/router`
main_status_new=`$FPING $MAININET | /usr/bin/awk '{ print $3 }'`
back_status=`$FPING $BACKUP | /usr/bin/awk '{ print $3 }'`
if [ $main_status_new != 'alive' ]
        then {
                if [ $router = 'main' ]
                        then {
                                if [ $back_status = 'alive' ]
                                        then {
                                                if [ $main_try != 0 ]
                                                        then {
                                                                 route change default 1.1.1.2
                                                                echo 'backup' > $WRKDIR/status/router
                                                        }
                                                        else {
                                                                main_try=`expr $main_try + 1`
                                                                echo "$main_status_new $main_try" > $WRKDIR/status/main
                                                        }
.
                                                fi
                                        }
                                fi
                        }
                fi
.
        }
        else {
                if [ $router = 'backup' ]
                        then {
                                 route change default 1.1.1.1
                                 echo 'main' > $WRKDIR/status/router
                                 echo "$main_status_new 0" > $WRKDIR/status/main
                        }
                fi
        }
.
fi

Делаем статический маршрут до айпи 3.3.3.3 через шлюз 1.1.1.1

route add -net 3.3.3.3 1.1.1.1

Добавляем этот маршрут в rc.conf
 

static_routes="local-prov"

route_local-prov="-net 3.3.3.3 1.1.1.1"

Добавляем выполнение в крон по желаемому временному интервалу и радуемся тому, что сообщения о состоянии будут приходить если провайдер один отвалится. И тому что провайдер так любезен.

Удачи!

  • Like 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By Kitsum
      Представьте ситуацию, что Вам необходимо получить доступ к закрытому ресурсу. Это может быть, как компьютер находящийся в частной локальной сети (например, на работе), так и сервер находящийся в интернете и доступ к нему закрыт в связи с разного рода санкциями и прочей чепухой не имеющей ничего общего со здравым смыслом. Некоторые пользователи скатываются настолько низко, что могут закрыть видео на YouTube для граждан той или иной страны. Ну да Бог с ними, сама реализация описанная ниже намного более интереснее чем закрытый видеоролик и, тем более имеет намного более широкие перспективы!

      Все эти проблемы решает VPN, заодно он является самым распространенным способом для организации удаленных рабочих мест разными работодателями. В подавляющем большинстве случаев при использовании VPN Ваш компьютер становится частью чужой локальной сети, следовательно, маршрутизация всего трафика уже идет по чужим правилам.
      В рабочей обстановке это может выражаться в виде отсутствия доступа в интернет через сеть работодателя или между Вами и остальным интернетом вдруг появляется чужой Firewall и блокирует доступ к: ICQ, IRC, Skype или другим законным ресурсам.  А вот если Вы используете в интернете бесплатные VPN сервера (да и платные тоже) для Ваших личных нужд, то стоит помнить о том, что весь трафик проходит где-то там и все, что Вы делаете становится известно всем заграничным друзьям. В список раскрытой информации также входят cookie используемые Вашим браузером, платежные реквизиты от электронной коммерции до банковских карт, различные ключи и много всего интересного. Кстати, отечественные сервера тоже не брезгуют воспользоваться этими данными. Самое логичное решение на мой взгляд - составить список ресурсов, с которыми необходимо работать через VPN и заворачивать их трафик в тоннель, а все остальное пускать классическим способом через местного провайдера. Сам VPN тоннель поднимать только в том случае, если появляется трафик для него. Это позволит не держать постоянно поднятый канал и сэкономит ресурсы.

      Приступим к реализации
      Первым делом нам необходимо создать список сетей, в которые мы хотим ходить через VPN. Условно назовем этот список "blackHole". Список подсетей работодателя можно узнать у самого работодателя или его IT специалистов. Но вот, что делать если необходимо получить доступ к закрытому иностранному ресурсу? Для наглядности эксперимента пусть его роль сыграет https://2ip.ru/ т.к это покажет наглядную работу системы.
      Давно не новость, что за DNS именем ресурса может находится несколько IP адресов, иногда даже десятки или сотни. Все их необходимо добавить. В этом случае очень хорошо, если у Вас под рукой имеется машина с UNIX подобной операционной системой с установленными утилитами Host и Whois. Если таковой нету, то утилиты нам заменят:
      Host:
      http://www.digwebinterface.com/ Whois:
      https://www.reg.ru/whois/ https://www.nic.ru/whois/ Узнаем список используемых IP адресов с помощью утилиты Host
      root@linuxPC:/# host 2ip.ru 2ip.ru has address 178.63.151.224 2ip.ru mail is handled by 10 aspmx3.googlemail.com. 2ip.ru mail is handled by 5 alt1.aspmx.l.google.com. 2ip.ru mail is handled by 5 alt2.aspmx.l.google.com. 2ip.ru mail is handled by 1 aspmx.l.google.com. 2ip.ru mail is handled by 10 aspmx2.googlemail.com. Узнаем список всех подсетей с помощью утилиты Whois. Если предыдущая операция показала наличие более одного IP адреса, то данную процедуру нужно провести для всего списка.
      root@linuxPC:/# whois 178.63.151.224 % This is the RIPE Database query service. % The objects are in RPSL format. % % The RIPE Database is subject to Terms and Conditions. ... route: 178.63.0.0/16 Будет очень много информации, но нас интересует только строка с параметром route. Именно эту подсеть с указанием маски мы и добавляем в список "blackHole" маршрутизатора.
      /ip firewall address-list add address=178.63.0.0/16 comment=2ip.ru disabled=no list=blackHole Или через WinBox в разделе IP -> Firewall -> Address List
      Теперь необходимо промаркировать пакеты, это позволит повлиять в дальнейшем на их маршрутизацию. Каждому пакету, который предназначается для подсети из списка "blackHole" мы дадим маркер с именем "bh".
      /ip firewall mangle add action=mark-routing chain=prerouting dst-address-list=blackHole log=no \ new-routing-mark=bh Или через WinBox в разделе IP -> Firewall -> Mangle
      Теперь нам необходимо создать подключение к VPN серверу. В сети большой выбор как бесплатных серверов с периодически меняющимися учетными данными для подключения, так и платных к которым тоже нет особого доверия. В идеале конечно лучше держать свой собственный сервер, но это требует некоторых затрат средств и выгодно только в том случае, если такой доступ необходим целой компании или организации.
      Настройка будет зависеть от Вашего выбора. Я нашел первый попавшийся PPTP сервер и подключился к нему.
      /interface pptp-client add comment="VPN blackHole" connect-to=serverName\ disabled=yes name=pptp-out1 password=password\ user=login dial-on-demand=yes keepalive-timeout=60 comment - комментарий к подключению connect-to - адрес VPN сервера disabled - устанавливаем yes пока не закончим настройку (сюрпризы не нужны) name - имя интерфейса password - пароль user - логин dial-on-demand - связь с сервером устанавливается только при необходимости keepalive-timeout - время удержания соединения в секунда до разрыва связи в случае не использования соединения Или через WinBox в разделе Interface
      Учитывайте, что для разных серверов одного типа настройки могут сильно отличаться.
      Добавляем запись Masquerade в NAT для нашего нового интерфейса.
      /ip firewall nat add action=masquerade chain=srcnat dst-address-list=blackHole out-interface=\ pptp-out1 Или через WinBox в разделе IP -> Firewall -> NAT
      Осталось дело за малым, добавить новую запись в лист маршрутизации и заворачивать пакеты с маркером "bh" на интерфейс pptp-out1
      /ip route add distance=1 gateway=pptp-out1 routing-mark=bh Или через WinBox в разделе IP -> Routes
      Поднимаем интерфейс (естественно, что у Вас его порядковый номер может отличаться)
      /interface pptp-client set numbers=0 disabled=no После всех манипуляций идем на любой адрес из списка "blackHole", в нашем случае это http://2ip.ru и сравниваем адрес с данными например на http://myip.ru 
      Теперь трафик перераспределяется нужным нам образом и можно приступить к поднятию необходимых тоннелей с серверами и маршрутизаторами на работе, в удаленных офисах и вообще с чем душе угодно.
    • By Maerhekil
      Распространённая проблемка, когда при падении сервера на котором развёрнут DHCP наступает неприятная ситуация в общении с пользователями. Довольно просто предотвратить данную ситуацию развёртыванием дублирующего DHCP на другом сервере в локальной сети. Что мы сейчас и проделаем, правда начнём просто с настройки, считая что у вас уже есть установленные два сервака на FreeBSD
      Первичный сервер:
      Для удобства дробим конфигурационный файл на несколько. У нас получается три файла с таким содержимым.
      /usr/local/etc/dhcpd.conf :
       
      option domain-name "mycompany.local"; option domain-name-servers 10.0.0.2, 10.0.0.3; option subnet-mask 255.255.255.0; default-lease-time 86400; max-lease-time 604800; ddns-update-style none; authoritative; subnet 10.0.0.0 netmask 255.255.255.0 { option routers 10.0.0.1; interface em0;    pool {          failover peer "mynetwork";          range 10.0.0.20 10.0.0.250;         } } include "/usr/local/etc/dhcpd-primary"; include "/usr/local/etc/dhcpd-hold"; Что мы тут имеем в первом и так сказать главном файле конфигурации:
      option domain-name "mycompany.local"; - Задаём доменное имя, которое клиенты будут использовать при запросах к DNS. Если имена разрешены.
      option domain-name-servers 10.0.0.2, 10.0.0.3; - Собственно, адреса DNS серверов в сети.
      option subnet-mask 255.255.255.0; - Сетевая маска локальной сети где будет находится DHCP сервер.
      default-lease-time 86400; - Период времени по умолчанию в секундах, на который будет выданный адрес закреплён за устройством.
      max-lease-time 604800; - Максимальный период времени в секундах, на который будет выданный адрес закреплён за устройством.
      subnet 10.0.0.0 netmask 255.255.255.0 - Подсеть с её маской.
      option routers 10.0.0.1; - Шлюз сети.
      interface em0; - На каком интерфейсе слушать запросы и отвечать с которого.
      Далее описание пула для выдачи адресов:
      failover peer "mynetwork"; - название.
      range 10.0.0.20 10.0.0.250; - диапазон адресов для выдачи клиентам.
      Влючаем в конфиг другие файлы конфигурации:
      include "/usr/local/etc/dhcpd-primary";
      include "/usr/local/etc/dhcpd-hold";
      Далее /usr/local/etc/dhcpd-primary :
       
      failover peer "mynetwork" {         primary;         address 10.0.0.4;         port 647;         peer address 10.0.0.5;         peer port 647;         max-response-delay 60;         max-unacked-updates 10;         mclt 3600;         split 128;         load balance max seconds 3;  } Это описание самой технологии failover, что мы имеем тут:
      primary; - К какому серверу DHCP относится этот файл, грубо говоря :-) . В данном случае к  первичному.
      address 10.0.0.4; - Его адрес в сети
      port 647; - Порт? :-)
      peer address 10.0.0.5; - Адрес вторичного сервера в сети.
      peer port 647; - Его порт.
      max-response-delay 60; - Ожидание в секундах ответа первичным сервером от вторичного. По истечении считает его недоступным.
      max-unacked-updates 10; - Непонятная хрень. Максимальное количество несанкционированных обновлений?
      mclt 3600; - Время в секундах, по истечении которого продлевается или прекращается аренда без синхронизации.
      split 128; - Нужно для балансировки.
      load balance max seconds 3; - Время в секундах, по истечении балансировка прекращается.
      Топаем дальше /usr/local/etc/dhcpd-hold . Это файл со статическими назначениями ip-адресов в соответствии с mac-адресами. Приведу только один пример:
      host BLA-BLA { hardware ethernet FF:FF:FF:FF:FF:FF; fixed-address 10.0.0.81;} BLA-BLA - описание хоста
      FF:FF:FF:FF:FF:FF - Mac-адрес сетевой карты
      10.0.0.81 - Закреплённый ip-адрес
      Ну в принципе с первичным сервером закончили. 
      Перейдём к вторичному.
      /usr/local/etc/dhcpd.conf  У нас немного меняются только две строчки:
      include "/usr/local/etc/dhcpd-secondary"; include "/usr/local/etc/dhcpd-hold-nowrite"; Но это при условии, что у нас имя сетевого интерфейса такое-же, в данном случае em0 .
      Далее /usr/local/etc/dhcpd-secondary
      failover peer "mynetwork" {         secondary;         address 10.0.0.5;         port 647;         peer address 10.0.0.4;         peer port 647;         max-response-delay 60;         max-unacked-updates 10;         mclt 3600;         load balance max seconds 3;  } Ну и последний, создаём /usr/local/etc/dhcpd-hold-nowrite . Это тот-же dhcpd-hold, там ничего не меняется.
      В принципе всё готово. Запускаем, и радуемся жизни. Но радость была недолгой ибо неудобно после каждой правки перезапускать два сервака ручками, мы сразу захотели автоматизацию. Но это уже совсем другая история.
      Надеюсь ничего не упустил, у меня бывает. Если это так, пишите.
      Удачи.
       
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...