Как стать автором
Обновить

Настройка mpls l3 vpn в junos

image

Введение


Здравствуйте. Сделал небольшую лабораторку по теме mpls l3 vpn на junos, а точнее с помощью Olive.
Возможно кому то будет интересно учитывая малое количество статей по Juniper и Junos на Хабре.
Вся лабораторка крутится на довольно древнем ноутбуке c 3Г памяти и Core2 Duo.
Система Ubuntu 14.04, GNS 0.8.6, Qemu 1.7.0, ну и естественно Olive c Junos 11.4R9.4.
Настройку GNS3 и Qemu описывать не имеет смысла так как информации в сети очень много,
но хочу отметить что мне сильно помог kvm и соответствующие опции для Qemu в GNS3, иначе ноутбук просто не справлялся.

Топология сети и план


Собственно физическая схема:
image
И как полагается план ip адресов:

A-1 em1 192.168.1.1/30 <-> Core-1 em1 192.168.1.2/30
A-1 em0 192.168.100.1/30 <-> A-2 em0 192.168.100.2/30
A-1 em2 10.10.100.1/24 <-> Linux eth0 10.10.100.2/24 to Client VPN100
A-2 em1 192.168.2.1/30 <-> Core-2 em1 192.168.2.2/30
Core-1 em0 192.168.100.5/30 <-> Core-2 em0 192.168.100.6/30
Core-1 em2 10.10.10.1/30 <-> Core-3 em2 10.10.10.2/30
Core-2 em2 10.10.11.1/30 <-> Core-4 em2 10.10.11.2/30
Core-3 em0 192.168.100.9/30 <-> Core-4 em0 192.168.100.10/30
Core-3 em1 192.168.3.1/30 <-> B-1 em1 192.168.3.2/30
Core-4 em1 192.168.4.1/30 <-> B-2 em1 192.168.4.2/30
B-1 em2 10.10.101.1/24 <-> Linux10 eth0 10.10.101.2/24 to Client VPN100
B-1 em0 192.168.100.13/30 <-> B-2 em0 192.168.100.14/30
Loopbacks
A-1 Lo0.0 172.16.255.1/32
A-2 Lo0.0 172.16.255.2/32
B-1 Lo0.0 172.16.255.3/32
B-2 Lo0.0 172.16.255.4/32
Core-1 Lo0.0 172.16.255.5/32
Core-2 Lo0.0 172.16.255.6/32
Core-3 Lo0.0 172.16.255.7/32
Core-4 Lo0.0 172.16.255.8/32

Так же для маршрутизаторов А-1 и А-2 ипользуется IS-IS, NET = (49.000), для B-1 и B-2 (49.0003) и для всех маршрутизаторов
CoreN (49.0002).
Все маршрутизаторы Core являются так-же BGP рефлекторами, все маршрутизаторы схемы используют для iBGP автономную сиситему 65400, весь пиринг осуществляется использую виртуальные интерфейсы lo0.
Конечно такое количество BGP RR избыточно, но в реальной жизни используется избыточное резервирование как по каналам связи так и по оборудованию, и я планирую настраивать еще много чего, поэтому они мне пригодятся.

Настройка


Хронология такая IS-IS, BGP/MP-BGP, MPLS и LDP, VRF.
IS-IS

Настройка IS-IS в Junos очень простая, у меня все маршрутизаторы Core находятся в Level 2, остальные в Level1/2.
В каждои секции буду приводить пример с одного из маршрутизаторов, все конфиг файлы добавлю как архив и ссылку на него.

Пример настройки IS-IS:

root@A-1> show configuration protocols isis | display set
set protocols isis interface em0.0
set protocols isis interface em1.0 level 1 disable #отключаем ненужные левелы
set protocols isis interface lo0.0 level 1 disable

root@A-1> show configuration interfaces | display set
set interfaces em0 unit 0 description TO_A-2
set interfaces em0 unit 0 family inet address 192.168.100.1/30
set interfaces em0 unit 0 family iso # включаем is-is на интерфейсах
set interfaces em0 unit 0 family mpls
set interfaces em1 unit 0 description TO_CORE1
set interfaces em1 unit 0 family inet address 192.168.1.1/30
set interfaces em1 unit 0 family iso
set interfaces em1 unit 0 family mpls
set interfaces em2 unit 0 description TO_LINUX
set interfaces em2 unit 0 family inet address 10.10.100.1/24
set interfaces lo0 unit 0 family inet address 172.16.255.1/32
set interfaces lo0 unit 0 family iso address 49.0001.1721.6255.1000.00 # прописываем ISO NET, использовал для заполнения адрес lo0.

