Сизде эки сырткы линия бар, жана ip -6 route show экөөндө тең бирдей кийинки секирикти көрсөтөт: default via fe80::1 dev uplink0 жана default via fe80::1 dev uplink1. Бул даректин кагылышы эмес, жана жалаң гана кийинки секирикти fe80::1 саясат таблицасына көчүрүү ядрого кайсы линияны айткыңыз келгенин билдирбейт. Чыныгы суроо симптом көрсөткөндөн тарыраак: экинчи таблицага бир линия керекпи же экөө тең, жана кайра жүктөөдөн кийин бул маршруттарды эмне тирүү кармайт. Кезеги менен текшерилген үч шарт көбүн чечет.

Ошол эле fe80::1 эки башка кошуна

Шилтеме-жергиликтүү даректер бир гана линияга чектелген, ошондуктан fe80::1 эки жолу басылган бир дарек эмес; бул бирдей уландысы бар эки кошуна. Зона индекси — хост кайсынысын айткысы келгенин билдирүү жолу, ошондуктан fe80::1%uplink0 жана fe80::1%uplink1 ядро үчүн башка багыттар, жана бул уланды эч качан алыскы маршрутизаторго барбайт. RFC 4007 мунун артындагы зона моделин сүрөттөйт, ошондуктан саясат таблицасы ар бир шилтеме-жергиликтүү кийинки секирик менен бирге түзмөктү алып жүрүүгө тийиш.

Бир хосттогу сандык зона IDсин шаблонго көчүргөн VPN конфигурация генератору жергиликтүү контекстти даректин бөлүгү катары кабылдайт, жана ал жазган файл интерфейс аттары же индекстери башка болгон ар бир машинада туура эмес. Саясат таблицасы эки линияны бириктирип да койбойт: маршрутталган VPN тармактардын ортосунда пакеттерди өткөрөт, бирок алыскы Ethernet кошунасынын шилтеме-жергиликтүү инсандыгын туннелден ашырып өткөрбөйт, ошондуктан шилтеме-жергиликтүү трафик өз линиясында калат.

Түзмөктү алып салсаңыз, маршрут жазылбай калат. ip -6 route add default via fe80::1 table 200 шлюзду чече албайт, iproute2 аны Error: Nexthop has invalid gateway. катасы менен четке кагат. dev uplink0 кошуңуз, ошондо буйрук ийгиликтүү болот, анткени кийинки секирикти ушул эки кошунанын бирине байлаган нерсе — түзмөк. Түзмөк айта албаган нерсе — uplink0 ушул таблица үчүн туура линиябы, ал эми башка хосттон көчүрүлгөн маршрут ошол хосттун интерфейс аттарын кошо алып келет, чыныгы каталар да ушундан келип чыгат.

Биринчи шарт: таблицада бир линиябы же экиби

Экинчи сырткы линия эмне үчүн экенин аныктап баштаңыз. Эгер эки линия тең бирдей трафикти алып жүрсө жана бири камдык болсо, алмашуу таблицасында эки шлюз тең ар кандай метрика менен болушу керек: бирдей багыттар, бир артык көрүлгөн жол, бир ачык экинчи тандоо. Эгер сырткы линиялар ар кандай трафик ар кандай провайдерлер аркылуу чыгышы үчүн, же бул бөлүнгөн туннель болгондуктан — трафиктин бир бөлүгү VPNди айланып өтүп, калганы ичинде калат — анда бул эки линия такыр бир таблицага тийиш эмес. Алар эки таблицага тийиш, аларды эреже тандайт, жана эреже туннелди эмес, таблицаны тандайт: айланып өтүүчү трафик маршруттоого чейин белгиленет, жана дал ошол белги аны экинчи таблицага жиберет.

Ошол экинчи учурда эреже таблица качан караларын чечет, ал эми маршрут пакеттин кайда кетерин чечет:

ip -6 rule add fwmark 0x2 table 201
ip -6 route add default via fe80::1 dev uplink1 metric 100 table 201
ip -6 route add 2001:db8:100::/48 dev uplink1 metric 100 table 201
ip -6 route show table 201

