IPIP tunnel Juniper MX480 & M7i Routers + static route via IPIP tunnel interface
Появилась тут задача прокинуть между Juniper MX480 и FreeBSD сервером IPIP туннель и пророутить через него подсеть IP-адресов.
Ось: JUNOS Base OS Software Suite [8.5R3.4]
Как водится начал с чтения документации:
- Configuring Tunnel Interfaces on MX-series Routers
- Configuring Layer 3 Tunnel Services Interfaces on MX-series Routers
Но как и в предыдущей статье толи я тупой, толи лыжи не едут, толи они так пишут мануалы 🙁
Расскажу как я решил сию «проблему» идя по своим «шагам», т.к. уверен. что не только я, а и кто-то ещё натолкнется на непонимание мануала и кучу, возникающих по мере чтения, вопросов, которые остаются без ответов.
Сначала возник вопрос: «а где взять необходимый интерфейс в джунике ?».
Читаю Tunnel Services Overview:
ipip
Internally generated IP-over-IP interface. This interface is generated by the JUNOS software to handle IP-over-IP encapsulation. It is not a configurable interface.
Смотрю есть ли у меня на джунипере такой. Да есть, обнаружен интерфейс:
root@juniper> show interfaces ipip
Physical interface: ipip, Enabled, Physical link is Up
Interface index: 11, SNMP ifIndex: 9
Type: IPIP, Link-level type: IP-over-IP, MTU: Unlimited, Speed: Unlimited
Device flags : Present Running
Interface flags: SNMP-Traps
Input packets : 0
Output packets: 0
Но меня очень напрягают слова «It is not a configurable interface«. Смотрю далее:
ip-0/0/0
Configurable IP-over-IP encapsulation (also called IP tunneling) interface. IP tunneling allows the encapsulation of one IP packet over another IP packet.
Вот это уже ближе, хотя бы указано, что он «Configurable«, но что делать если по show interfaces такого интерфейса нет ??? Блин, приплыли….
Решил попробовать все же отконфигурить интерфейс ipip. Конфигурю его так:
root@juniper# show interfaces ipip
unit 0 {
tunnel {
source XX.XX.XX.XX;
destination YY.YY.YY.YY;
}
family inet {
address 10.255.255.5/30;
}
}
Где XX.XX.XX.XX это один из внешних IP-адресов джуника, YY.YY.YY.YY внешний IP-адрес FreeBSD сервера, а 10.255.255.5 IP-адрес на туннеле со стороны джунипера.
Коммитим конфигурацию на джунипере и идем на FreeBSD. Конфигуим её:
ifconfig gif0 create mtu 1480 link2 tunnel YY.YY.YY.YY XX.XX.XX.XX 10.255.255.5 10.255.255.6 netmask 255.255.255.252
С IP-адресами все тоже самое, за исключением того, что ессно они «зеркальные», т.е. идут в другом порядке. 10.255.255.6 IP-адрес на туннеле со стороны FreeBSD.
После этого посмотрим создался ли туннель:
ifconfig gif0
gif0: flags=c051 mtu 1480
tunnel inet YY.YY.YY.YY --> XX.XX.XX.XX
inet 10.255.255.6 --> 10.255.255.5 netmask 0xfffffffc
Пробую попинговать с обеих сторон туннельные адреса (10.255.255.X) и результат успешен, с двух сторон пинг ходит.
«УРА !!! Задача решена и так просто !» — подумал я, но не тут то было…….
Мне же необходимо выполнить вторую часть задачи, а именно пророутить через созданный туннель подсеть IP-адресов.
Делаю это, добавляю мой статический маршут для подсети, которую я хочу роутить через туннель. Прописываю маршрут в секции routing-options static:
route ZZ.ZZ.ZZ.0/29 {
next-hop 10.255.255.6;
retain;
}
коммичу изменения и получаю не совсем ожидаемый результат 🙁
А именно, что с джунипера любой IP-адрес из пророученной подсети пингуется, а вот если пробовать попинговать этот же адрес снаружи, то получаем ответ от джунипера о недоступности сети.
Хм…. что за хрень ? Маршрут для подсети в таблице маршрутизации присутствует и по команде:
root@juniper> show route terse
маршрут виден….. Получается что джунипер отказывается роутить (форвардить) пакеты до этой подсети через себя. Почему ? Потому что ipip «It is not a configurable interface» ?
Лезу в гугл и нахожу похожую проблему: PFE-forwarded IPv6. Не смотря на то, что тут IPv6, а у меня вопрос по IPv4, ответ был найден:
Otherwise the ipip.0 tunnel is only from the RE, which can’t forward transit traffic.
Ну собственно так себя мой джуник и ведет, не форвардит транзитный трафик….
Но я не сдался, лезу снова курить мануалы….. Смотрю в пример «Example: Configuring Unicast Tunnels«:
Configure two unnumbered IP-IP tunnels:
[edit interfaces]
ip-0/3/0 {
unit 0 {
tunnel {
source 192.168.4.18;
destination 192.168.4.253;
}
family inet;
}
unit 1 {
tunnel {
source 192.168.4.18;
destination 192.168.4.254;
}
family inet;
}
}
To configure a numbered tunnel interface, include an address under family inet:
[edit interfaces]
ip-0/3/0 {
unit 0 {
tunnel {
source 192.168.4.18;
destination 192.168.4.253;
}
family inet {
address 10.5.5.1/30;
}
}
unit 1 {
tunnel {
source 192.168.4.18;
destination 192.168.4.254;
}
family inet {
address 10.6.6.100/30;
}
}
}
И снова задаюсь вопросом, а откуда они взяли интерфейс ip-0/3/0 ? Почему у них такой интерфейс есть,а у меня нет ! Ведь написано ж, что в MX-серии это встроено:
The MX-series routers support Dense Port Concentrators (DPCs) with built-in Ethernet ports and therefore do not support Tunnel Services PICs. To create tunnel interfaces on an MX-series router, you configure a DPC and the corresponding Packet Forwarding Engine to use for tunneling services at the [edit chassis] hierarchy level. You also configure the amount of bandwidth reserved for tunnel services. The JUNOS software creates tunnel interfaces on the Packet Forwarding Engine. To create tunnel interfaces on MX-series routers, include the following statements at the [edit chassis] hierarchy level
Так, получается, что я должен взять реальный интерфейс и настроить его для работы с tunneling services. Но стоп, у меня нет свободных интерфейсов, все что есть сейчас работают как Ethernet интерфейсы.
Возникает новый резонный вопрос, а что будет если на отконфигуренном Ethernet интерфейсе добавить настройки и для tunneling services ?
Нашел ответ на этот вопрос вот тут:
The Packet Forwarding Engine of a 10-Gigabit Ethernet 4-port DPC supports either tunnel interfaces or Ethernet interfaces, but not both.
Мда…. опять приплыли… не может интерфейс быть и тунельным и эзернет интерфейсом 🙁
Неужели сделать то что мне надо невозможно если нет свободного физического интерфейса ?
М.б. меня не отпускали слова «встроенный», а м.б. остатки памяти напомнили текст предыдущей статьи, я не знаю, но полез я выполнять команду:
root@juniper> show chassis hardware
...........
FPC 5 REV 08 XXX-XXXXXX KDXXXX DPCE 4x 10GE R
...........
PIC 3 BUILTIN BUILTIN 1x 10GE(LAN/WAN)
Опа ! А это уже кое что. Встроенный интерфейс fpc 5 pic 3.
Такс… Снова возникает вопрос: «А м.б. именно этот интерфейс и поможет нам создать туннельный интерфейс ?»
Ответа на этот вопрос я так и не нашел, ни в мануалах, ни в гугле, но следуя тому что уже прочел в мануалах и банальной логике решил попробовать.
Для начала сношу все настройки с интерфейса ipip, который я конфигурил выше, затем приступаю к действиям по мануалу:
root@juniper# set chassis fpc 5 pic 3 tunnel-services bandwidth 10g
Получил в конфиге:
root@juniper# show chassis
fpc 5 {
pic 3 {
tunnel-services {
bandwidth 10g;
}
}
}
network-services ip;
Так, интерфейс под tunnel services я задал, идем далее.
Попробую создать сам интерфейс:
root@juniper# set interfaces ip-5/3/0 unit 0
Ошибок эта команда не вызвала и интерфейс появился в конфиге. Значит я иду в правильном направлении.
Зададим IP-адреса, по которым и будет строится IPIP туннель:
root@juniper# set interfaces ip-5/3/0 unit 0 tunnel source XX.XX.XX.XX destination YY.YY.YY.YY
Теперь зададим IP-адрес на конце туннеля со стороны джунипера:
root@juniper# set interfaces ip-5/3/0 unit 0 family inet address 10.255.255.5/30
Смотрим что получилось:
root@juniper# show interfaces ip-5/3/0
unit 0 {
tunnel {
source XX.XX.XX.XX;
destination YY.YY.YY.YY;
}
family inet {
address 10.255.255.5/30;
}
}
Выполняем заветную:
root@juniper# commit check
и получаю радостный для меня ответ:
configuration check succeeds
Ну вот вроде и все. Коммитим изменения и смотрим.
Вот теперь все работает как надо и поставленная задача полностью выполнена:
- IPIP туннель между Juniper и FreeBSD создан и работает
- подсеть IP-адресов статически пророучена через туннель
- джунипер форвардит трафик до пророученной статическим маршрутом через IPIP туннель подсети
——
Добавлено 19.04.2011
Потребовалось поднять IPIP туннель, но уже на Juniper M7i .
Ось: JUNOS Base OS Software Suite [9.4R1.8]
Производим почти аналогичные действия:
root@m7i> show chassis hardware
...........
FPC 1 E-FPC
PIC 2 BUILTIN BUILTIN 1x Tunnel
root@m7i# show interfaces ip-1/2/0
unit 0 {
tunnel {
source XX.XX.XX.XX;
destination YY.YY.YY.YY;
}
family inet {
address 10.255.255.5/30;
}
}
После commit все завелось, я даже проверил работу BGP по IPIP туннелю — усё арбайтн.
——
З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА ! Пожалуйста, уважайте чужой труд.
Добавлено 21.07.2011
З.Ы.Ы. Как в последствии выяснилось реальный интефейс все же занимается ( как минимум на MX480) 🙁
Когда я писал статью в том порту, на котором производилась настройка, реального PIC`а (в FPC 5 pic-slot 3) не было, т.е. порт был пуст.
Как выглядел список hardware на MX480 до установки реального PIC`а :
Hardware inventory:
Item Version Part number Serial number Description
......
PIC 3 BUILTIN BUILTIN 1x 10GE(LAN/WAN)
Fan Tray Left Fan Tray
# show chassis fpc pic-status
Slot 5 Online DPCE 4x 10GE R
PIC 0 Online 1x 10GE(LAN/WAN)
PIC 1 Online 1x 10GE(LAN/WAN)
PIC 2 Online 1x 10GE(LAN/WAN)
PIC 3 Online 1x 10GE(LAN/WAN)
#show chassis pic fpc-slot 5 pic-slot 3
FPC slot 5, PIC slot 3 information:
Type 1x 10GE(LAN/WAN)
State Online
PIC version 0.0
Uptime 196 days, 4 hours, 57 minutes, 6 seconds
Именно столько проработал туннель 🙂
При этом на самом PIC`е линка не было, в списке интерфейсов он не значился, горела только лампочка «tunnel». Иными словами вновь вставленный PIC не работал.
Пришлось сносить все изменения связанные с туннелем и после этого вот что стало видно:
#show chassis hardware
Hardware inventory:
Item Version Part number Serial number Description
......
PIC 3 BUILTIN BUILTIN 1x 10GE(LAN/WAN)
Xcvr 0 REV 02 740-014279 T09J61368 XFP-10G-LR
Fan Tray Left Fan Tray
Интерфейс появился в конфигурации, лампочка «tunnel» погасла и появился линк.
Так что имейте это в виду…
Автор: Николаев Дмитрий (virus (at) subnets.ru)