9 июн. 2012 г.

Настройка шлюза на ОС Linux (CentOS) + OSPF, cisco, zebra, два pppoe соединения

Cхема сети:

Задача:
Организовать бесперебойную работу производственной базы, офисов, IP телефонии и интернета, при условии, что один из провайдеров жив, без использования скриптов.
Решение:
Реализовать данную задачу протоколом динамической маршрутизации OSPF. За переключение между pppoe соединениями будет отвечать демон zebra.
В результате, посредством ospf и zebra, мы получим динамическую маршрутизацию между точками 192.168.31.1(cisco, т.к. на нее приходит поток Е1, нам она очень важна, а так же в данной конфигурации на ней висят офисы) и 192.168.31.2(Linux, главный шлюз, за которым находится сервер IP телефонии и производственная база), а так же динамический выбор маршрута из двух подключений ppooe (ppp0 и ppp1), при чем ppp0 будет оставаться всегда приоритетным.
Под катом продолжение...



Исходные данные:
cisco2811(192.168.31.1) с потоком Е1(30 номеров) - 1шт.
elastix(192.168.31.2) - 1шт.
Шлюзов на ОС linux - 4шт.
Два провайдера, приходящих на основную базу (192.168.31.2) и циску (192.168.31.1).
Общее кол-во раб.станций ~ 70.
IP телефонов Linksys SPA XXXX и cisco SPA - 53шт.
Серверваки с разными сервисами нам сейчас не важны.
Версия CentOS : [root@centos quagga]# cat /proc/version
Linux version 2.6.32-220.el6.x86_64 (mockbuild@c6b18n3.bsys.dev.centos.org) (gcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) ) #1 SMP Tue Dec 6 19:48:22 GMT 2011

iptables (как пример, все разрешено, только для проверки работоспособности нижеприведенной конфигурации):
# Generated by iptables-save v1.4.7 on Wed Jun 6 05:01:19 2012
*mangle
:PREROUTING ACCEPT [86:16575]
:INPUT ACCEPT [65:15354]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [26:3584]
:POSTROUTING ACCEPT [26:3584]
COMMIT
# Completed on Wed Jun 6 05:01:19 2012
# Generated by iptables-save v1.4.7 on Wed Jun 6 05:01:19 2012
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [12:1880]
COMMIT
# Completed on Wed Jun 6 05:01:19 2012
# Generated by iptables-save v1.4.7 on Wed Jun 6 05:01:19 2012
*nat
:PREROUTING ACCEPT [45:13683]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 192.168.31.6 -o ppp+ -p all -j MASQUERADE
-A POSTROUTING -s 192.168.0.0/255.255.248.0 -o ppp+ -p tcp -m multiport --dports 25,53,80,110,143,443,995,5190 -j MASQUERADE
-A POSTROUTING -s 192.168.0.0/255.255.248.0 -o ppp+ -p udp -m multiport --dports 53 -j MASQUERADE
-A POSTROUTING -s 192.168.0.0/255.255.248.0 -o ppp+ -p icmp -j MASQUERADE
COMMIT
# Completed on Wed Jun 6 05:01:19 2012

Для офисов 30.2, 30.3, 30.4 шлюзом является 30.1.

cisco: 
fo 0/0 ip address 192.168.30.1/29 , 192.168.31.9/30 secondary - Провайдер 1.
fo 0/1 ip address 192.168.40.9/30 - Провайдер 2.
lo ip address 192.168.31.1/32
ip route 192.168.2.0 255.255.255.0 192.168.30.2
ip route 192.168.3.0 255.255.255.0 192.168.30.3
ip route 192.168.4.0 255.255.255.0 192.168.30.4
ip route 0.0.0.0 0.0.0.0 192.168.31.2

Linux:
eth0 ip address 192.168.1.2/24
eth0.10 ip address 192.168.31.10/30
eth0.11 ip address 192.168.40.10/30
eth0.12 ip address 192.168.31.5/30
lo:0 ip address 192.168.31.2/32
ppp0
ppp1

Elastix:
eth0 ip address 192.168.31.6/30