Эч бир объект экинчисин алмаштырбайт, жана бир гана демейки маршруту бар таблица өз шлюзун чече албай калышы мүмкүн. Эгер кошуу четке кагылса, же маршрут бар болуп, бирок колдонулбаса, ошол интерфейстин туташкан префиксин ошол эле таблицага киргизиңиз, же секирикти onlink деп белгилеңиз (ал префикс башка жерде маршрутталганда). Жогорудагы блокто 2001:db8:100::/48 uplink1деги ошол туташкан префиксти билдирет, каалаган багытты эмес. fwmark эрежеси башка бир нерсе коюуга тийиш болгон белгини гана колдонот: өткөрүү жолундагы nftables же iptables эрежесинен, же SO_MARK сокетиндеги белгиден, ошондуктан белги булагы жок көчүрүлгөн блок эч нерсеге дал келбейт.

Экинчи шарт: метрикалар өлгөн провайдерди таппайт

Метрика — бар маршруттардын ортосундагы артыкчылык, ден соолук текшерүү эмес. Оператор үзүлгөндө, ядро ошол түзмөктөгү маршруттарды алып салат жана экинчи демейки ордун ээлейт. Кабель туташ турган бойдон, анын артындагы провайдер өлсө, таблицада эч нерсе өзгөрбөйт: артык көрүлгөн маршрут орнотулган, кошуна 2-катмарда жеткиликтүү, пакеттер кара тешикке кетип жатат. Эгер бул айырма сиздин жөндөөңүз үчүн маанилүү болсо, катаалдан өтүү жолду текшерген жана маршрутту алып салган нерседен келиши керек: маршруттоо демонубу же жазууну өчүрүп кайра орноткон кичинекей скриптпи.

Тандоону таблица курулгандан кийин текшериңиз, жана ядро көрөрүндөй текшериңиз. ip -6 route get 2001:db8:100::1 колдонула турган маршрутту, анын ичинде түзмөктү жана тандалган булак дарегин басып чыгарат, жана ал саясат эрежелерин сыйлайт. Туура эмес сырткы линияга таандык булак дареги — эреже күткөндөн эрте дал келгенин көрсөткөн кадимки белги.

Үчүнчү шарт: туруктуулук кимге таандык экенин чечиңиз

Маршрут ip -6 route add менен кошулса, кайра жүктөөгө чейин же бир нерсе аны тазалаганга чейин жашайт. Маршрутизатор жарнамаларынан үйрөнүлгөн демейки маршруттун жашоо мөөнөтү бар жана маршрутизатор аны кайтарып ала алат, ал эми кол менен кошулган демейки эч качан өзү бүтпөйт. Экөөнү бир таблицада аралаштыруу — эскирген туруктуу маршрут жаңы жарыялангандан жогору чыгып калышынын жолу, ал сүрөттөгөн сырткы линия эчак жок болгондон кийин да.

Ар бир таблицага бир ээсин тандаңыз. Эгер тармак менеджери же маршруттоо демону интерфейсти башкарып жатса, саясат маршрутун ошол жерде сүрөттөп, ядрого тийбеңиз. Эгер аны скрипт менен жасасаңыз, скриптти идемпотенттүү кылып, ажыратууну ошол эле учурда жазыңыз, анткени биринчи жаман өзгөртүүдө эле керек болот:

ip -6 route flush table 201
ip -6 rule del fwmark 0x2 table 201

Башка хосттор үчүн өткөрүү жасаган маршрутизатордо таблицаны күнөөлөөдөн мурун net.ipv6.conf.all.forwarding текшериңиз. Өткөрүү өчүк болгондо, башка тармакка адрестелген пакеттер 201-таблица канчалык туура болбосун, ыргытылат.

Долбоорду жазып кой, кийинки адам аны текшере алсын

Бир гана fe80::1 сактаган инвентарь маанилүү талааларды ыргытат. Багытты, кийинки секирикти, түзмөктү, таблицаны жана метриканы бирге жазыңыз, ошондой эле ар бир маршрут кайдан келгенин: жарыяланганбы, менеджер жаратканбы же статикалыкпы. Кийинчерээк кимдир бирөө экинчи сырткы линия чын эле трафик алып жатабы деп сураса, ошол жазуу табышмаксыз жооп берет.

Таблицаны бүттү деп жарыялоодон мурун кошунаны ip -6 neigh show dev uplink0 менен ырастаңыз, ip -6 rule show кайра окуп чыгыңыз — тартиптеги кокустуктарды текшериңиз, жана эрежеге дал келген трафик менен сынаңыз, демейки маршрутту алган ping менен эмес. Анан бир сырткы линияны атайылап өчүрүп, ядро кайсы маршрутка кайтарыларын көзөмөлдөңүз; жооп жазганыңызга дал келиши керек.

Тектеш макалалар