Так же здесь видна настройка mpls на интерфейсах.
Проверяем соседей:
root@A-1> show isis adjacency
Interface System L State Hold (secs) SNPA
em0.0 A-2 1 Up 22 0:ab:73:7f:a8:0
em0.0 A-2 2 Up 26 0:ab:73:7f:a8:0
em1.0 Core1 2 Up 20 0:ab:48:4b:aa:1
Видно что всё нормально и маршрутизатор связался с Core1 по L2, а c A-2 и по L1 и по L2.
Проверяем таблицу маршрутизации:
root@A-1> show route protocol isis brief

inet.0: 20 destinations, 20 routes (20 active, 0 holddown, 0 hidden)
+ = Active Route, — = Last Active, * = Both

10.10.10.0/30 *[IS-IS/18] 01:13:47, metric 20
> to 192.168.1.2 via em1.0
10.10.11.0/30 *[IS-IS/18] 00:59:41, metric 30
> to 192.168.100.2 via em0.0
to 192.168.1.2 via em1.0
172.16.255.2/32 *[IS-IS/18] 01:14:14, metric 10
> to 192.168.100.2 via em0.0
172.16.255.3/32 *[IS-IS/18] 01:13:47, metric 10
> to 192.168.1.2 via em1.0
172.16.255.4/32 *[IS-IS/18] 00:59:41, metric 20
> to 192.168.100.2 via em0.0
to 192.168.1.2 via em1.0

BGP

Настройки BGP c одного из рефлекторов.(Core1)

root@Core1> show configuration routing-options | display set
set routing-options router-id 172.16.255.3 #router-id для маршрутизатора
set routing-options autonomous-system 65400 #автономная система на маршрутизаторе

root@Core1> show configuration protocols bgp | display set
set protocols bgp family inet-vpn unicast
set protocols bgp group CORE_RRC type internal # указываем что группа iBGP
set protocols bgp group CORE_RRC local-address 172.16.255.3
set protocols bgp group CORE_RRC cluster 172.16.255.3 # определяем кластер
set protocols bgp group CORE_RRC peer-as 65400 # в какой AS располагаются наши соседи
set protocols bgp group CORE_RRC neighbor 172.16.255.1
set protocols bgp group CORE_RRC neighbor 172.16.255.2
set protocols bgp group CORE_RRC neighbor 172.16.255.4
set protocols bgp group CORE_RRC neighbor 172.16.255.5
set protocols bgp group CORE_RRC neighbor 172.16.255.6

Настройки BGP c A-1.

root@A-1> show configuration routing-options | display set
set routing-options router-id 172.16.255.1
set routing-options autonomous-system 65400

root@A-1> show configuration protocols bgp | display set
set protocols bgp family inet-vpn unicast
set protocols bgp group INTERNAL-CLIENT type internal
set protocols bgp group INTERNAL-CLIENT local-address 172.16.255.1
set protocols bgp group INTERNAL-CLIENT peer-as 65400
set protocols bgp group INTERNAL-CLIENT neighbor 172.16.255.2
set protocols bgp group INTERNAL-CLIENT neighbor 172.16.255.3
set protocols bgp group INTERNAL-CLIENT neighbor 172.16.255.4

Проверяем соседей:
root@A-1> show bgp neighbor
Peer: 172.16.255.2+55961 AS 65400 Local: 172.16.255.1+179 AS 65400
Type: Internal State: Established Flags: Last State: OpenConfirm Last Event: RecvKeepAlive
Last Error: None
Options: Address families configured: inet-vpn-unicast
Local Address: 172.16.255.1 Holdtime: 90 Preference: 170
Number of flaps: 0
Peer ID: 172.16.255.2 Local ID: 172.16.255.1 Active Holdtime: 90
Keepalive Interval: 30 Peer index: 0
BFD: disabled, down
NLRI for restart configured on peer: inet-vpn-unicast
NLRI advertised by peer: inet-vpn-unicast
NLRI for this session: inet-vpn-unicast
Peer supports Refresh capability (2)
Stale routes from peer are kept for: 300
Peer does not support Restarter functionality
NLRI that restart is negotiated for: inet-vpn-unicast
NLRI of all end-of-rib markers sent: inet-vpn-unicast
Peer supports 4 byte AS extension (peer-as 65400)
Peer does not support Addpath
Table bgp.l3vpn.0
RIB State: BGP restart is complete
RIB State: VPN restart is complete
Send state: not advertising
Active prefixes: 0
Received prefixes: 0
Accepted prefixes: 0
Suppressed due to damping: 0
Table VPN100.inet.0 Bit: 20000
RIB State: BGP restart is complete
RIB State: VPN restart is complete
Send state: in sync
Active prefixes: 0
Received prefixes: 0
Accepted prefixes: 0
Suppressed due to damping: 0
Advertised prefixes: 1
Last traffic (seconds): Received 18 Sent 10 Checked 51
Input messages: Total 187 Updates 0 Refreshes 0 Octets 3593
Output messages: Total 169 Updates 1 Refreshes 0 Octets 3346
Output Queue[0]: 0
Output Queue[1]: 0

Peer: 172.16.255.3+179 AS 65400 Local: 172.16.255.1+55924 AS 65400
Type: Internal State: Established Flags: Last State: OpenConfirm Last Event: RecvKeepAlive
Last Error: None
Options: Address families configured: inet-vpn-unicast
Local Address: 172.16.255.1 Holdtime: 90 Preference: 170
Number of flaps: 0
Peer ID: 172.16.255.3 Local ID: 172.16.255.1 Active Holdtime: 90
Keepalive Interval: 30 Peer index: 1
BFD: disabled, down
NLRI for restart configured on peer: inet-vpn-unicast
NLRI advertised by peer: inet-vpn-unicast
NLRI for this session: inet-vpn-unicast
Peer supports Refresh capability (2)
Stale routes from peer are kept for: 300
Peer does not support Restarter functionality
NLRI that restart is negotiated for: inet-vpn-unicast
NLRI of received end-of-rib markers: inet-vpn-unicast
NLRI of all end-of-rib markers sent: inet-vpn-unicast
Peer supports 4 byte AS extension (peer-as 65400)
Peer does not support Addpath
Table bgp.l3vpn.0
RIB State: BGP restart is complete
RIB State: VPN restart is complete
Send state: not advertising
Active prefixes: 1
Received prefixes: 1
Accepted prefixes: 1
Suppressed due to damping: 0
Table VPN100.inet.0 Bit: 20000
RIB State: BGP restart is complete
RIB State: VPN restart is complete
Send state: in sync
Active prefixes: 1
Received prefixes: 1
Accepted prefixes: 1
Suppressed due to damping: 0
Advertised prefixes: 1
Last traffic (seconds): Received 6 Sent 17 Checked 52
Input messages: Total 200 Updates 2 Refreshes 0 Octets 3894
Output messages: Total 167 Updates 1 Refreshes 0 Octets 3308
Output Queue[0]: 0
Output Queue[1]: 0
Если вывод показывает ESTABLISHED радуемся, на самом деле очень много полезной информации данная команда выдаёт.

Поверхностный обзор:
root@A-1> show bgp summary
Groups: 1 Peers: 3 Down peers: 0
Table Tot Paths Act Paths Suppressed History Damp State Pending
bgp.l3vpn.0
2 1 0 0 0 0
Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped…
172.16.255.2 65400 196 177 0 0 1:18:35 Establ
bgp.l3vpn.0: 0/0/0/0
172.16.255.3 65400 209 175 0 0 1:18:17 Establ
bgp.l3vpn.0: 1/1/1/0
VPN100.inet.0: 1/1/1/0
172.16.255.4 65400 298 146 0 0 1:04:51 Establ
bgp.l3vpn.0: 0/1/1/0
VPN100.inet.0: 0/1/1/0

Таблица bgp.l3vpn.0 содержит Layer 3 VPN маршруты полученые от BGP и копируются в соответствующий VRF если он есть конечно.

Настройка mpls, ldp


Настраиваем MPLS, и LDP для динамического распространения меток по сети. Можно вместо ldp использовать rsvp, но он нам пока не нужен и слишком избыточен для этой схемы.