Исполнение:
1. Linux. Правим файл /etc/sysctl.conf:
net.ipv4.ip_forward = 1 - включаем форвординг.
net.ipv4.conf.eth0.rp_filter = 0 - отключаем rp_filter, пришлось указывать явно, ибо упрямо не хотел меняться.
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
sysctl -p - применяем/перезагружаем параметры.
2. Linux. Настраиваем iptables, пример выше ^ .
3. Правим файлы ppp0 и ppp1 в /etc/sysconfig/network-scripts/
DEFROUTE = no - за маршрут по умолчанию у нас будет отвечать zebra
DEMAND = no - значение 'no' позволяет ppp-соединению существовать неограниченно долго;
PPPD_EXTRA = "unit 0" - Устанавливает номер интерфейса ppp для исходящих соединений, unit 0 для ppp0 и unit 1 для ppp1, дабы при падении ppp0, ppp1 не изменялся на ppp0
4. В /etc/resolv.conf забиваем dns сервера, я использую следующие(первые два провайдера):
nameserver 87.103.234.10
nameserver 87.103.234.8
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 192.168.1.30
search mydomain.local - для поиска внутренних машин, записи зоны хранятся на 1.30,  имя домена изменено, за рекламу мне никто не платит :)
5. Поднимаем ospf на cisco:
configure terminal
router ospf 1
router-id 192.168.31.1 redistribute static subnets
network 192.168.31.1 0.0.0.0 area 1
network 192.168.30.0 0.0.0.255 area 1
network 192.168.31.8 0.0.0.3 area 1
network 192.168.40.8 0.0.0.3 area 1
6. Устанавливаем yum install quagga и редактируем файл /etc/sysconfig/quagga 
QCONFDIR="/etc/quagga"
#BGPD_OPTS="-A 127.0.0.1 -f ${QCONFDIR}/bgpd.conf"
#OSPF6D_OPTS="-A ::1 -f ${QCONFDIR}/ospf6d.conf"
OSPFD_OPTS="-A 127.0.0.1 -f ${QCONFDIR}/ospfd.conf"
#RIPD_OPTS="-A 127.0.0.1 -f ${QCONFDIR}/ripd.conf"
#RIPNGD_OPTS="-A ::1 -f ${QCONFDIR}/ripngd.conf"
ZEBRA_OPTS="-A 127.0.0.1 -f ${QCONFDIR}/zebra.conf"
#ISISD_OPTS="-A ::1 -f ${QCONFDIR}/isisd.conf"
# Watchquagga configuration (please check timer values before using):
WATCH_OPTS=""
WATCH_DAEMONS="zebra ospfd" #WATCH_DAEMONS="zebra bgpd ospfd ospf6d ripd ripngd"
# To enable restarts, uncomment this line (but first be sure to edit
# the WATCH_DAEMONS line to reflect the daemons you are actually using):
#WATCH_OPTS="-Az -b_ -r/sbin/service_%s_restart -s/sbin/service_%s_start -k/sbin/service_%s_stop
7. Редактируем файл  /etc/quagga/zebra.conf и незабываем создать файлы логов по заданному пути.
hostname centos.blablabla.local
password blablabla
enable password blablabla
!
log file /var/log/quagga/zebra.log
!
! interface description
!
interface ppp0
description Rostelecom
link-detect
!
interface ppp1
description AgencyJin
link-detect
!
ip route 0.0.0.0/0 ppp0 10
ip route 0.0.0.0/0 ppp1 200
!
interface eth0
ip address 192.168.1.2/24
!
interface eth0.10
ip address 192.168.31.10/30
!
interface eth0.11
ip address 192.168.40.10/30
!
interface eth0.12
ip address 192.168.31.5/30
!
interface lo:0
ip address 192.168.31.2/32
8. Редактируем файл /etc/quagga/ospfd.conf и незабываем создать файлы логов по заданному пути.
!
! OSPFd sample configuration file
!
!
hostname centos.primer.local
password primer
enable password superprimer
!
router ospf
ospf router-id 192.168.31.2
network 192.168.31.2/32 area 1
network 192.168.1.0/24 area 1
network 192.168.31.4/30 area 1
network 192.168.31.8/30 area 1
network 192.168.40.8/30 area 1
!
log file /var/log/quagga/ospfd.log
9. Стартуем, смотрим, проеряем, и не забываем добавить в автозапуск.
service zebra start
service ospfd start
chkconfig zebra on
chkconfig ospfd on

Несколько из найденного и использованного:
opennet.ru - pppoe
opennet.ru - quagga
xgu.ru - маршрутизация cisco

Комментариев нет:

Отправить комментарий