Ноутбук Ethernet аркылуу кеңсенин /24 тармагында отурат жана ошол эле /24 ичинде жашаган OpenVPN серверине да кошулат. Кесиптеш туннелдин дарегине ping жиберет; суроо ачык жетет, бирок эч нерсе кайтпайт. Туннелдин журналы таза жана серептөө дагы иштейт, ошондуктан туннел туура эмес шектүү. Кабыл алуучу машинадагы IPv4 булагын текшерүү пакетти эч нерсе окубай туруп ыргытат.

Ыргытуу пакетти эч нерсе окубай туруп болот

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

Бул жердеги кардар өз туннелинде 10.66.0.9 кармайт, ал эми OpenVPN сервери кеңсе префиксинин ичиндеги 192.168.80.10 дарегинен жооп берет. 192.168.80.25 дарегиндеги кесиптеш туннелдин дарегине ping жиберет, ошондуктан суроо жергиликтүү тармактан өтөт, сервер аны туннелге багыттайт жана ал кеңсенин булак дарегин көтөрүп кардардын туннел интерфейсине келет. Ошол машинанын маршруттоо таблицасында кеңсе префикси Ethernet түзмөгүнө таандык, туннелге эмес. Текшерүү келүү интерфейсин маршрут менен салыштырат, дал келбестик табат жана пакетти ыргытат, ошондуктан кесиптеш толук жоготууну көрөт, эки учур тең соо туннел тууралуу билдиргенде.

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

Каалаган sysctl тийүүдөн мурун күчүндөгү режимди далилдеңиз

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

tcpdump -ni tun0 icmp and host 192.168.80.25
ip route get 192.168.80.25
sysctl net.ipv4.conf.all.rp_filter net.ipv4.conf.tun0.rp_filter

Андан кийин ката эсептегичин карап ping-ди кайталаңыз. Жазуу мурун эле көрсөткөн суроонун жанында өсүп жаткан сан ушул ыргытуунун кол тамгасы, жоголгон маршруттуку эмес. Ошол жерде турганда марстык пакеттердин журналын күйгүзүңүз, ядро четке каккан булак менен интерфейсти атасын. Чогуу алар түшүндүрмө катары шифрди, дубалды жана iroute жоктугун четке кагышат.

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

Ар бир rp_filter режими чын эле эмнени кабыл алат

Ядро ар бир интерфейс үчүн үч маанини көрсөтөт жана алар бир эреженин үч реңки эмес. Нөл текшерүүнү өчүрөт. Бирөө катуу жана булактын келүү интерфейси аркылуу артка маршрутталышын талап кылат. Эки — бош жана таблицада булакка кандайдыр бир маршруттун болушун гана талап кылат, ал кайда багытталса да.

ValueNameAcceptsStill rejects
0offany source at allnothing on this check
1stricta source routed back out the arrival interfacea source whose route points elsewhere
2loosea source with any route in the tablea source with no route at all

Бул жерде маанилүү сап — бош сап жана анын дагы эле четке какканы. Таблицаңыздын каалаган жеринде маршрутталуучу жасалма булак өтөт, ал эми такыр маршруту жок булак дагы эле четке кагылат. Ноутбукта бул тар жеңилдик; башкалардын трафигин өткөргөн маршрутизатордо ал кенен. Режим хостко таандык, ошондуктан бирдей сан эки жерде башка салмак көтөрөт.

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

Белгисиздикти жок кылган эң кичине өзгөртүүнү тандаңыз

Бош режим — туура келген эң кичине өзгөртүү жана бул катуулуктун чыныгы төмөндөшү, зыянсыз ажыраткыч эмес. Топология жол берсе, жакшыраак вариант бар: кабатташууну алып салыңыз, белгисиздик жоголот.

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

Кайсы жолду тандасаңыз да, аны тирүү буйрукка эмес, sysctl drop-in файлына жазыңыз. all жана default ачкычтарын чогуу коюңуз, кайра туташуу катуу режимди унчукпай калыбына келтире албасын.

# /etc/sysctl.d/99-rp-filter.conf
net.ipv4.conf.default.rp_filter = 2
net.ipv4.conf.all.rp_filter = 2
sysctl --system

Бош режим эмнеден баш тартат, жана кайда

Бош режим эч бир маршрут жете албаган булакты дагы эле четке кагат жана кокустан маршрутталуучу жасалма булакты четке кагууну токтотот. Ноутбукта бул тар жеңилдик. Өзүнө таандык эмес трафикти өткөргөн түзмөктө ошол эле тандоо алда канча кенен. Ошондуктан бир жөндөө кайда иштегенине жараша эки такыр башка маани көтөрөт.

Башкалар үчүн трафикти өткөргөн хостодо текшерүүнү толук өчүрүү — качуу керек болгон жалгыз оңдоо. Нөл бош режим этият сактаган текшерүүнү ыргытат. Эгер хост башкалар үчүн өткөрсө, анын ордуна мурунку бөлүмдөгү саясат эрежеси вариантын коргоңуз.

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

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