root@A-1> show configuration protocols mpls | display set
set protocols mpls interface all # включаем MPLS на всех интерфейсах

root@A-1> show configuration protocols ldp | display set
set protocols ldp keepalive-interval 5
set protocols ldp interface all # включаем LDP на всех интерфейсах

root@A-1> show configuration interfaces | display set | match mpls
set interfaces em0 unit 0 family mpls
set interfaces em1 unit 0 family mpls

Настройка идентична на всех маршрутизаторах
Проверяем ldp:
root@A-1> show ldp session
Address State Connection Hold time
172.16.255.2 Operational Open 26
172.16.255.3 Operational Open 26

root@A-1> show ldp neighbor
Address Interface Label space ID Hold time
192.168.100.2 em0.0 172.16.255.2:0 11
192.168.1.2 em1.0 172.16.255.3:0 13

root@A-1> show ldp interface
Interface Label space ID Nbr count Next hello
em0.0 172.16.255.1:0 1 2
em1.0 172.16.255.1:0 1 1
lo0.0 172.16.255.1:0 0 0

Проверяем mpls:
root@A-1> show route table inet.3

inet.3: 7 destinations, 7 routes (7 active, 0 holddown, 0 hidden)
+ = Active Route, — = Last Active, * = Both

172.16.255.2/32 *[LDP/9] 01:27:08, metric 1
> to 192.168.100.2 via em0.0
172.16.255.3/32 *[LDP/9] 01:26:41, metric 1
> to 192.168.1.2 via em1.0
172.16.255.4/32 *[LDP/9] 01:12:35, metric 1
to 192.168.100.2 via em0.0, Push 299808
> to 192.168.1.2 via em1.0, Push 299808
172.16.255.5/32 *[LDP/9] 01:12:21, metric 1
> to 192.168.1.2 via em1.0, Push 299840
172.16.255.6/32 *[LDP/9] 00:41:42, metric 1
> to 192.168.100.2 via em0.0, Push 299904
to 192.168.1.2 via em1.0, Push 299824
172.16.255.7/32 *[LDP/9] 01:07:04, metric 1
> to 192.168.1.2 via em1.0, Push 299872
172.16.255.8/32 *[LDP/9] 01:07:06, metric 1
to 192.168.100.2 via em0.0, Push 299856
> to 192.168.1.2 via em1.0, Push 299856

root@A-1> show mpls interface
Interface State Administrative groups (x: extended)
em0.0 Up em1.0 Up Таблица inet.3 содержит исходящий адрес MPLS LSP, метку и исходящий интерфейс.

Настраиваем VRF


Маршрутизатор A-1:

set routing-instances VPN100 instance-type vrf
set routing-instances VPN100 interface em2.0
set routing-instances VPN100 route-distinguisher 65400:1
set routing-instances VPN100 vrf-target target:65400:1
set routing-instances VPN100 vrf-table-label

Маршрутизатор B-1:

set routing-instances VPN100 instance-type vrf
set routing-instances VPN100 interface em2.0
set routing-instances VPN100 route-distinguisher 65400:1
set routing-instances VPN100 vrf-target target:65400:1
set routing-instances VPN100 vrf-table-label

Клиентами у меня являются 2 линукс хоста с именами linux и linux10 и адресами из подсетей 10.10.100.0/24 и 10.10.101.0/24 соответственно.

Проверяем маршрутные таблицы VRF:
root@A-1> show route table VPN100.inet.0

VPN100.inet.0: 3 destinations, 4 routes (3 active, 0 holddown, 0 hidden)
+ = Active Route, — = Last Active, * = Both

10.10.100.0/24 *[Direct/0] 01:34:27
> via em2.0
10.10.100.1/32 *[Local/0] 01:34:28
Local via em2.0
10.10.101.0/24 *[BGP/170] 01:13:56, localpref 100, from 172.16.255.3
AS path: I
> to 192.168.1.2 via em1.0, Push 16, Push 299872(top)
[BGP/170] 01:13:56, localpref 100, from 172.16.255.4
AS path: I
> to 192.168.1.2 via em1.0, Push 16, Push 299872(top)

root@B-1> show route table VPN100.inet.0

VPN100.inet.0: 3 destinations, 4 routes (3 active, 0 holddown, 0 hidden)
+ = Active Route, — = Last Active, * = Both

