The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

OSPF поверх GRE туннелей в linux (ospf route gre tunnel zebra)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: ospf, route, gre, tunnel, zebra,  (найти похожие документы)
From: ZIO Date: Mon, 23 Oct 2010 17:02:14 +0000 (UTC) Subject: OSPF поверх GRE туннелей в linux Оригинал: http://my.opera.com/Zl0/blog/2010/05/06/ospf-gre-linux Развивая тему GRE туннелей, очень часто используя несколько провайдеров мы можем получить параллельные туннели, т.е два разнесенных сервера устанавливают туннели через разных ISP, в таком случае, если оба туннеля работают и активны мы можем получить петли в маршрутизации, да и вообще как в linux отследить состояние каждого туннеля? Для этого я решил использовать динамическую маршрутизацию ospf из пакета quagga. Общая картина такая: два GW (Debian Lenny 5.0.4), за каждым из них подсети, которые должны быть связаны и иметь роутинг друг до друга. У каждого GW по два ISP, между GW настроен ipsec в режиме transport между адресами 1.1.1.1 и 3.3.3.3, и 2.2.2.2 и 4.4.4.4.Поверх этого проложены два GRE туннеля, так же между соответствующими парами адресов наших GW. Листинг интерфейсов: GW1 136: tunnel0@eth1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN link/gre 1.1.1.1 peer 3.3.3.3 inet 172.250.1.2 peer 172.250.1.1/24 scope global tunnel0 137: tunnel1@eth2: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1376 qdisc noqueue state UNKNOWN link/gre 2.2.2.2 peer 4.4.4.4 inet 172.250.2.2 peer 172.250.2.1/24 scope global tunnel1 GW2 41: tunnel0@eth1: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN link/gre 3.3.3.3 peer 1.1.1.1. inet 172.250.1.1 peer 172.250.1.2/24 scope global tunnel0 42: tunnel1@eth2: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN link/gre 4.4.4.4 peer 2.2.2.2 inet 172.250.2.1 peer 172.250.2.2/24 scope global tunnel1 tunnel0 на концах имеет адрес 172.250.1.1 и 172.250.1.2 tunnel1 на концах имеет адрес 172.250.2.1 и 172.250.2.2 Наличие флага MULTICAST на линках важное условие. Если все верно, ipsec установлен и туннели подняты, то с адреса 172.250.1.1 мы видим 172.250.1.2, а с адреса 172.250.2.1 видим 172.250.2.2 и наоборот естественно. # ping 172.250.1.1 PING 172.250.1.1 (172.250.1.1) 56(84) bytes of data. 64 bytes from 172.250.1.1: icmp_seq=1 ttl=64 time=23.4 ms 64 bytes from 172.250.1.1: icmp_seq=2 ttl=64 time=23.8 ms # ping 172.250.2.1 PING 172.250.2.1 (172.250.2.1) 56(84) bytes of data. 64 bytes from 172.250.2.1: icmp_seq=1 ttl=64 time=43.0 ms 64 bytes from 172.250.2.1: icmp_seq=2 ttl=64 time=44.1 ms После этого можно настраивать маршрутизацию между сетями. Устанавливаем quagga и нужно поправить три файла. 1. Тут без комментариев. /etc/quagga/daemons zebra=yes bgpd=no ospfd=yes ospf6d=no ripd=no ripngd=no isisd=no 2. Тут описываем интерфейсы которые будет слушать демон /etc/quagga/zebra.conf ! На GW2 меняем hostname hostname gw1 password zebra enable password zebra ! ! Interface's description. ! interface lo description loop interface tunnel0 description ISP1 interface tunnel1 description ISP2 ! log file /var/log/quagga/zebra.log 3. Также на GW2, меняем hostname, router-id, и сети которые будут участвовать в маршрутизации. /etc/quagga/ospfd.conf ! hostname gw1 password zebra enable password superzebra log file /var/log/quagga/ospfd.log ! ! ! ! interface lo ! interface tunnel0 ip ospf network point-to-point ip ospf cost 20 ip ospf mtu-ignore ! interface tunnel1 ip ospf network point-to-point ip ospf cost 10 ip ospf mtu-ignore ! router ospf ospf router-id 10.1.20.1 network 172.250.1.0/24 area 0.0.0.0 network 172.250.2.0/24 area 0.0.0.0 network 10.1.20.0/24 area 0.0.0.0 area 0.0.0.0 range 10.1.20.0/24 cost 10 ! line vty ! Здесь комментарии по некоторым параметрам: ip ospf network point-to-point - определяет к какому типу сети подключен интерфейс, а так же что наш сосед это точно другой конец туннеля. ip ospf cost- для каждого интерфейса вычисляется стоимость, для согласования стоимости мы можем присвоить свою цену, чем ниже цена, тем больше шансов, что через этот интерфейс пройдет маршрут при схождении. ip ospf mtu-ignore - на линках tunnel1 c разных концов у нас разное mtu, потому что ISP2 у нас dsl, если не игнорировать mtu в таком случае соседи не установят отношений. ospf router-id - идентификатор роутера, должен быть уникальным, для большей наглядности можно использовать основной ip адрес роутера. network 10.1.20.0/24 area 0.0.0.0 - определяем какие сети участвуют в маршрутизации Играя с параметром ip ospf cost мы можем добиться следующего: если цена интерфейсов будет ровна и оба канала работают и активны, то ospf будет пытаться балансировать нагрузку между интерфейсами, с помощью ip route и nexthop, конечно не точно 50/50, а как закешируется маршрут, но будет пытаться так или иначе. 10.1.20.0/24 proto zebra metric 20 nexthop via 172.250.1.1 dev tunnel0 weight 1 nexthop via 172.250.2.1 dev tunnel1 weight 1 Если цену интерфейсов сделать разной, то в штатном режиме, маршрут будет лежать через интерфейс с большей ценой, если он ломается, и связи до соседа по нему нет, то маршрут поднимается через более "дешевый" интерфейс, как только связь восстанавливается, все возвращается на место. После запуска quagga лучше проверить состояние работы из консоли самого демона. #telnet localhost 2604 Hello, this is Quagga (version 0.99.10). Copyright 1996-2005 Kunihiro Ishiguro, et al. User Access Verification Password: zebra gw1> sh ip ospf interface tunnel0 is up ifindex 136, MTU 1476 bytes, BW 0 Kbit <UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> Internet Address 172.250.1.2/24, Peer 172.250.1.1, Area 0.0.0.0 MTU mismatch detection:disabled Router ID 10.1.20.1, Network Type POINTOPOINT, Cost: 20 Transmit Delay is 1 sec, State Point-To-Point, Priority 1 No designated router on this network No backup designated router on this network Multicast group memberships: OSPFAllRouters Timer intervals configured, Hello 10s, Dead 40s, Wait 40s, Retransmit 5 Hello due in 9.958s Neighbor Count is 1, Adjacent neighbor count is 1 tunnel1 is up ifindex 137, MTU 1376 bytes, BW 0 Kbit <UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> Internet Address 172.250.2.2/24, Peer 172.250.2.1, Area 0.0.0.0 MTU mismatch detection:disabled Router ID 10.1.20.1, Network Type POINTOPOINT, Cost: 10 Transmit Delay is 1 sec, State Point-To-Point, Priority 1 No designated router on this network No backup designated router on this network Multicast group memberships: OSPFAllRouters Timer intervals configured, Hello 10s, Dead 40s, Wait 40s, Retransmit 5 Hello due in 1.101s Neighbor Count is 1, Adjacent neighbor count is 1 Если все завелось правильно, то мы должно увидеть наших соседей на другом конце туннеля,10.1.30.1 это router-id нашего соседа. gw1> sh ip ospf neighbor Neighbor ID Pri State Dead Time Address Interface RXmtL RqstL DBsmL 10.1.30.1 1 Full/DROther 36.870s 172.250.1.1 tunnel0:172.250.1.2 0 0 0 10.1.30.1 1 Full/DROther 31.157s 172.250.2.1 tunnel1:172.250.2.2 0 0 0 А так же маршруты от соседа gw1> sh ip ospf route ============ OSPF network routing table ============ N 172.250.1.0/24 [20] area: 0.0.0.0 directly attached to tunnel0 N 172.250.2.0/24 [10] area: 0.0.0.0 directly attached to tunnel1 N 10.1.30.0/24 [20] area: 0.0.0.0 via 172.250.2.1, tunnel1 via 172.250.1.1, tunnel0 N 10.1.20.0/24 [10] area: 0.0.0.0 directly attached to eth0 В итоге после обмена маршрутами мы будем иметь в зависимости от настроек ospf либо load balancing, либо failover. Так как протокол OSPF сам отслеживает состояние каналов, остается лишь настроить мониторинг чтобы знать, какой канал или каналы активны и работают.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Ваш комментарий
Имя:         
E-Mail:      
Заголовок:
Текст:





  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor