среда, 22 августа 2012 г.

Отказоустойчивый интернет

Задача: обеспечить возможность автоматического переключения на резервный канал для целей доступа в интернет (в т.ч. и не http) и к ресурсам филиалов. В филиалах, аналогично, должна быть реализована возможность прозрачного переключения.
Планируется использовать:
  • для динамической маршрутизации в сети: OSPF (Cisco в качестве центральных элементов + Quagga на FreeBSD)
  • для связи с филиалами - основной и резервный набор шифрованных каналов передачи на базе openvpn
  • отказоустойчивость на уровне прокси протоколом CARP
  • отказоустойчивость на уровне шлюза по умолчанию протоколом VVRP (альтернатива - попробовать использование метрик на интерфейсы в routed, либо в OSPF -?)
  • центральный элемент в СПб - Cisco 3825
Ссылки: 
  1. установка quagga на фре: http://muff.kiev.ua/content/quagga-prevrashchenie-servera-v-polnofunktsionalnyi-marshrutizator
  2. несколько каналов для openvpn:  http://openmaniak.com/openvpn_routing.ph
  3. использование vvrp на cisco:  http://xgu.ru/wiki/VRRP_%D0%B2_Cisco
  4. кусок статьи на лиссяре (там же скрипт с перецеплением в ipfw): http://forum.lissyara.su/viewtopic.php?f=4&t=4192&sid=27d29b13b83aab40d73eb8b538c841bf&start=25#p34031
  5. кратко о настройке ospf в cisco: http://www.oszone.net/13904/OSPF_Cisco
  6. шпора по OSPF:  http://www.qinet.ru/2010/09/301/

Ход настройки

Организуем два постоянных канала из филиалов до СПб

  • Копируем все конфиги и сертификаты с FTP02 на 9GATE, режем права
  • (?)  На всякий случай ремим в конфигах ccd строки с добавлением маршрута к 10.1.х.х.  - пока решение менять маршруты с сетей до узлов в парах на ftp01 и 9gate (т.е. вместо 10.1.0.0 сделать 10.1.0.112/113, а вместо 10.15.0.0 - 10.15.0.1)
  • На удаленных машинах копируем /usr/local/etc/rc.d/openvpn в /usr/local/etc/rc.d/openvpn_reserv (для запуска отдельного демона с отдельным pid)
  • Прописываем в /etc/rc.conf
openvpn_reserv_enabled="YES"
  • копируем конфиг /usr/local/etc/openvpn/openvpn.conf в  /usr/local/etc/openvpn/openvpn_reserv.conf
  • в openvpn_conf строку "remote 84.204.30.83" на конструкцию (для смены входящего/исходящего портов и организации отдельного лога):
remote 89.175.253.74 1195
port 1195
log-append /var/log/openvpn_reserv.log
  • меняем интерфейсы tun на tap (? - а то не ходит маршрутизация без этого) для включения tap device пишем в /boot/loader.conf строку if_tap_load="YES"

Настраиваем маршрутизацию OSPF в СПб между Cisco3825, 9gate и FTP02, а также филиальными серверами

1. Настройка Quagga (FTP02, 9gate, филиальные сервера)

Настройка аналогично статье (1)
  • устанавливаем quagga (все галки кроме NO_BGP_ANNOUNCE сняты)
  • добавляем записи в rc.conf
quagga_enable="YES"
quagga_daemons="zebra ospfd"
watchquagga_enable="YES"
watchquagga_flags="-dz -R '/usr/local/sbin/zebra -d; /usr/local/sbin/ospfd -d;' zebra ospfd"
        • создаем каталоги и файлы, задаем права
        touch /usr/local/etc/quagga/zebra.conf
        touch /usr/local/etc/quagga/ospfd.conf
        chmod 600 /usr/local/etc/quagga/*
        chown -R quagga:quagga /usr/local/etc/quagga
        mkdir /var/log/quagga
        chown quagga:quagga /var/log/quagga
        • прописываем пользователей в ospfd.conf и zebra.conf (7Н, 28)
        password pass1
        enable password pass2
        • запускаем демон quagga /usr/local/etc/rc.d/quagga restart
        • конфигурим демон zebra
        telnet localhost zebra
        enable
        configure terminal
        hostname zebra-router
        zebra-router(config)# service password-encryption
        zebra-router(config)# log stdout
        zebra-router(config)# log file /var/log/quagga/zebra.log
        zebra-router(config)# exitzebra-router# write memory

        • конфигурим демон ospfd

        telnet localhost ospfd
        enable
        configure terminal
        hostname ospfd-router1
        service password-encryption
        log stdout
        log file /var/log/quagga/ospfd.log
        router ospf
         ospf router-id 10.1.0.112
         redistribute connected  # анонс подключенных сетей
         redistribute static # анонс статических маршрутов
         network 10.1.0.0/16 area 0.0.0.0 # родная сеть
         network 10.2.0.0/24 area 0.0.0.0 # vpn1 (для филиалов)
         network 10.3.0.0/24 area 0.0.0.0 # сеть vpn2
         default-information originate always # - только на 10.1.0.113 и 112
         exit
        interface vlan1
         description Internal_interface
         ip ospf cost 100
         ip ospf hello-interval 8
         ip ospf dead-interval 24
         ip ospf retransmit-interval 4
         exit
        exit
        write memory

        примечание: 
        анонс шлюза по умолчанию на 10.1.0.112 и 10.1.0.113: default-information originate always
        cost для ftp02 (8 Мбит/сек) будет 100 000 000 / 8 000 000 = 12
        cost для 9gate (1 Мбит/сек) будет 100 000 000 / 1 000 000 = 100
        • ПРОВЕРЯЕМ OSPF:
          show ip ospf neighbor - соседи
          show ip ospf database - база

        2. Настраиваем роутер Cisco на работу ospf 

        • Запускаем возможность маршрутизации: вход -> enable -> conf t -> ip routing
        • запускаем OSPF на интерфейсе 0/0
        • int gi0/0
        • router ospf 1111
        • network 10.1.0.0 0.0.255.255 area 0
        примечание:
        Конф. DNS: ip name-server 10.1.1.5

        Вопросы к проработке:

        аутентификация OSPF - стр 43 мана http://www.nongnu.org/quagga/docs/quagga.pdf
        метрика на шлюзах по умолчанию

        1 комментарий:

        1. Спасибо за статью. Очень полезная штука - настраивал под Ubuntu (http://sysadm.pp.ua/linux/carp-ubuntu.html) кластер из трех серверов - до сих пор на проде работает. Не подскажите, если ли возможность(технология) для geodistributed redundent IP, может сталкивались ? Заранее спасибо.

          ОтветитьУдалить