Cсылки:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# RFC https://tools.ietf.org/html/rfc1918 https://tools.ietf.org/html/rfc6890 https://www.rfc-editor.org/rfc/rfc1930 https://www.rfc-editor.org/rfc/rfc4271 # IPCALC http://jodies.de/ipcalc # FIB https://en.wikipedia.org/wiki/Forwarding_information_base # SYSCTL / rp-filter https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt # Looking glass http://lg.mtu.ru/cgi-bin/lgform_img.cgi # OSPF https://community.cisco.com/t5/networking-documents/ospf-design-best-practices/ta-p/3112070 https://spw.ru/educate/articles/primenenie-ospf-v-routeros-1/ # BGP https://linkmeup.ru/blog/65.html https://www.ssi.gouv.fr/uploads/2016/03/bgp-configuration-best-practices.pdf http://xgu.ru/wiki/BGP_%D0%B2_Cisco http://www.justogroup.ru/dokumentacija/cisco/marshrutiziruemye_seti/prakticheskie_primeri_bgp.pdf # AS 2.0 https://www.cidr-report.org/as2.0/ # BIRD https://bird.network.cz/ # frr https://frrouting.org/ # печалька в яндекс в 2211 году https://habr.com/ru/company/yandex/blog/126709/ |
Сети
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Серые сети - 10.0.0.0/8 - 172.16.12.0/12 - 192.168.0.0/16 Специальные сети - 0.0.0.0/8 - этот хост как источник - 127.0.0.0/8 - этот хост как приемник, loopback - 100.64.0.0/10 - Shared Net - NAT на уровне провайдера - 169.254.0.0/16 - Link Local - сеть для самоконфигурирующихся устройств - 240.0.0.0/4 - Multicast Рекомендуемая схема нумерации для сетей 10.1.32.0/23 | | | | | vlan #132 geo-id #1 |
Агрегат:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Агрегат - минимально возможная сеть, включающая в себя все специфики 10.0.0.0/13 - Агрегат 10.1.0.0/16 - Специфик 10.2.0.0/16 - Специфик 10.6.20.0/22 - Специфик forwarding information base (FIB) также известная как "таблица пересылки"(forwarding table) или "таблица MAC -адресов"(MAC table) В роутинге специфики всегда выигрывают при поиске в FIB Агрегаты всегда должны "заворачиваться в null", что бы избегать проблем с кольцами, броадкастами и мусорным трафиком в маршрутизации ip route add blackhole 10/8 Кроме того, null routing - самый дешевый способ фильтрации трафика |
Динамическая маршрутизация:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
Автоматическое получение маршрутов и возможность их перестроения при изменении топологии Interior Gateway Protocols - Open Shortest Path First - Enhanced Interior Gateway Routing Protocol Работают на уровне L3, каждый роутер знает всю топологию своей области, отслеживается состояние соединений Border Gateway Protocol (BGP) Работает на уровне L4 (возможно управление маршрутизаторами с отдельно стоящего BGP Route Server), состояние пиринга определяетя по состоянию TCP-сессии. Может использоваться внутри AS/Area |
Quagga (ex-Zebra) (deprecated / устарел)
|
1 2 3 4 5 6 7 |
Набор демонов, реализующий управление сетью в linux RIPD, OSPFD, BGPD, ISISD Zebra (Forwarding Information Base, FIB) vtysh - консоль управления Взаимодействует с таблицей "Kernel Routing Table" Возможно так же управление интерфейсами и разнообразными сетевыми настройками Полностью копирует управление и функциональность Cisco IOS |
BIRD
|
1 2 3 4 5 6 7 8 9 10 11 12 |
- разрабатывается с 2005 года - умеет: OSPF,IS-IS,RIP,BGP,BFD - умеет IPV6 - свой язык описания конфигов и фильтров - используется: DE-CIX, LINX, PAIX, MSK-IX Архитектура: - master - Основанная таблица, в которую попадают маршруты от других протоколов - device - протокол, который следит за статусами интерфейсов в системе - static - протокол, отвечающий за статическую маршрутизацию - direct - протокол, создающий в таблице маршруты на основе настроек интерфейсов системы - kernel - протокол для взаимодействия с ядром и загрузкой маршрутов в таблицу маршрутизации linux |
OSPF Terms / Neighbourhood / interface
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
OSPF Terms: Area - интерфейсы, роутеры которых получают всю информацию о топологии сети. Для небольшой сети возможно использование единственной Area 0. Есть разновидности - backbone, standard, stub, not-so-stubby area и еще несколько Hello - пакеты, устанавливающие и поддерживающие соеденение роутеров LSA (Link State Announce) - единица обмена информацией между роутерами OSPF (https://habr.com/post/201794/) BR - Border Router ABR (ospf term) - Area Border Router ASBR (bgp term) - Autonomous System Border Router DR - Designated Router - ABR, являющийся основной точкой входа в Area BDR - Backup Designated Router - ABR, являющийся резервной точкой входа DROther - BR, не участвующий в построении графа маршрутов OSPF Neighbourhood Cостояния соседства маршрутизаторов Down - соседа не видно Attempt, Init - попытка установить соединение 2-Way - роутеры видят друг-друга Exstart, Exchange, Loading aka Adjacent - роутеры обмениваются информацией Full aka Full Adjacent - роутеры обменялись информацией OSPF interface Priority: DR/BDR election Если в одну сеть есть два входа через два роутера, то один из них становится DR, остальные - BDR. На принятие решения влияет priority и router-id. Если по каким-то причинам роутеры не могут выбрать DR, то состояние их соседства повиснет в 2way/DRother. Специальное значение priority 0 - отказ от выборов. Cost - стоимость прохождения через этот интерфейс. По-умолчанию рассчитывался исходя из пропускной способности интерфейса. Теперь неактуально, потому что при bw ≥ 100 Mbps default cost = 1. Если есть два маршрута в одну сеть с одинаковой суммарной стоимостью - устанавливаются оба, в противном случае устанавливается только один с минимальной стоимостью. Параметр интерфейса роутера, а не направления в целом, поэтому для понижения приоритета всего линка должен быть установлен с обоих сторон. Linux rp_filter По умолчанию, параметр установлен в 1, что обозначает строгую проверку маршрута источника. Это правильно до тех пор, пока мы не сталкиваемся с динамическим роутингом. При использовании IGP можно сразу выставить в 2 (нестрогая проверка) или в 0 (отсутствие проверки) |
Автономная система:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
Автономная система (autonomous system, AS) - это система IP-сетей и маршрутизаторов, управляемым одним или несколькими операторами, имеющими единую политику маршрутизации с Интернетом. Особенности: - процесс создания и регистрации AS описан в RFC 1930. - номера AS выдается организациями RIR (Regional Internet Registry) или LIR (Local Internet Registry) - до 2007 года были 16-бинтыми, теперь 32-битные номера Диапазоны номеров автономных систем: - 0-65535 (изначально определенный диапазон для ASN 16 бит) - 65536-4294967295 (новый диапазон для ASN 32 бит(КАС 4893)) (май 2007) Использование номеров автономных систем: - 0 и 64535 - зарезервированы - 1-64495 публичные номера (все что не выдали до 2012 - резерв у IANA) - 65552-4294967295 публичные номера (выдается с 2010) - 64512-65534 - приватные номера - 23456 - представляет 32-битный диапазон на устройствах, которые работают с 16-битным диапазоном(для совместимости со старым оборудованием) Provider Aggregatable (PA) - диапазон адресов, приндлежащий провайдеру Особенности: - легко получить - принадлежат провайдеру - в случае смены провайдера - остается у провайдера Provider Independent (PI) - независимый от провайдера диапазон адресов Особенности: - приобретается у LIR - привязывается к номеру AS - сохраняются при смене провайдера и добавляет гибкости маршрутизации AS и префикс с реальным IP-адресами выдает RIPE Не операторы могут получить префикс, можно договорится с другими операторами и поднять пиринг по BGP. В базе данных RIPE можно будет добавить информацию о том что сеть закреплена за вашей организацией. Если нету номера AS для поднятия пирига можно использовать приватный диапазон AS 64512-65534. |
BGP
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
RIPE -> RIR -> LIR Особенности: - дистанционно-векторный протокол - децентрализованный - имеет гибкую систему фильрации и управления приоритетами маршрутов - имеет защиту от образования петель - объединяет автономные системы (AS)(eBGP) - может использоваться внутри одной AS(iBGP) - работает на уроне L4 - состояние пиринга определяет по состоянию TCP-сессии - для построения таблицы маршрутизации используется номера AS - может быть требователен к ресурсам маршрутизатора - текущий размер полной таблицы маршрутизации сети Интернет более 800к маршрутов Основные условия для установления соседства по BGP - связанность по TCP - доступность порта TCP 179 - программные или аппаратные маршрутизаторы с поддержкой протокола Таймеры: - необходимы для установки соседства - по RFC4271, keepalived time = 90s, hold time = 30s - Cisco, keepalived time = 180, hold time = 60s - FRR, keepalived time = 180s, hold time = 60s - не стоит делать значения таймеров очень мленькими , это может вызвать проблемы - лучше использовать протокол BFD Основные состояния установления соседства по BGP: IDLE - изначальное состояние BGP-соседства. Ничего не происходит. CONNECT - слушает порт 179, но ничего не отправляет ACTIVE - отправил SYN и ждет ответа от соседа OPENSENT** - BGP начал обмен сообщениями OPEN. Сообщение отправлено OPENCONFIRM** - сообщение OPEN получено ESTABLISHED - все настройки согласованы и сессии BGP работают Основные сообщения в BGP: Open - согласование номера ASб HoldTimer и Router ID. Протокол обмена маршрутной информацией уровня провайдера. Объединяет т.н. Автономные Системы (Autonomous System, AS) AS похож на OSPF Area. Подразумевается, что все сети внутри AS так или иначе объединены с помощью IGP В некоторых случаях BGP может использован внутри AS. Т.к. BGP в основном означает связь с провайдером, то для внутренних связей используют термин iBGP Автономную систему хорошо иметь для независимости от ДЦ и в случае нескольких ДЦ. Минимальный размер сети, анонсируемой через BGP не регламентируется протоколом, но в реальной жизни - /24. Поэтому минимальный размер AS тоже /24. Раньше адреса можно было получить непосредственно у RIPE, теперь ищите LIR, у которых еще остались блоки адресов. RIPE хранит всю информацию о связях AS. Её со своей стороны надо всегда держать в актуальном состоянии, потому что есть много транзитных операторов, которые используют эту базу для конфигурации устройств в автоматическом режиме Типичный сценарий использования: вы анонсируете провайдеру свои сети, провайдер вам в ответ анонсирует 0.0.0.0/0. При пиринге всегда нужно использовать фильтрацию префиксов, что бы ни вы, ни провайдер не отослали лишнего. whois - интерфейс командной строки ко всем базам координационных центров. Россия относится к RIPE. Looking glass - Инструмент ограниченного доступа к роутерам провайдера через web-интерфейс. |
vtysh
|
1 2 3 4 5 6 7 |
show running-config - посмотреть текущий файл конфигурации show ip bgp - посмотреть текущую таблицу маршрутов show bgp summary -сводная информация для всех экземпляров маршрутизации show bgp neighbor - отображение информации !!! обратите особое внимание состояние BGP. !!! Любое состояние, отличное от Established, указывает на то, !!! что обмен информацией между соседями не налажен |
OSPF mesh??
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
Для создания mesh-сети с OSPF нужно настроить несколько узлов, каждый из которых будет обмениваться маршрутной информацией с другими. У каждого узла должен быть свой уникальный router-id, но все они должны быть частью одной и той же OSPF-области (например, area 0). sudo apt update sudo apt install frr frr-pythontools vim /etc/frr/daemons -------------------- ospfd=yes -------------------- vim /etc/frr/frr.conf ---------------------- ! ! Конфигурация маршрутизатора ! frr defaults traditional hostname my-router log syslog service integrated-vtysh-config ! ! Включаем OSPF ! router ospf ospf router-id 1.1.1.1 ! Уникальный ID маршрутизатора network 10.99.99.0/24 area 0 ! OSPF для сети 10.99.99.0/24 в области 0 passive-interface default ! Отключаем отправку Hello-пакетов на всех интерфейсах no passive-interface eth0 ! Включаем OSPF на интерфейсе eth0 no passive-interface eth1 ! Включаем OSPF на интерфейсе eth1 ! ! Интерфейсы ! interface eth0 ip ospf area 0 ! interface eth1 ip ospf area 0 ! line vty ---------------------- vtysh show ip ospf neighbor show ip route ospf |
babeld
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
cat > /etc/frr/frr.conf << "EOF" frr defaults traditional log syslog informational service integrated-vtysh-config router babel network eth1 network eth2 network eth3 network eth4 redistribute ipv4 connected redistribute ipv6 connected babel diversity babel diversity-factor 128 interface eth1 babel wired babel split-horizon babel hello-interval 12000 babel update-interval 36000 interface eth2 babel wired babel split-horizon babel hello-interval 12000 babel update-interval 36000 interface eth3 babel wired babel split-horizon babel hello-interval 12000 babel update-interval 36000 interface eth4 babel wired babel split-horizon babel hello-interval 12000 babel update-interval 36000 EOF cat > /etc/frr/daemons << "EOF" # This file tells the frr package which daemons to start. # # Sample configurations for these daemons can be found in # /usr/share/doc/frr/examples/. # # ATTENTION: # # When activating a daemon for the first time, a config file, even if it is # empty, has to be present *and* be owned by the user and group "frr", else # the daemon will not be started by /etc/init.d/frr. The permissions should # be u=rw,g=r,o=. # When using "vtysh" such a config file is also needed. It should be owned by # group "frrvty" and set to ug=rw,o= though. Check /etc/pam.d/frr, too. # user@ansible:~/prod$ cat frr_daemons.j2 # This file tells the frr package which daemons to start. # # Sample configurations for these daemons can be found in # /usr/share/doc/frr/examples/. # # ATTENTION: # # When activating a daemon for the first time, a config file, even if it is # empty, has to be present *and* be owned by the user and group "frr", else # the daemon will not be started by /etc/init.d/frr. The permissions should # be u=rw,g=r,o=. # When using "vtysh" such a config file is also needed. It should be owned by # group "frrvty" and set to ug=rw,o= though. Check /etc/pam.d/frr, too. # # The watchfrr, zebra and staticd daemons are always started. # bgpd=no ospfd=no ospf6d=no ripd=no ripngd=no isisd=no pimd=no ldpd=no nhrpd=no eigrpd=no babeld=yes sharpd=no pbrd=no bfdd=no fabricd=no vrrpd=no # # If this option is set the /etc/init.d/frr script automatically loads # the config via "vtysh -b" when the servers are started. # Check /etc/pam.d/frr if you intend to use "vtysh"! # vtysh_enable=yes zebra_options=" -A 127.0.0.1 -s 90000000" bgpd_options=" -A 10.0.0.7" ospfd_options=" -A 127.0.0.1" ospf6d_options=" -A ::1" ripd_options=" -A 127.0.0.1" ripngd_options=" -A ::1" isisd_options=" -A 127.0.0.1" pimd_options=" -A 127.0.0.1" ldpd_options=" -A 127.0.0.1" nhrpd_options=" -A 127.0.0.1" eigrpd_options=" -A 127.0.0.1" babeld_options=" -A 127.0.0.1" sharpd_options=" -A 127.0.0.1" pbrd_options=" -A 127.0.0.1" staticd_options="-A 127.0.0.1" bfdd_options=" -A 127.0.0.1" fabricd_options="-A 127.0.0.1" vrrpd_options=" -A 127.0.0.1" # configuration profile # #frr_profile="traditional" #frr_profile="datacenter" # # This is the maximum number of FD's that will be available. # Upon startup this is read by the control files and ulimit # is called. Uncomment and use a reasonable value for your # setup if you are expecting a large number of peers in # say BGP. #MAX_FDS=1024 # The list of daemons to watch is automatically generated by the init script. #watchfrr_options="" # To make watchfrr create/join the specified netns, use the following option: #watchfrr_options="--netns" # This only has an effect in /etc/frr/<somename>/daemons, and you need to # start FRR with "/usr/lib/frr/frrinit.sh start <somename>". # for debugging purposes, you can specify a "wrap" command to start instead # of starting the daemon directly, e.g. to use valgrind on ospfd: # ospfd_wrap="/usr/bin/valgrind" # or you can use "all_wrap" for all daemons, e.g. to use perf record: # all_wrap="/usr/bin/perf record --call-graph -" # the normal daemon command is added to this at the end. EOF |
babeld
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
systemctl disable frr apt install babeld cat > /etc/babeld.conf << "EOF" # For more information about this configuration file, refer to # babeld(8) smoothing-half-life 0 link-detect true interface eth1 type wired hello-interval 2 interface eth2 type wired hello-interval 2 interface eth3 type wired hello-interval 2 interface eth4 type wired hello-interval 2 #redestribute all default redistribute ip 10.77.1.0/24 allow redistribute ip 10.77.2.0/24 allow redistribute ip 10.77.3.0/24 allow redistribute ip 10.77.4.0/24 allow redistribute deny #in blok me network in ip 10.77.1.0/24 deny #in ip 10.77.2.0/24 deny in ip 10.11.11.0/24 deny #in ip 10.22.22.0/24 deny #in ip 10.33.33.0/24 deny #in ip 10.44.44.0/24 deny #in ip 10.77.3.0/24 deny in ip 10.77.4.0/24 deny in ip 192.168.55.0/24 deny in ip 192.168.127.0/24 deny in allow EOF EOF |