Juniper routing instances
Routing Instance – это совокупность таблиц маршрутизации, интерфейсов и параметров протоколов маршрутизации. Протоколы маршрутизации контролируют информацию в таблицах маршрутизации, причем в одной routing instance могут быть как IPv4, так и IPv6 маршруты одновременно, а так же несколько физических или логических интерфейсов. Один физический интерфейс, разбитый на несколько логических unit-ов (субинтерфейсов), может быть отнесен к разным routing instance (однако один и тот же unit (субинтерфейс) или, не разделенный на unit-ы, физический интерфейс, нельзя прикрепить к разным routing instance).
Routing instance — мощнейший инструмент операционной системы JunOS, позволяющий при совместном использовании c rib-groups, firewall filters и policy выполнить любую задачу. К сожалению, многие инженеры не знают о назначении большинства routing instances, кроме всем до боли знакомой VRF.
JunOS предоставляет нам большой выбор routing instance, доступных для конфигурирования:
routing-instances < routing-instance-name < interface interface-name; instance-type (forwarding | l2vpn | layer2-control | no-forwarding | virtual-router | virtual-switch | vpls | vrf); >>
На момент написания статьи доступны для конфигурирования следующие типы routing instance:
1. VRF,
2. Forwarding,
3. Virtual router,
4. Nonforwarding,
5. VPLS,
6. Layer 2 VPN,
7. Layer2-control (MX Series routers only),
8. Virtual switch (MX Series routers only),
9. Layer 2 Backhaul VPN (MX Series routers only) (о ней я постараюсь написать отдельный пост).
Если кто-то обнаружит какую то какие либо описки или неточности в статье (я тоже человек и могу ошибиться) или у кого-то будут дополнения, прошу писать личные сообщения с ссылками на необходимую информацию.
VRF (Virtual routing and forwarding).
Этот тип routing instance знают почти все. По своему функционалу он подобен аналогичному из мира Cisco и используется для реализации сервисов на базе MPLS (например для L3VPN, 6VPE).
VRF не является каким то отдельным маршрутизатором внутри основного маршрутизатора (или коммутатора). VRF изолирует таблицу маршрутизации и интерфейсы клиента от основной таблицы маршрутизации и интерфейсов маршрутизатора, а так же от таблиц маршрутизации и интерфейсов других клиентов. Конфигурация VRF выглядит следующим образом:
root@PE2# show routing-instances 6pe-2 < instance-type vrf; interface ge-0/0/3.101; route-distinguisher 2001:31133; vrf-target target:200:31133; vrf-table-label; routing-options < router-id 101.101.101.101; >protocols < ospf3 < export isis-ce2-export; area 0.0.0.0 < interface ge-0/0/3.101; >> > >
Функционал данной routing-instance поддерживает все протоколы маршрутизации, статические маршруты, протокол распределения меток ldp (но rsvp — не поддерживается), а так же экспорт и импорт маршрутов (из протоколов маршрутизации основной routing-instance и других VRF, сконфигрурированных на маршрутизаторе).
В конфигурации обязательно надо указать уникальное значение route-distinguisher, значения route-targets (import и export), а так же интерфейс (или интерфейсы) в сторону клиента, относящиеся к данной routing-instance. Использование RT и RD является одними из ключевых понятий в реализации l3vpn (соответственно и других технологий, использующих данную логику, например 6VPE) — именно эти два значения позволяют использовать пересекающуюся адресацию у клиентов (RD) и производить фильтрацию префиксов, получаемых от разных клиентов и последующей инсталяцией их в изолированные таблицы маршрутизации (RT). Данная routing-instance создает свою таблицу маршрутизации, которая имеет наименование instance_name.inet.0 или instance_name.inet6.0:
vrf1.inet.0: 12 destinations, 22 routes (12 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 10.0.0.0/30 *[OSPF/10] 01:59:31, metric 2 > to 10.0.1.1 via ge-0/0/0.0 10.1.1.1/32 *[OSPF/10] 01:59:31, metric 2 > to 10.0.1.1 via ge-0/0/0.0 10.2.2.2/32 *[OSPF/10] 01:59:31, metric 2 > to 10.0.1.1 via ge-0/0/0.0
В таблице маршрутизации клиента есть только маршруты к другим сайтам данного клиента и его внутренние маршруты. То есть для клиента сеть провайдера прозрачна и имеет вид маршрутизатора, к которому подключены все его сайты.
Помимо таблицы маршрутизации клиента, на маршрутизаторе будет создана еще одна таблица маршрутизации bgp.l3vpn.0, в которую устанавливаются все маршруты, полученные маршрутизатором по протоколу bgp (address family inet-vpn unicast), согласно сконфигурированным значениям RT import:
bgp.l3vpn.0: 12 destinations, 9 routes (9 active, 0 holddown, 0 hidden) Prefix Nexthop MED Lclpref AS path 100:100:10.0.0.0/16 * 10.2.2.2 0 100 ? 100:100:10.0.1.1/32 * 10.2.2.2 0 100 ? 200:100:10.0.0.0/16 * 10.3.3.3 0 100 ?
Примечание: в случае, когда необходимо запустить в данном VRF протокол ISIS, то нужно сконфигурировать дополнительный unit логического интерфейса Lo с указанием NET адреса, а так же прикрепить данный логический интерфейс к VRF:
ce2-l3vpn < instance-type vrf; interface ge-0/0/2.0; interface lo0.1; #в VRF добавлен unit 1 интерфейса Lo0 route-distinguisher 10.0.1.0:31133; vrf-target target:10:31133; protocols < isis < export isis-ce2-export; interface ge-0/0/2.0; interface lo0.1; >> >
Примечание: в конфигурации есть команда vrf-table-label. По умолчанию JunOS использует per-next-hop label allocation для маршрутов клиентов. Указанная выше команда переводит режим распределения меток в per-vrf, то есть все маршруты данной vrf будут иметь одну и ту же метку. (Если кому то будет интересно, напишу статью об этом.)
Переходим к следующему типу routing instance — Forwarding.
Как известно, JunOS отпугивает многих новичков длинными и на первый взгляд не понятными конфигурациями, особенно если этот новичок пришел из мира Cisco. К примеру, если в Cisco вам надо сделать policy based routing (PBR), то вы пишите access-list и простенький route-map. В JunOS все сложнее, но поняв подход Juniper, вы поймете на сколько он элегантнее цисковского. Зачем я это пишу? Дело в том, что routing instance Forwarding задумывалась именно для целей PBR (в мире Juniper этот вид маршрутизации носит имя filter based routing). Ниже предствлена конфигурация данной routing instance:
[edit routing-instances] root# show forward < instance-type forwarding; routing-options < static < route 10.0.0.0/24 next-hop 10.0.1.1; >> >
Все просто — ни каких RT, RD. Эта routing instance не поддерживает указание интерфейса и конфигурирование протокола маршрутизации*. Дело в том, что для работы FBR этого и не надо. Мы делаем статический маршрут с нужным нам next-hop, а на интерфейс, с которого пакеты будут прилетать на маршрутизатор, мы вешаем filter, который в случае совпадения, к примеру, исходящего адреса, будет отправлять трафик через сконфигурированную routing instance по статическому маршруту, в противном случае пакет «полетит» согласно основной таблицы маршрутизации.
Есть одно но, что бы routing instance могла отправить пакет на нужный next-hop, нам надо что бы у нее был маршрут к этому next-hop. Для этого нам надо перенести маршруты из таблицы маршрутизации inet.0 в таблицу маршрутизации сконфигурированной routing instance (которая будет иметь название instance_name.inet.0), причем не все маршруты а только необходимые (не забываем и про directly connected). Делается это с помощью rib groups, описание можно почитать тут тут.
Данная routing instance создает свою таблицу маршрутизации, манипулируя содержанием которой, мы можем направить трафик по маршруту, отличному от основного.
* JunOS позволит вам сконфигурировать например ospf или isis в данном типе routing instance (BGP — не поддерживается), но так как у вас нет интерфейсов, закрепленных за routing instance, использование протокола маршрутизации будет бессмысленно, а добавить маршруты из основной таблицы можно через rib-groups без использования отдельного протокола маршрутизации.
Virtual router.
Функционал routing instance virtual router сходен с vrf-lite из мира Cisco. Данная routing instance позволяет запускать любые протоколы маршрутизации от rip до bgp, создавать GRE и ipsec тоннели, реализовывать функционал nat и dhcp, а так же поддерживает протокол LDP (однако RSVP не поддерживается). Основной задачей данной routing instance является изоляция интерфейса (интерфейсов) клиента и его таблицы маршрутизации. Ближайшим родственником virtual-router можно назвать routing instance no-forwarding (будет описан ниже), их функционал несколько схож. Но, рассматриваемый нами тип routing instance устанавливает маршруты в отдельную таблицу маршрутизации, которая имеет наименование instance_name.inet.0 (instance_name.inet6.0):
r6.inet.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 60.0.0.0/30 *[Direct/0] 00:11:18 > via ge-0/0/2.0 60.0.0.1/32 *[Local/0] 00:11:18 Local via ge-0/0/2.0 60.1.1.1/32 *[OSPF/10] 00:11:04, metric 2 > to 60.0.0.2 via ge-0/0/2.0 224.0.0.5/32 *[OSPF/10] 00:11:19, metric 1 MultiRecv
Клиенту отдаются только маршруты, которые есть в данной routing-instance. С помощью rib groups можно произвести перераспределение маршрутов из основной таблицы маршрутизации в таблицу маршрутизации клиента или перераспределить маршруты между virtual routers, которые «живут» на маршрутизаторе.
Данный тип routing instance используется довольно таки часто. Если его сравнивать с VRF, то данная routing instance избавлена от необходимости конфигурирования RT и RD. Пример конфигурации данной routing-instance представлен ниже:
r6 < instance-type virtual-router; interface ge-0/0/2.0; >protocols < ospf < export export-200; area 0.0.0.0 < interface all; >> >
Следующий тип routing instance – No-forwarding.
Данный тип routing instance, в отличии от трех предыдущих, хоть и создает свою таблицу маршрутизации, но все маршруты инсталирует в основную default forwarding table.
Отличие fib от rib состоит в том, что в rib попадают все маршруты например протокола ospf (например к одному и тому же префиксу есть два маршрута — оба и будут отображены в rib), но только лучший из этих маршрутов попадет в fib и будет использоваться для передачи трафика (исключения, например ECMP). Так же rib предназначена для хранения и обмена маршрутной информацией между пирами в сети и для пересылки трафика она не удобна. Fib же как раз и предназначена для быстрого поиска необходимых для пересылки трафика данных и дает возможность реализовать аппаратную обработку трафика.
Данную routing instance применяют когда необходимо произвести сегментацию сети на третьем уровне (подобно VLAN). Конфигурация представлена ниже:
[edit routing-instances] root# show noforward < instance-type no-forwarding; interface ge-0/0/3.0; routing-options < auto-export; >protocols < ospf < export export-100; area 0.0.0.0 < interface ge-0/0/3.0; >> > >
Примечание: auto-export обязательно должно быть сконфигурировано в основной routing instance и routing instance no-forwarding, иначе ожидаемого результата вы не получите.
Разберем как работает данная routing instance. Мы имеем несколько сконфигурированных routing instance:
root> show route instance summary Instance Type Primary RIB Active/holddown/hidden master forwarding inet.0 19/0/0 __juniper_private1__ forwarding __juniper_private1__.inet.0 7/0/0 __juniper_private2__ forwarding __juniper_private2__.inet.0 0/0/1 __master.anon__ forwarding forward forwarding forward.inet.0 7/0/0 no-frw non-forwarding no-frw.inet.0 16/0/0 virtual-router virtual-router virtual-router.inet.0 14/0/0
Из вывода следует, что у нас три сконфигурированных и одна default routing instance ( private routing instance мы не рассматриваем):
1.virtual-router с типом virtual-router (соответствует таблица маршрутизации virtual-router.inet.0)
2.forward с типом forwarding (соответствует таблица маршрутизации forward.inet.0)
3.default (соответствует таблица маршрутизации inet.0)
4.no-frw с типом non-forwarding (соответствует таблица маршрутизации no-frw.inet.0)
Пока все как обычно — у каждой routing instance есть своя таблица маршрутизации.
Теперь посмотрим как обстоят дела с forwarding-table на маршрутизаторе:
root> show route forwarding-table | match table Routing table: default.inet Routing table: __master.anon__.inet Routing table: forward.inet Routing table: virtual-router.inet Routing table: default.iso Routing table: __master.anon__.iso Routing table: forward.iso Routing table: virtual-router.iso Routing table: default.inet6 Routing table: __master.anon__.inet6 Routing table: forward.inet6 Routing table: virtual-router.inet6 Routing table: default.mpls Routing table: :mpls-oam.mpls Routing table: default.ethernet-switching Routing table: default.vmembers Routing table: default.device-route Routing table: default.MSTI Routing table: default.dhcp-snooping
Созданы только forwarding-table для:
1.virtual-router.inet.0
2.forward.inet.0
3.default.inet.0
forwarding-table для no-frw.inet.0 не существует, потому то routing instance no-forwarding инсталирует свои маршруты в forwarding-table default (точнее сказать, помимо своей таблицы маршрутизации, routing instance no-forwarding экспортирует свои маршруты в defaul inet.0, откуда они и попадают в defaul fib).
Тогда возникает вопрос – а зачем нам эта routing instance? В отличии от Cisco, на оборудовании Juniper нельзя запустить две копии одного и того же протокола маршрутизации в одной и той же instance. То есть, если в Cisco мы можем запустить процесс ospf 1 и процесс ospf 2 одновременно, то в JunOS на уровне иерархии [edit protocols], нет возможности запустить две копии одного и того же процесса, например OSPF (не путайте с area, их как раз таки может быть несколько). Данная routing instance предназначена как раз для запуска нескольких копий одного протокола маршрутизации.
Функционал данной routing instance поддерживает все протоколы маршрутизации, за исключение BGP. Не поддерживаются и протоколы распределения меток ldp или rsvp.
Для полноты картины рассмотрим такую схему (взял с сайта Juniper):
Итак, предположим, что мы хотим, что бы CE2 мог общаться только с CE3, и, соответственно, CE1 мог общаться только с CE4. Тут то мы и воспользуемся routing instance no-forwarding.
Мы создаем на PE0 и PE2 две routing instance (1 и 2) с типом no-forwarding, указываем в них необходимый интерфейс и запускаем ospf.
Создаем политики, согласно которых, процесс ospf routing instance 1, получая маршруты от CE1, добавляет к этим маршрутам тег 100 и экспортирует в default rib inet.0, а процесс ospf routing instance 2 добавляет к полученным от CE2 маршрутам тег 200 и экспортирует в default rib inet.0.
То есть мы получили в inet.0 все маршруты от CE1 и CE2, причем мы четко можем разделить, какие маршруты пришли от CE1, а какие от CE2.
Далее, эти маршруты передаются на PE2 вместе с тегами. С помощью политики, на PE2 в routing instance 1 мы указываем, что надо экспортировать на CE3 только маршруты с тегом 200, и, соответственно, на CE4 только маршруты с тегом 100. В итоге мы получили практически VLAN на третьем уровне.
Как мы и хотели, обмен трафиком возможен между CE1 и CE4, и соответственно между CE2 и CE3; Почему между CE1 и CE3 обмен трафиком невозможен? По простой причине – у CE1 нет маршрута до CE2 или CE3. Аналогичная картина будет и на остальных маршрутизаторах данной топологии.
На первый взгляд рассмотренная routing instance очень похожа на virtual-router. Но надеюсь что теперь вы понимаете, что она предназначена для иных целей и имеет меньший функционал.
Принцип работы технологии VPLS не входит в текст данной статьи, но будет частично затронут в ходе пояснений (иначе ничего не объяснить).
Нам нужно реализовать Virtual Private LAN Service, мы создаем данную routing instance. По сути повторяет функционально VRF (особенно при использовании BGP сигнализации), но предназначена для реализации L2 сервисов. Данный тип routing instance позволяет автоматически создавать полносвязную топологию из виртуальных l2 соединений между сайтам клиента. Эта routing instance, в связи с отсутствием необходимости запуска протоколов маршрутизации и распределения меток, их конфигурирование не поддерживает. Так как данная routing instance работает с l2 а не IP адресами, то forwarding table хранит mac адреса:
Routing table: vpls_bgp_signalig.vpls VPLS: Destination Type RtRef Next hop Type Index NhRef Netif default perm 0 rjct 587 1 ge-0/0/3.0 user 0 comp 580 2 lsi.1048577 user 0 comp 581 2 ca:04:76:68:00:1c/48 dynm 0 ucst 577 3 ge-0/0/3.0 ca:05:79:f4:00:1c/48 dynm 0 indr 262142 5 10.0.0.2 Push 262146, Push 17(top) 572 2 ge-0/0/0.0 ca:08:5f:e4:00:1c/48 dynm 0 indr 262142 5 10.0.0.2 Push 262146, Push 17(top) 572 2 ge-0/0/0.0
Ниже представлена таблица маршрутизации одного из клиентов (BGP signaling):
customer1.site1.l2vpn.0: 3 destinations, 3 routes (3 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 10.0.1.1:100:1:1/96 *[L2VPN/170/-101] 04:00:26, metric2 1 Indirect 10.0.1.2:100:2:1/96 *[BGP/170] 00:04:23, localpref 100, from 1.1.1.254 AS path: I > to 20.0.0.2 via ge-0/0/1.0 10.0.1.3:100:3:1/96 *[BGP/170] 00:04:54, localpref 100, from 1.1.1.254 AS path: I > to 20.0.2.2 via ge-0/0/0.0, Push 299808 to 20.0.1.2 via ge-0/0/2.0, Push 299808
10.0.1.1:100:1:1/96 — этот префикс обозначает сайт клиента и состоит из:
1. 10.0.1.1:100 — RD
2. 1 — site-id
3. 1 — label block offcet (сдвиг блока меток, если кому интересно, могу написать отдельную статью об операциях с метками при организации VPLS)
Помимо представленной выше таблицы маршрутизации, в JunOS будет еще одна таблица маршрутизации bgp.l2vpn.0, в которой будут отображены все l2vpn маршруты данного PE маршрутизатора (при использовании bgp как сигнализацию):
bgp.l2vpn.0: 4 destinations, 4 routes (4 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 30.0.1.1:100:102:97/96 *[BGP/170] 00:04:55, localpref 100, from 1.1.1.254 AS path: I > to 20.0.2.2 via ge-0/0/0.0, Push 299808 to 20.0.1.2 via ge-0/0/2.0, Push 299808 10.0.1.2:100:2:1/96 *[BGP/170] 00:04:23, localpref 100, from 1.1.1.254 AS path: I > to 20.0.0.2 via ge-0/0/1.0
Конфигурация данной routing instance зависит от того, какая сигнализация используется для организации VPLS – BGP (драфт Компелла) или LDP (Мартини). В зависимости от вашего выбора конфигурация будет меняться.
Если мы реализуем VPLS согласно драфту Компелла (BGP signaling), то конфигурация будет выглядеть вот так:
routing-instances < customer1.site1 < instance-type vpls; interface ge-0/0/3.0; route-distinguisher 10.0.1.1:100; vrf-target target:10.0.1.0:100; protocols < vpls < no-tunnel-services; site site1 < site-range 10; site-identifier 1; interface ge-0/0/3.0; >> > >
Так как драфт Компелла включает autodiscovery PE маршрутизаторов, то в конфигурации необходимо помимо интерфейса, указать RT и RD. Как я показал раннее, RD используется для поиска и идентификации PE маршрутизаторов, к которым подключены сайты клиента. На уровне иерархии [edit routing-instance protocols vpls] необходимо указать название сайта, его site-identifier (это JunOS может задавать автоматически, если это указать в конфигурации) и максимальное количество сайтов (site-range) клиента, причем site-identifier должен быть меньше, чем site-range.
Если мы используем LDP-сигнализацию (Мартини), то конфигурация будет немного проще:
ce3-vpls-ldp < instance-type vpls; interface ge-0/0/3.0; protocols < vpls < no-tunnel-services; vpls-id 101; neighbor 1.1.1.1; neighbor 2.2.2.2; >> >
Данная технология VPLS не поддерживает autodiscovery без дополнительного «костыля»*, поэтому в базовой конфигурации указывается только интерфейс, к которому подключен клиент, нет ни RT, ни RD. На уровне иерархии [edit routing-instance protocols vpls] необходимо указать лупбеки всех PE маршрутизаторов, к которым подключены сайты клиента, а так же VPLS-ID, который должен совпадать для все VPLS routing instance данного клиента.
* для использования autodiscovery в данном случае необходимо использовать BGP, используя address family bgp l2vpn auto-discovery-only. При этом явно указывать соседей на PE маршрутизаторах не надо, но тогда необходимо сконфигурировать RT, RD а так же l2vpn-id:
vpls100 < instance-type vpls; interface ge-1/1/0.100; l2vpn-id l2vpn-id:100:200; vrf-target target:100:208; protocols < vpls < no-tunnel-services; >> >
Проверить состояние соединений, которые данная routing instance установила можно командой show vpls connections:
[edit] root# run show vpls connections Layer-2 VPN connections: Legend for connection status (St) EI -- encapsulation invalid NC -- interface encapsulation not CCC/TCC/VPLS EM -- encapsulation mismatch WE -- interface and instance encaps not same VC-Dn -- Virtual circuit down NP -- interface hardware not present CM -- control-word mismatch -> -- only outbound connection is up CN -- circuit not provisioned
С точки зрения клиента данная технология будет иметь вид коммутатора, к которому подключены сайты клиента.
Layer 2 VPN
В Junos есть (во всяком случае я знаю) три способа создать l2vpn (в отличии от VPLS, l2vpn имеет топологию p2p). Данная routing-instance близка по конфигурации и сигнализации к VPLS BGP signaling. Конфигурация предусматривает указание rd и rt для поиска PE-маршрутизаторов и последующего установления p2p соединения:
root# show instance-type l2vpn; interface ge-0/0/3.0; route-distinguisher 100:100; vrf-target target:1:1; protocols < l2vpn < encapsulation-type ethernet-vlan; no-control-word; site site2 < site-identifier 2; interface ge-0/0/3.0 < remote-site-id 1; >> > >
Как и ее старший брат routing-instance vpls, данная routing-instance, в силу своего назначения, не подразумевает настройки протоколов маршрутизации.
Плюсом данной routing-instance является простота настройки и, в отличии от других типов l2vpn, обладает лучшей масштабируемостью (при необходимости легко добавляются другие сайты). В отличии от VPLS, routing-instance l2vpn не поддерживает кроссплатформенное взаимодействие (например между Juniper и Cisco).
Данная routing-instance не дает возможности создать VPLS, хотя дает возможность сконфигурировать более одного виртуального L2 соединения (но это не будет полноценным VPLS).
Таблица маршрутизации выглядит практически так же как и VPLS:
root@PE1> show route table vpn.l2vpn.0 vpn1.l2vpn.0: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 100:100:1:1/96 *[BGP/170] 00:14:00, localpref 100, from 10.1.1.1 AS path: I > to 10.0.0.2 via ge-0/0/3.0, label-switched-path pe1_to_pe2 200:200:1:2/96 *[L2VPN/170/-101] 00:17:35, metric2 1 Indirect
Проверить состояния соединений можно с помощью команды show l2vpn connections, причем вывод будет подобен выводу show vpls connections (routing-instance VPLS).
Layer2-control
Данная routing-instance предназначена для запуска протокола семейства STP при использовании VPLS Multihoming. Ее применение очень хорошо описано в этой статье, поэтому не буду повторяться.
Virtual switch
Помимо маршрутизации, маршрутизаторы серии MX могут выполнять и функции, присущие исключительно коммутатору. Изначально, при конфигурировании VLAN и trunk портов на маршрутизаторе MX-серии, все VLAN и trunk интерфейсы попадают в одни bridge domian, который называется default-switch routing-instance. Маршрутизаторы MX серии предоставляют возможность сконфигурировать пользовательские routing-instance virtual-switch:
[edit] routing-instances < routing-instance-name ( instance-type virtual-switch; bridge-domains < bridge-domain-name < domain-type bridge; interface interface-name; vlan-id (all | none | number); vlan-id-list [ vlan-id-numbers ]; vlan-tags outer number inner number; >> protocols < mstp < . mstp-configuration . >> > >
Данная routing-instance позволяет реализовать на маршрутизаторе функционал коммутатора и производит изолирование интерфейсов и одного или более VLAN. То есть virtual switch позволяет производить сегментацию сетей на втором уровне, не прибегая к сегментированию сети на третьем уровне (что сохранит нам IP адреса). Для каждого сегмента можно запустить свой протокол из семейства STP. Маршрутизаторы серии MX поддерживают протоколы: STP, RSTP, MSTP, VSTP.
Спасибо за внимание!
instance-type
We strongly recommend that if you change an instance-type referenced under a firewall filter, for example, from virtual-router to forwarding , make the change during a maintenance window, as follows:
- Deactivate the routing instance.
- Change the instance-type .
- Activate the routing instance.
This is not required if you are configuring the instance-type for the first time.
Options
type —Can be one of the following:
-
evpn —Enable an Ethernet VPN (EVPN) on the routing instance.
-
On Junos OS Evolved, instance-type evpn is not supported. You can configure an EVPN routing instance using instance-type mac-vrf with a routing protocol configuration of protocols evpn .
set routing-instances $EVPN_INSTANCES$ instance-type mac-vrf protocols evpn
- Deactivate the virtual-switch instance configuration.
- Add the EVPN protocol statements to the virtual-switch instance configuration.
- Reactivate the updated virtual-switch instance configuration with the EVPN protocol updates.
-
On Junos OS Evolved, instance-type vpls is not supported. You can configure a VPLS routing instance using instance-type virtual-switch with a routing protocol configuration of protocols vpls .
set routing-instances $VPLS_INSTANCE$ instance-type virtual-switch protocols vpls
Required Privilege Level
routing—To view this statement in the configuration.
routing-control—To add this statement to the configuration.
Release Information
Statement introduced before Junos OS Release 7.4.
virtual-switch and layer2-control options introduced in Junos OS Release 8.4.
mpls-internet-multicast option introduced in Junos OS Release 11.1 for the EX Series, M Series, MX Series, and T Series.
evpn option introduced in Junos OS Release 13.2 for MX 3D Series routers.
evpn option introduced in Junos OS Release 17.3 for the QFX Series.
forwarding option introduced in Junos OS Release 14.2 for the PTX Series.
mpls-forwarding option introduced in Junos OS Release 16.1 for the MX Series.
evpn-vpws option introduced in Junos OS Release 17.1 for MX Series routers.
mac-vrf option introduced in Junos OS Release 20.4 and Junos OS Evolved Release 21.2R1.
Support for logical systems on MX Series routers added in Junos OS Release 17.4R1.
evpn-vpws option introduced in cRPD Release 20.3R1.
JUNOS
Juniper Networks JUNOS - операционная система, под управлением которой работает сетевое оборудование фирмы Juniper Networks. JUNOS основана на операционной системе UNIX FreeBSD.
[править] Control Plane и Forwarding Plane
Важный аспект работы JUNOS - это логическое и физическое разделение Control Plane и Forwarding (Data) Plane.
RE (Routing Engine) выполняется на процессоре архитектуры x86 или PowerPC. PFE (Packet Forwarding Engine) выполняется на специальных микросхемах ASIC (Application-Specific Integrated Circuit). Это сделано для увеличения производительности - транзитные пакеты передаются без вмешательства RE (соответственно и процессора). RE используется для построения RT (Routing Table) и FT (Forwarding Table). FT после ее построения записывается в память PFE и выполняется на ASIC. FT представляет собой таблицу, содержащую сеть назначения, интерфейс, через который может быть достигнута эта сеть, IP адрес next-hop'a и mac адрес next-hop'a. Так же на PFE для увеличения производительности и скорости обработки транзитных пакетов выполняется QoS, Policer (Shaping) и Stateless Firewall Filter(ACLs).
[править] Иерархическая структура интерфейса командной строки JUNOS
Работа с командной строкой в JUNOS разделяется на 2 режима:
- Operational Mode (приглашение командной строки ">") - тут нам доступны show команды и команды для мониторинга и траблшутинга сети (monitor, ping, test, traceroute);
- Configuration Mode (приглашение командной строки "#") - режим, в котором происходит настройка устройства. В этот режим можно попасть, если набрать команду "Configure" или "Edit" в Operational Mode.
[править] Operational Mode
Команды, которые нам доступны в Operational Mode:
root> ? Possible completions: clear Clear information in the system configure Manipulate software configuration information file Perform file operations help Provide help information monitor Show real-time debugging information mtrace Trace multicast path from source to receiver op Invoke an operation script ping Ping remote target quit Exit the management session request Make system-level requests restart Restart software process set Set CLI properties, date/time, craft interface message show Show system information ssh Start secure shell on another host start Start shell telnet Telnet to another host test Perform diagnostic debugging traceroute Trace route to remote host
[править] Configuration Mode
В JUNOS используется 2 конфигурации:
- Active Configuration - это текущая конфигурация устройства.
- Candidate Configuration - это конфигурация, которую мы правим в режиме конфигурирования.
Для того, чтобы конфигурация-кандидат стала активной, в режиме конфигурирования нужно ввести команду "Commit":
root> configure Entering configuration mode [edit] root# set system root-authentication plain-text-password New password: Retype new password: [edit] root# commit commit complete [edit] root# exit Exiting configuration mode root>
Чтобы зайти в определенный контекст для настройки используется команда "Edit":
Доступные контексты для редактирования:
root> configure Entering configuration mode [edit] root# edit ? Possible completions: > access Network access configuration > access-profile Access profile for this instance > accounting-options Accounting data configuration > applications Define applications by protocol characteristics > chassis Chassis configuration > class-of-service Class-of-service configuration > diameter Diameter protocol layer > event-options Event processing configuration > firewall Define a firewall configuration > forwarding-options Configure options to control packet forwarding > groups Configuration groups > interfaces Interface configuration > jsrc JSRC partition configuration > jsrc-partition JSRC partition configuration > logical-systems Logical systems > multi-chassis > policy-options Policy option configuration > protocols Routing protocol configuration > routing-instances Routing instance configuration > routing-options Protocol-independent routing option configuration > security Security configuration > services Service PIC applications settings > snmp Simple Network Management Protocol configuration > system System parameters > virtual-chassis Virtual chassis configuration [edit]
[править] Настройка интерфейсов
Для того, чтобы настроить интерфейс нужно перейти в контекст "Interfaces":
root> configure Entering configuration mode [edit] root# edit interfaces [edit interfaces] root#
Иерархия настройки интерфейсов:
[править] L3 настройки интерфейса
Важный момент - все L3 параметры интерфейса настраиваются в контексте "UNIT". UNIT - это аналог сабинтерфейсов в Cisco.
[edit interfaces] root# set em0 unit 0 family inet address 100.0.0.1/30
Em0 - Это наш физический интерфейс. Family inet - параметры какого протокола мы хотим настроить. Доступны следующие значения:
root# set em0 unit 0 family ? Possible completions: > ccc Circuit cross-connect parameters > inet IPv4 parameters > inet6 IPv6 protocol parameters > iso OSI ISO protocol parameters > mpls MPLS protocol parameters > tcc Translational cross-connect parameters > vpls Virtual private LAN service parameters [edit interfaces] root# set em0 unit 0 family
Можно сразу из Configuration Mode посмотреть, что мы настроили набрав команду "show":
[edit interfaces] root# show em0 < unit 0 < family inet < address 100.0.0.1/30; >> > [edit interfaces]
Применим наши настройки командой "Commit":
root# commit commit complete
Проверим доступность IP на другой стороне канала:
root> ping 100.0.0.2 rapid PING 100.0.0.2 (100.0.0.2): 56 data bytes . --- 100.0.0.2 ping statistics --- 5 packets transmitted, 5 packets received, 0% packet loss round-trip min/avg/max/stddev = 0.402/0.719/1.306/0.343 ms
[править] L2 настройки интерфейса
L2 настройки задаются в следующем контексте:
root> configure Entering configuration mode [edit] root# edit interfaces em0 [edit interfaces em0] root# set ? Possible completions: accounting-profile Accounting profile name + apply-groups Groups from which to inherit configuration data + apply-groups-except Don't inherit configuration data from these groups description Text description of interface disable Disable this interface encapsulation Physical link-layer encapsulation gratuitous-arp-reply Enable gratuitous ARP reply > hold-time Hold time for link up and link down > layer2-policer Layer2 policing for interface link-mode Link operational mode mac Hardware MAC address mtu Maximum transmit packet size (256..9192) no-gratuitous-arp-reply Don't enable gratuitous ARP reply no-gratuitous-arp-request Ignore gratuitous ARP request no-traps Don't enable SNMP notifications on state changes > traceoptions Interface trace options traps Enable SNMP notifications on state changes > unit Logical interface vlan-tagging 802.1q VLAN tagging support [edit interfaces em0]
Задать дуплекс на интерфейсе:
[edit interfaces em0] root# set link-mode full-duplex [edit interfaces em0] root#
Посмотреть состояние интерфейсов и назначенные IP адреса (аналог sh ip int bri в Cisco):
root> show interfaces terse Interface Admin Link Proto Local Remote cbp0 up up demux0 up up dsc up up em0 up up em0.0 up up inet 100.0.0.1/30 em1 up up gre up up ipip up up irb up up lo0 up up lo0.16384 up up inet 127.0.0.1 --> 0/0 lo0.16385 up up inet 128.0.0.4 --> 0/0 inet6 fe80::2ab:ae0f:fc99:e300 lsi up up mtun up up pimd up up pime up up pip0 up up pp0 up up tap up up
[править] Именования интерфейсов в JUNOS
В JUNOS используется следующая схема именования интерфейсов:
- GE - Тип интерфейса. В данном случае Gigabit Ethernet.
- 0 - это Flexible PIC Concentrator (FPC). Номер физического слота на нашем шасси.
- 0 - это Physical Interface Card (PIC). Номер карты, вставленной в слот.
- 1 - это номер порта на карте PIC.
[править] Таблица маршрутизации в JUNOS
В JUNOS можно создавать несколько таблиц маршрутизации. Главная таблица называется inet.0 и содержит ipv4 юникаст маршруты. По-умолчанию созданы следующие таблицы:
- inet.0 - используется для ipv4 юникаст маршрутов;
- inet.1 - используется для мультикаста;
- inet.2 - используется для Multicast Border Gateway Protocol (MBGP) с проверкой RPF (Reverse Path Forwarding);
- inet.3 - используется для MPLS маршрутов;
- inet.4 - используется для Multicast Source Discovery Protocol (MSDP) маршрутов;
- inet6.0 - используется для ipv6 юникаст маршрутов;
- mpls.0 - используется для mpls next hops.
Как читать вывод команды "show route":
[править] Forwarding Table
Forwarding Table - таблица для быстрой пересылки пакетов. Строится на основе таблицы маршрутизации. Очень похожа на технологию CEF в Cisco.
Посмотреть, что в ней находится можно командой "show route forwarding-table":
root@jun-1> show route forwarding-table Routing table: default.inet Internet: Destination Type RtRef Next hop Type Index NhRef Netif default perm 0 rjct 36 1 0.0.0.0/32 perm 0 dscd 34 1 100.0.0.0/30 intf 0 rslv 546 1 em0.0 100.0.0.0/32 dest 0 100.0.0.0 recv 544 1 em0.0 100.0.0.1/32 intf 0 100.0.0.1 locl 545 2 100.0.0.1/32 dest 0 100.0.0.1 locl 545 2 100.0.0.2/32 dest 0 0:ab:44:8:f8:0 ucst 547 1 em0.0 100.0.0.3/32 dest 0 100.0.0.3 bcst 543 1 em0.0 224.0.0.0/4 perm 0 mdsc 35 1 224.0.0.1/32 perm 0 224.0.0.1 mcst 31 1 255.255.255.255/32 perm 0 bcst 32 1
[править] Route Preference
Route Preference - это аналог Administrative Distance (AD) в Cisco IOS.
Протокол | Приоритет по умолчанию |
---|---|
Directly connected network | 0 |
Local | 0 |
Static Route | 5 |
OSPF internal route | 10 |
RIP | 100 |
OSPF AS external routes | 150 |
eBGP и iBGP | 170 |
[править] Настройка OSPF в JUNOS
Основная страница: OSPF_в_Juniper
[править] Настройка BGP в JUNOS
Основная страница: BGP_в_Juniper
[править] Пакетная фильтрация (Stateless Firewall Filter) в JUNOS
Блоки, из которых строятся правила фильтрации:
В "From" можно указывать следующие значения и их связки:
root# set term block-some-packets from ? Possible completions: > address Match IP source or destination address + apply-groups Groups from which to inherit configuration data + apply-groups-except Don't inherit configuration data from these groups > destination-address Match IP destination address + destination-port Match TCP/UDP destination port + destination-port-except Do not match TCP/UDP destination port > destination-prefix-list Match IP destination prefixes in named list + dscp Match Differentiated Services (DiffServ) code point + dscp-except Do not match Differentiated Services (DiffServ) code point + esp-spi Match IPSec ESP SPI value + esp-spi-except Do not match IPSec ESP SPI value first-fragment Match if packet is the first fragment + forwarding-class Match forwarding class + forwarding-class-except Do not match forwarding class fragment-flags Match fragment flags (in symbolic or hex formats) - (Ingress only) + fragment-offset Match fragment offset + fragment-offset-except Do not match fragment offset + icmp-code Match ICMP message code + icmp-code-except Do not match ICMP message code + icmp-type Match ICMP message type + icmp-type-except Do not match ICMP message type > interface Match interface name + interface-group Match interface group + interface-group-except Do not match interface group > interface-set Match interface in set + ip-options Match IP options + ip-options-except Do not match IP options is-fragment Match if packet is a fragment + packet-length Match packet length + packet-length-except Do not match packet length + port Match TCP/UDP source or destination port + port-except Do not match TCP/UDP source or destination port + precedence Match IP precedence value + precedence-except Do not match IP precedence value > prefix-list Match IP source or destination prefixes in named list + protocol Match IP protocol type + protocol-except Do not match IP protocol type service-filter-hit Match if service-filter-hit is set > source-address Match IP source address + source-port Match TCP/UDP source port + source-port-except Do not match TCP/UDP source port > source-prefix-list Match IP source prefixes in named list tcp-established Match packet of an established TCP connection tcp-flags Match TCP flags (in symbolic or hex formats) tcp-initial Match initial packet of a TCP connection + ttl Match IP ttl type + ttl-except Do not match IP ttl type [edit firewall family inet filter filter-in]
В "Then" можно указывать следующие значения:
- Accept - разрешить прохождение пакета;
- Discard - запретить прохождение пакета;
- Reject - запретить прохождение пакета с отправкой ICMP сообщения "Destination unreachable" отправителю.
Настройка выглядит следующим образом:
[edit firewall family inet] root# show filter filter-in < term block-some-packets < from < source-address < 100.0.0.0/24; >destination-address < 200.0.0.0/24; >> then < discard; >> term accept-all-other < then accept; >> [edit firewall family inet] root#
Теперь применяем фильтр на интерфейс:
root# set interfaces em0 unit 0 family inet filter input filter-in [edit] root# edit interfaces em0 [edit interfaces em0] root# show unit 0 < family inet < filter < input filter-in; >> > [edit interfaces em0] root#
Не забудьте правильно выбрать направление для фильтра:
[править] Настройка коммутаторов под управлением JUNOS
Настройка порта в режим access:
Настройка порта в режим trunk:
Настройка native vlan на trunk порту:
Настройка Routed Vlan Interface (RVI) - в Cisco IOS это называется Swiched Vlan Interface (SVI):
Ассоциация RVI и VLAN:
[править] Настройка VLAN
Основная страница: VLAN_в_Juniper
[править] Дополнительная информация
На сайте Juniper Networks есть курс на русском языке "JUNOS как второй язык", рассказывающий о сравнении языка командной строки Cisco IOS и Juniper JUNOS. Может быть очень полезен для инженеров, которые уже освоили Cisco IOS, но впервые столкнулись с оборудованием Juniper.
Более подробную информацию о настройке сетевого оборудования под управлением JUNOS можно получить из официальной документации Juniper.
Routing Instance
Junos способна логически группировать Routing Tables, интерфейсы, а также протоколы маршрутизации.
Такая группа называется Routing Instance
В каждой Routing Instance маршрутизация работает изолированно.
Использование Routing Instances даёт большую гибкость в настройках, поскольку одно устройство может работать, имитируя работу нескольких.
Master Routing Instance
Junos по умолчанию создаёт Master Routing Instance.
По умолчанию Master Routing Instance включает routing table inet.0
inet.0 используется для IPv4 unicast routing.
Junos также создаёт private routing instances, которые используются для внутренних коммуникаций, и которые мы можем игнорировать.
User-Defined Routing Instances
Мы можем добавлять свои Routing Instances, которые позволяют:
• forwarding: Used to implement filter-based forwarding for common Access Layer applications;
• l2vpn: Used in Layer 2 VPN implementations;
• no-forwarding: Used to separate large networks into smaller administrative entities;
• virtual-router: Used for non-VPN-related applications such as system virtualization;
• vpls: Used for point-to-multipoint LAN implementations between a set of sites in a VPN; and
• vrf: Used in Layer 3 VPN implementations
Работа с Routing Instances
При создании routing instance автоматом создаётся routing table в именем instance-name.inet.0.
Sharing Routes Between Routing Tables
Junos позволяет поместить routing information одновременно в несколько routing tables.
Первый метод использует Routing Information Base (RIB) Group.
RIB Group определяется, а затем может быть использована в секциях конфигурации.
Второй метод - использование instance-import, instance-export, auto-export.
Определение RIB Group
Чтобы понять работу RIB Group, сначала разберемся, как создаётся таблица маршрутизации в Junos без RIB Group:
Protocol -> ProtocolDB -> RIB
- Отрабатывает протокол маршрутизации (protocol). При этом в терминах Junos, под понятим протокол может выступать не только к примеру OSPF, но и статические маршруты, Connected routes и т.д.
- Protocol DB - алгоритм протокола хранит свои маршруты в Protocol DB, и оттуда по своим критериям выбирает лучший. Который помещается в RIB
- RIB - собственно сама таблица маршрутизации. Для IPv4 - это inet.0
RIB Group расширяет этот механизм:
Protocol -> ProtocolDB -> RIB Group
RIB-Group состоит из:
Primary RIB — таблица, куда протокол по умолчанию отдаёт свои маршруты
Secondary RIB — одна или несколько дополнительных таблиц маршрутизации, куда мы хотим, чтоб протокол так же отдавал свои маршруты.
Import-Policy — политика, описывающая, как из маршрутов мы разрешаем устанавливать в Secondary RIB, а какие нет.
Т.е. мы получили возможность устанавливать маршруты, полученные от протокола маршрутизации, не только в ту таблицу, с которой он работает по умолчанию, но и в любую другую. Причем появляются понятия Primary и Secondary RIB. Отличаются они тем, что мы можем (при помощи import policy) явно указывать, какие маршруты отдавать в secondary RIB (в primary устанавливаются все, вне зависимости от import policy).
Как уже отмечалось, Junos использует RIB Group для того, чтобы поместить routing information в несколько routing tables.
Мы определяем имя RIB Group, а в самой конфигурации задаём две основные опции:
- import-rib - перечисляет несколько routing tables, куда будет помещена входящая route information.
Первая routing table в списке - будет Primary routing table.
Primary routing table - это таблица, куда будет помещена route information при отсутствии RIB Group
- export-rib - включает только одну routing table, куда отдавать route information.
export-rib часто не применяется в конфигурации.
Применение RIB Group
После того, как мы создали RIB Group, мы можем применить её в других секциях конфигурации.
RIB Group мы можем применить например в interface routes, static routes, OSPF, IS-IS, RIP, BGP, Physical Interface Module (PIM), and Multicast Source Discovery Protocol (MSDP).
В следующем примере OSPF будет отдавать свои маршруты в таблицы: inet.0 , test.inet.0
user@R1# show routing-options rib-groups < test < import-rib [ inet.0 test.inet.0 ]; >> user@R1# show protocols ospf rib-group test; area 0.0.0.0 < interface ge-0/0/1.0; interface lo0.0; >
Это мы можем проверить через команду show route table:
user@R1> show route table inet.0 protocol ospf inet.0: 13 destinations, 13 routes (13 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 172.20.101.0/24 *[OSPF/150] 00:00:30, metric 0, tag 0 > to 172.20.77.2 via ge-0/0/1.0 172.20.201.0/24 *[OSPF/150] 00:00:30, metric 0, tag 0 > to 172.20.77.2 via ge-0/0/1.0 192.168.2.1/32 *[OSPF/10] 00:00:30, metric 1 > to 172.20.77.2 via ge-0/0/1.0 224.0.0.5/32 *[OSPF/10] 2w1d 02:37:55, metric 1 MultiRecv user@R1> show route table test.inet.0 protocol ospf test.inet.0: 6 destinations, 6 routes (6 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 172.20.101.0/24 *[OSPF/150] 00:00:27, metric 0, tag 0 > to 172.20.77.2 via ge-0/0/1.0 172.20.201.0/24 *[OSPF/150] 00:00:27, metric 0, tag 0 > to 172.20.77.2 via ge-0/0/1.0 192.168.2.1/32 *[OSPF/10] 00:00:27, metric 1 > to 172.20.77.2 via ge-0/0/1.0 224.0.0.5/32 *[OSPF/10] 00:00:27, metric 1 MultiRecv
Routing Between Instances
Между разными instances также мы можем создавать соединения: физические или логические.
Пример логического соединения:
[edit interfaces lt-0/0/0] user@R1# show unit 0 < encapsulation ethernet; peer-unit 1; family inet < >> unit 1
Пример конфигурации
set interfaces ge-0/0/0 unit 0 description OUTSIDE_ISP-2-UNC set interfaces ge-0/0/0 unit 0 family inet address 217.170.112.10/30 set interfaces ge-0/0/1 unit 0 description INSIDE set interfaces ge-0/0/1 unit 0 family inet filter input LAN-in_filter set interfaces ge-0/0/1 unit 0 family inet address 10.40.1.1/24 preferred set interfaces ge-0/0/2 unit 0 description OUTSIDE_ISP-1-ROSTEL set interfaces ge-0/0/2 unit 0 family inet address 87.226.186.67/29
Создаём Routing instance для каждого провайдера:
set routing-instances ri-ISP-1 interface ge-0/0/2.0 set routing-instances ri-ISP-1 description "ri to ISP1" set routing-instances ri-ISP-1 instance-type virtual-router set routing-instances ri-ISP-1 routing-options static route 0.0.0.0/0 next-hop 87.226.186.65 set routing-instances ri-ISP-1 routing-options static route 0.0.0.0/0 preference 7 set routing-instances ri-ISP-2 interface ge-0/0/0.0 set routing-instances ri-ISP-2 description "ri to ISP2" set routing-instances ri-ISP-2 instance-type virtual-router set routing-instances ri-ISP-2 routing-options static route 0.0.0.0/0 next-hop 217.170.112.9 set routing-instances ri-ISP-2 routing-options static route 0.0.0.0/0 preference 9
При этом настройки туннелей привязываются к каждой routing-instance, позволяя каждому туннелю строиться через своего провайдера:
set security ike gateway ike-gate-imh ike-policy ike-policy-imh set security ike gateway ike-gate-imh address 195.219.104.1 set security ike gateway ike-gate-imh external-interface ge-0/0/2.0 set security ike gateway ike-gate-imh_pri-sec ike-policy ike-policy-imh_pri-sec set security ike gateway ike-gate-imh_pri-sec address 195.219.104.1 set security ike gateway ike-gate-imh_pri-sec external-interface ge-0/0/0.0
Настройка выхода в интернет
Выход в интернет мы сделаем через PBR, см. http://ciscomaster.ru/content/juniper-policy-based-routing
Существует метод placing routing information in multiple tables simultaneously, этот метод называется routing information base (RIB) group.
Мы можем использовать instance-import, instance-export and auto-export
Использование routing information base (RIB) group не так интуитивно. Более понятно использовать instance-import Option.
set policy-options policy-statement policy-import_pbr-ISP-1 term permit-direct-ISP-1 from instance ri-ISP-1 set policy-options policy-statement policy-import_pbr-ISP-1 term permit-direct-ISP-1 from protocol direct set policy-options policy-statement policy-import_pbr-ISP-1 term permit-direct-ISP-1 from protocol local set policy-options policy-statement policy-import_pbr-ISP-1 term permit-direct-ISP-1 then accept set policy-options policy-statement policy-import_pbr-ISP-2 term permit-direct-ISP-2 from instance ri-ISP-2 set policy-options policy-statement policy-import_pbr-ISP-2 term permit-direct-ISP-2 from protocol direct set policy-options policy-statement policy-import_pbr-ISP-2 term permit-direct-ISP-2 from protocol local set policy-options policy-statement policy-import_pbr-ISP-2 term permit-direct-ISP-2 then accept set policy-options policy-statement policy-import_ri-master term permit-defroute-ISP-1 from instance ri-ISP-1 set policy-options policy-statement policy-import_ri-master term permit-defroute-ISP-1 from protocol static set policy-options policy-statement policy-import_ri-master term permit-defroute-ISP-1 from route-filter 0.0.0.0/0 exact set policy-options policy-statement policy-import_ri-master term permit-defroute-ISP-1 then accept set policy-options policy-statement policy-import_ri-master term permit-direct-ISP-1 from instance ri-ISP-1 set policy-options policy-statement policy-import_ri-master term permit-direct-ISP-1 from protocol direct set policy-options policy-statement policy-import_ri-master term permit-direct-ISP-1 from protocol local set policy-options policy-statement policy-import_ri-master term permit-direct-ISP-1 then accept set policy-options policy-statement policy-import_ri-master term permit-defroute-ISP-2 from instance ri-ISP-2 set policy-options policy-statement policy-import_ri-master term permit-defroute-ISP-2 from protocol static set policy-options policy-statement policy-import_ri-master term permit-defroute-ISP-2 from route-filter 0.0.0.0/0 exact set policy-options policy-statement policy-import_ri-master term permit-defroute-ISP-2 then accept set policy-options policy-statement policy-import_ri-master term permit-direct-ISP-2 from instance ri-ISP-2 set policy-options policy-statement policy-import_ri-master term permit-direct-ISP-2 from protocol direct set policy-options policy-statement policy-import_ri-master term permit-direct-ISP-2 from protocol local set policy-options policy-statement policy-import_ri-master term permit-direct-ISP-2 then accept set policy-options policy-statement policy-import_ri-master term reject-any then reject
Для работы PBR создаём routing-instances type forwarding.
В каждую из них мы импортируем маршруты из ri-ISP-1 и ri-ISP-2 соответственно.
set routing-instances pbr-ISP-1 description "pbr to ISP1" set routing-instances pbr-ISP-1 instance-type forwarding set routing-instances pbr-ISP-1 routing-options static route 0.0.0.0/0 next-hop 87.226.186.65 set routing-instances pbr-ISP-1 routing-options instance-import policy-import_pbr-ISP-1 set routing-instances pbr-ISP-2 description "pbr to ISP2" set routing-instances pbr-ISP-2 instance-type forwarding set routing-instances pbr-ISP-2 routing-options static route 0.0.0.0/0 next-hop 217.170.112.9 set routing-instances pbr-ISP-2 routing-options instance-import policy-import_pbr-ISP-2
В Master Routing Instance мы импортируем маршруты из ri-ISP-1 и ri-ISP-2:
set routing-options instance-import policy-import_ri-master
В результате мы получим маршрутизацию:
srx# run show route inet.0: 510 destinations, 1003 routes (510 active, 0 holddown, 0 hidden) + = Active Route, - = Last Active, * = Both 0.0.0.0/0 *[Static/7] 29w3d 05:00:00 > to 87.226.186.65 via ge-0/0/2.0 [Static/9] 14w0d 00:41:46 > to 217.170.112.9 via ge-0/0/0.0
Далее делаем фильтр, и прикручиваем его на внутренний интерфейс.
Здесь логика следующая: весть внутренний трафик использует таблицу маршрутизации.
Трафик в интернет от 10.40.1.41 пойдет через ISP-1.
Остальной трафик в интернет пойдёт согласно таблице маршрутизации.
set firewall family inet filter LAN-in_filter term match-internal-traffic from source-address 10.0.0.0/8 set firewall family inet filter LAN-in_filter term match-internal-traffic from destination-address 10.0.0.0/8 set firewall family inet filter LAN-in_filter term match-internal-traffic then accept set firewall family inet filter LAN-in_filter term match-client_10_40_1_41 from source-address 10.40.1.41/32 set firewall family inet filter LAN-in_filter term match-client_10_40_1_41 then routing-instance pbr-ISP-1 set firewall family inet filter LAN-in_filter term else_accept then accept
set services rpm probe isp1-probe test isp1-test1 probe-type icmp-ping set services rpm probe isp1-probe test isp1-test1 target address 94.100.180.200 set services rpm probe isp1-probe test isp1-test1 probe-count 3 set services rpm probe isp1-probe test isp1-test1 probe-interval 15 set services rpm probe isp1-probe test isp1-test1 test-interval 300 set services rpm probe isp1-probe test isp1-test1 thresholds successive-loss 3 set services rpm probe isp1-probe test isp1-test1 thresholds total-loss 3 set services rpm probe isp1-probe test isp1-test1 destination-interface ge-0/0/2.0 set services rpm probe isp1-probe test isp1-test1 next-hop 87.226.186.65 set services rpm probe isp1-probe test isp1-test2 probe-type icmp-ping set services rpm probe isp1-probe test isp1-test2 target address 208.67.222.222 set services rpm probe isp1-probe test isp1-test2 probe-count 3 set services rpm probe isp1-probe test isp1-test2 probe-interval 15 set services rpm probe isp1-probe test isp1-test2 test-interval 300 set services rpm probe isp1-probe test isp1-test2 thresholds successive-loss 3 set services rpm probe isp1-probe test isp1-test2 thresholds total-loss 3 set services rpm probe isp1-probe test isp1-test2 destination-interface ge-0/0/2.0 set services rpm probe isp1-probe test isp1-test2 next-hop 87.226.186.65 set services rpm probe isp2-probe test isp2-test1 probe-type icmp-ping set services rpm probe isp2-probe test isp2-test1 target address 94.100.180.202 set services rpm probe isp2-probe test isp2-test1 probe-count 3 set services rpm probe isp2-probe test isp2-test1 probe-interval 15 set services rpm probe isp2-probe test isp2-test1 test-interval 300 set services rpm probe isp2-probe test isp2-test1 thresholds successive-loss 3 set services rpm probe isp2-probe test isp2-test1 thresholds total-loss 3 set services rpm probe isp2-probe test isp2-test1 destination-interface ge-0/0/0.0 set services rpm probe isp2-probe test isp2-test1 next-hop 217.170.112.9 set services rpm probe isp2-probe test isp2-test2 probe-type icmp-ping set services rpm probe isp2-probe test isp2-test2 target address 208.67.220.220 set services rpm probe isp2-probe test isp2-test2 probe-count 3 set services rpm probe isp2-probe test isp2-test2 probe-interval 15 set services rpm probe isp2-probe test isp2-test2 test-interval 300 set services rpm probe isp2-probe test isp2-test2 thresholds successive-loss 3 set services rpm probe isp2-probe test isp2-test2 thresholds total-loss 3 set services rpm probe isp2-probe test isp2-test2 destination-interface ge-0/0/0.0 set services rpm probe isp2-probe test isp2-test2 next-hop 217.170.112.9 set services ip-monitoring policy isp1-track match rpm-probe isp1-probe set services ip-monitoring policy isp1-track then preferred-route route 0.0.0.0/0 next-hop 217.170.112.9
Логика данной конструкции:
Если оба теста от rpm-probe isp1-track будут в состоянии FAILED, то выставляется маршрут на 217.170.112.9.