Рассказывать про выбор средств обеспечения динамической маршрутизации не буду. Прекрасно понимаю человека. Сам когда то был в такой ситуации. Было очень много не понятного и тяжело разобраться... Постараюсь объяснить как сделано у меня, а выбор за хозяином, в первую очередь. По крайней мере выбрать есть из чего.
1. Бесплатное ПО динамической маршрутизации для Unix-Like систем:
- Quagga
- OpenBGPD, OpenOSPFD
- Xorp
2. Готовые бесплатные дистрибутивы софт роутеров:
- Xorp
- Vyatta
3. Аппаратные платные решения:
- Cisco
- Juniper
- Extrem
- Mikrotik
- Vyatta
- D-Link
- HP
На чем я остановился...
Построение сети
Схема и используемые типы связи:
[bgp neighbor]<---bgp--->[bgp router]<---ospf--->[ip shaper]<---static routes--->[servers]<---dhcp--->[workstations]
BGP маршрутизатор:
ОС: FreeBSD 7.1
ПО: Quagga 0.99.11 (Используемые демоны: zebra, bgpd, ospfd)
Каналы: 2 по 6 Мбит/с. с разными BGP пирами.
Принимаю: Дефолт (0.0.0.0/0) + UA-IX от обоих пиров.
Анонсирую: 1 префикс с маской 24 обоим пирам.
Балансировка: 1 канал - Мир, 1 канал - Украина.
Настройка
1. Устанавливаем FreeBSD, обновляем порты
2. Устанавливаем из портов Quagga
3. Проводим базовые настройки для запуска Quagga
Файл /etc/rc.conf
defaultrouter="NO"
quagga_enable="YES"
quagga_daemons="zebra bgpd ospfd"
quagga_flags="-d -A 127.0.0.1"
watchquagga_enable="YES"
watchquagga_flags="-dz -R '/usr/local/etc/rc.d/quagga restart' zebra bgpd ospfd"
Примечание: Настройка сетевых интерфейсов будет происходить под управлением Quagga а не Ifconfig. Также если планируются Vlan, лучше их задать сразу в rc.conf
У меня BGP маршрутизатор запущен под VMware server 2, пришлось уменьшить mtu до 1482 т.к. VMware где то дополнительно дописывает 8 байт и большие пакеты не проходят.
cloned_interfaces="vlan2 vlan3 vlan4"
ifconfig_vlan2="vlan 2 vlandev le0 mtu 1482"
ifconfig_vlan3="vlan 3 vlandev le0 mtu 1482"
ifconfig_vlan4="vlan 4 vlandev le1 mtu 1482"
ifconfig_le0="up"
ifconfig_le1="up"
Создаем конфигурационные файлы и лог файл. Расставляем права.
freebsd# touch /usr/local/etc/quagga/bgpd.conf
freebsd# touch /usr/local/etc/quagga/zebra.conf
freebsd# touch /usr/local/etc/quagga/vtysh.conf
freebsd# touch /var/loq/quagga.log
freebsd# chown quagga:quagga /usr/local/etc/quagga/*.conf
freebsd# chmod 600 /usr/local/etc/quagga/*.conf
freebsd# chown quagga:quagga /usr/local/etc/quagga/
freebsd# chmod 755 /usr/local/etc/quagga/
freebsd# chown quagga:quagga /var/log/quagga.log
freebsd# chmod 644 /var/log/quagga.log
4. Запускаем Quagga и входим в командный интерпретатор Vtysh для конфигурирования:
freebsd# /usr/local/etc/rc.d/quagga start
[code]freebsd# vtysh
Hello, this is Quagga (version 0.99.11).
Copyright 1996-2005 Kunihiro Ishiguro, et al.
QUAGGA-ROUTER#
4. Конфигурируем к виду:
hostname QUAGGA-ROUTER-ZEBRA
log file /var/log/quagga.log
log stdout
log syslog
bgp config-type cisco
hostname QUAGGA-ROUTER
!
service password-encryption
!
password 8 gX6zVEe229lA6
enable password 8 dVMKGSc5Q0aks
!
interface le0
description --==Roditelskiy Interfeys Dlya Vneshnih VLAN==--
ipv6 nd suppress-ra
link-detect
!
interface le1
description --==Roditelskiy Interfeys Dlya Vnutrennih VLAN==--
ipv6 nd suppress-ra
link-detect
!
interface lo0
link-detect
!
interface plip0
ipv6 nd suppress-ra
!
interface vlan2
description --==ASXXXXX==--
ip address xxx.xxx.xxx.xxx/30
ipv6 nd suppress-ra
link-detect
!
interface vlan3
description --==ASYYYYY==--
ip address yyy.yyy.yyy.yyy/30
ipv6 nd suppress-ra
link-detect
!
interface vlan4
description --==ASZZZZZ==--
ip address zzz.zzz.zzz.zzz/30
ipv6 nd suppress-ra
link-detect
!
router bgp ZZZZZ
no synchronization
bgp router-id zzz.zzz.zzz.z
bgp log-neighbor-changes
bgp deterministic-med
network zzz.zzz.zzz.z mask 255.255.255.0
timers bgp 30 90
neighbor xxx.xxx.xxx.xx remote-as XXXXX
neighbor xxx.xxx.xxx.xx description --==ASXXXXX==--
neighbor xxx.xxx.xxx.xx ebgp-multihop 3
neighbor xxx.xxx.xxx.xx soft-reconfiguration inbound
neighbor xxx.xxx.xxx.xx route-map ASXXXXX-IN in
neighbor xxx.xxx.xxx.xx route-map ASXXXXX-OUT out
neighbor yyy.yyy.yyy.yy remote-as YYYYY
neighbor yyy.yyy.yyy.yy description --==ASYYYYY ==--
neighbor yyy.yyy.yyy.yy soft-reconfiguration inbound
neighbor yyy.yyy.yyy.yy route-map ASYYYYY-IN in
neighbor yyy.yyy.yyy.yy route-map ASYYYYY-OUT out
no auto-summary
!
router ospf
ospf router-id zzz.zzz.zzz.zz
log-adjacency-changes
passive-interface default
no passive-interface vlan4
network zzz.zzz.zzz.zz/30 area 0.0.0.0
area 0.0.0.0 authentication message-digest
default-information originate always
!
ip route zzz.zzz.zzz.0/24 Null0 254
ip route xxx.xxx.xxx.xx/32 xxx.xxx.xxx.xxx
!
ip prefix-list ASZZZZZ-NET description --==Anonsiruemie marshruty==--
ip prefix-list ASZZZZZ-NET seq 5 permit zzz.zzz.zzz.0/24
ip prefix-list LOCAL-NET description --==Lokal`nie seti==--
ip prefix-list LOCAL-NET seq 15 permit 0.0.0.0/8 le 32
ip prefix-list LOCAL-NET seq 20 permit 127.0.0.0/8 le 32
ip prefix-list LOCAL-NET seq 25 permit 192.0.2.0/24 le 32
ip prefix-list LOCAL-NET seq 30 permit 10.0.0.0/8 le 32
ip prefix-list LOCAL-NET seq 35 permit 172.16.0.0/12 le 32
ip prefix-list LOCAL-NET seq 40 permit 192.168.0.0/16 le 32
ip prefix-list LOCAL-NET seq 45 permit 169.254.0.0/16 le 32
ip prefix-list LOCAL-NET seq 50 permit 192.42.172.0/24 le 32
ip prefix-list LOCAL-NET seq 55 permit 198.18.0.0/15 le 32
ip prefix-list LOCAL-NET seq 60 permit 192.88.99.0/24 le 32
ip prefix-list LOCAL-NET seq 65 permit 224.0.0.0/4 le 32
ip prefix-list LOCAL-NET seq 70 permit 240.0.0.0/4 le 32
ip prefix-list PEER-NET description --==Anonsirovanye marshruty==--
ip prefix-list PEER-NET seq 5 permit 0.0.0.0/0
!
ip as-path access-list 1 permit _6451[2-9]_
ip as-path access-list 1 permit _645[2-9][0-9]_
ip as-path access-list 1 permit _64[6-9][0-9][0-9]_
ip as-path access-list 1 permit _65[0-9][0-9][0-9]_
ip as-path access-list 2 permit _15645_
ip as-path access-list 3 permit ^XXXXX$
ip as-path access-list 4 permit ^YYYYY$
!
route-map ASXXXXX-IN deny 100
description --==Filtr lokal`nyh avtonomnyh sistem==--
match as-path 1
!
route-map ASXXXXX-IN deny 110
description --==Fil`tr lokalnyh setey==--
match ip address prefix-list LOCAL-NET
!
route-map ASXXXXX-IN deny 120
description --==Fil`tr svoey avtonomnoy sistemy==--
match ip address prefix-list ASZZZZZ-NET
!
route-map ASXXXXX-IN permit 130
description --==Ustanovka prioriteta dlya AS15645 (UA-IX)==--
match as-path 2
set local-preference 200
!
route-map ASXXXXX-IN permit 140
description --==Priem anonsirovanyh marshrutov i ustanovka prioriteta==--
match ip address prefix-list PEER-NET
set local-preference 100
!
route-map ASXXXXX-IN permit 150
description --==Priem marshrutov porojdennyh v AS provaydera i ustanovka prioriteta==--
match as-path 3
set local-preference 300
!
route-map ASYYYYY-IN deny 100
description --==Filtr lokal`nyh avtonomnyh sistem==--
match as-path 1
!
route-map ASYYYYY-IN deny 110
description --==Fil`tr lokalnyh setey==--
match ip address prefix-list LOCAL-NET
!
route-map ASYYYYY-IN deny 120
description --==Fil`tr svoey avtonomnoy sistemy==--
match ip address prefix-list ASZZZZZ-NET
!
route-map ASYYYYY-IN permit 130
description --==Ustanovka prioriteta dlya AS15645 (UA-IX)==--
match as-path 2
set local-preference 100
!
route-map ASYYYYY-IN permit 140
description --==Priem anonsirovanyh marshrutov i ustanovka prioriteta==--
match ip address prefix-list PEER-NET
set local-preference 200
!
route-map ASYYYYY-IN permit 150
description --==Priem marshrutov porojdennyh v AS provaydera i ustanovka prioriteta==--
match as-path 4
set local-preference 300
!
route-map ASXXXXX-OUT permit 100
description --==Razreshenie na anons svoey avtonomnoy sistemy==--
match ip address prefix-list ASZZZZZ-NET
!
route-map ASYYYYY-OUT permit 100
description --==Razreshenie na anons svoey avtonomnoy sistemy==--
match ip address prefix-list ASZZZZZ-NET
!
ip forwarding
!
line vty
!
xxx.xxx.xxx.xxx - IP адреса или сеть 1 пира
yyy.yyy.yyy.yyy - IP адреса или сеть 2 пира
zzz.zzz.zzz.zzz - Мой IP адрес или сеть
XXXXX - Автономная система 1 пира
YYYYY - Автономная система 2 пира
ZZZZZ - Моя автономная система
В качестве шейпера сети использую Dummynet на FreeBSD. Если в конфиге что то непонятно, могу объяснить по каждой команде. В свое время пришлось разобраться.