10.10.100.0/24 *[BGP/170] 00:08:02, localpref 100, from 172.16.255.5
AS path: I
> to 192.168.3.1 via em1.0, Push 16, Push 299888(top)
[BGP/170] 00:08:02, localpref 100, from 172.16.255.6
AS path: I
> to 192.168.3.1 via em1.0, Push 16, Push 299888(top)
10.10.101.0/24 *[Direct/0] 02:56:27
> via em2.0
10.10.101.1/32 *[Local/0] 02:56:29
Local via em2.0
Пинг с маршрутизатора:
root@A-1> ping 10.10.101.2 routing-instance VPN100
PING 10.10.101.2 (10.10.101.2): 56 data bytes
64 bytes from 10.10.101.2: icmp_seq=0 ttl=64 time=1.406 ms
64 bytes from 10.10.101.2: icmp_seq=1 ttl=64 time=0.889 ms

теперь проверим непосредственно с клиентов:
root@linux:~# ping 10.10.101.2
PING 10.10.101.2 (10.10.101.2): 56 data bytes
64 bytes from 10.10.101.2: seq=0 ttl=63 time=3.519 ms
64 bytes from 10.10.101.2: seq=1 ttl=63 time=3.135 ms
64 bytes from 10.10.101.2: seq=2 ttl=63 time=2.815 ms

Для проверки резервирования отключаем роутер Core1, впн автоматически перестраивается:

Маршруты в VRF до отключения:
root@A-1> show route table VPN100.inet.0

VPN100.inet.0: 3 destinations, 4 routes (3 active, 0 holddown, 0 hidden)
+ = Active Route, — = Last Active, * = Both

10.10.100.0/24 *[Direct/0] 01:34:27
> via em2.0
10.10.100.1/32 *[Local/0] 01:34:28
Local via em2.0
10.10.101.0/24 *[BGP/170] 01:13:56, localpref 100, from 172.16.255.3
AS path: I
> to 192.168.1.2 via em1.0, Push 16, Push 299872(top)
[BGP/170] 01:13:56, localpref 100, from 172.16.255.4
AS path: I
> to 192.168.1.2 via em1.0, Push 16, Push 299872(top)

Маршруты в VRF после отключения:

root@A-1> show route table VPN100.inet.0

VPN100.inet.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden)
+ = Active Route, — = Last Active, * = Both

10.10.100.0/24 *[Direct/0] 01:39:19
> via em2.0
10.10.100.1/32 *[Local/0] 01:39:20
Local via em2.0
10.10.101.0/24 *[BGP/170] 01:18:48, localpref 100, from 172.16.255.4
AS path: I
> to 192.168.100.2 via em0.0, Push 16, Push 299872(top)

Отсюда видно что всё перестроилось как должно ближайший путь теперь пролегает через A-2.
Запущеный в это время пинг прерывался конечно, но быстро восстановился (на реальном железе все конечно было бы быстрее ):

root@linux:~# ping 10.10.101.2
PING 10.10.101.2 (10.10.101.2): 56 data bytes
64 bytes from 10.10.101.2: seq=0 ttl=63 time=5.071 ms
64 bytes from 10.10.101.2: seq=1 ttl=63 time=3.382 ms
64 bytes from 10.10.101.2: seq=65 ttl=63 time=3.956 ms
64 bytes from 10.10.101.2: seq=66 ttl=63 time=3.691 ms
^C
— 10.10.101.2 ping statistics — 67 packets transmitted, 38 packets received, 43% packet loss
round-trip min/avg/max = 2.501/3.433/5.573 ms
root@linux:~#

Список полезных команд для проверок:


show isis adjacency
show isis route
show isis interface
show bgp summary
show bgp neighbour
show mpls interface
show mpls lsp
show ldp session
show ldp neighbour
show ldp interface
show route protocol [ isis | bgp | ldp | mpls ]
show route table [ VPN100.inet.0 | bgp.l3vpn.0 | inet.0 | inet.3 | iso.0 | mpls.0 ]


Литература и полезные ресурсы:
Официальный сайт Juniper
Официальный сайт GNS3
Ссылка на конф. файлы drive.google.com/folderview?id=0B0vOYkEEGBQeZzVlTGxLVGtZVE0&usp=sharing

PS. Все мнения приветствуются в том числе и по оформлению так как пост первый.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.