blackhole երթուղի և VPN kill switch․ ինչ է անում յուրաքանչյուրը
blackhole երթուղին մերժում է համապատասխան թրաֆիկը և ձախողման դեպքում պարտադրում փակ ուղի։ Համեմատեք նրա ծածկույթը և կույր կետերը փաթեթների զտման վրա հիմնված kill switch-ի հետ։
Փաթեթը հեռանում է նոթբուքից, երբեք չի հասնում VPN դարպասին, և ոչ մի firewall հաշվիչ չի շարժվում։ Երթուղիների աղյուսակն արդեն որոշել է փաթեթի ճակատագիրը․ blackhole գրառումը համապատասխանել է նրան, և միջուկը մերժել է այն նախքան որևէ ինտերֆեյս կտեսներ այն։ Այդ վարքը օգտակար է, երբ նպատակակետը պետք է ձախողվի փակ վիճակում, բայց դա նեղ ծածկույթի երթուղային գործողություն է։ Այն ամբողջական kill switch համարելը հենց այն տեղն է, որտեղ նախագծերը սխալվում են։
Ինչի՞ հետ է իրականում համապատասխանում մերժման գործողությունը
Երթուղու որոնումն ընտրում է աղյուսակ, ապա դրա մեջ ամենաերկար համապատասխան նախածանցը։ blackhole երթուղին սովորական գրառում է, որի գործողությունը մերժումն է, ուստի այն ազդում է միայն այն փաթեթների վրա, որոնք կընտրեին այդ գրառումը ամբողջ որոշումից հետո։ Փոխեք աղյուսակը քաղաքականության կանոնով կամ ավելացրեք ավելի կոնկրետ նախածանց, և մերժումն այլևս չի գործում։
Այդ պատճառով blackhole-ի ծածկույթը ճշգրիտ է և հեշտ ձևակերպվող․ այն ընդգրկում է նախածանցը, աղյուսակում, այդ հասցեների ընտանիքի համար։ Այն չի ընդգրկում նպատակակետ, որը կհաղթեր մեկ այլ աղյուսակ, և չի ընդգրկում IPv6-ը միայն այն պատճառով, որ IPv4 նախածանցը մերժվում է։
ip route get ցույց է տալիս որոշումը նախքան որևէ բան տեղակայելը, ներառյալ աղյուսակը և երթուղու տեսակը։ Այդ ելքը կարդալն ավելի արագ է, քան ձախողված հարցումից եզրակացնելը, թե որ կանոնը կամ նախածանցն է գործել։
blackhole-ը նույնը չէ, ինչ unreachable-ը կամ prohibit-ը
Linux-ն առաջարկում է մերժման նման երեք երթուղու տեսակ, և դրանք տարբերվում են նրանով, ինչ տեսնում է ուղարկողը։ blackhole-ը գցում է փաթեթն առանց պատասխանի, ուստի հաճախորդը տեսնում է ժամանակի սպառում։ unreachable երթուղին վերադարձնում է ICMP unreachable հաղորդագրություն, ուստի կապը արագ ձախողվում է հոսթի կամ ցանցի սխալով։ prohibit երթուղին վերադարձնում է վարչական արգելքի սխալ, որն ավելի մոտ է քաղաքականության դիտավորյալ մերժմանը։
Ընտրեք այն վարքը, որը ցանկանում եք, որ հավելվածը տեսնի։ Լուռ մերժումը տեղին է, երբ չեք ուզում բացահայտել քաղաքականությունը, իսկ անմիջական սխալն ավելի լավ է, երբ օգտվողները պետք է հասկանան, թե ինչու նպատակակետն անհասանելի է։ Տեսակները ցանցով խառնելը ստեղծում է աջակցության տոմսեր, որոնք նույն քաղաքականությունը նկարագրում են որպես երեք տարբեր խափանում։
Մի՛ ենթադրեք, որ յուրաքանչյուր մերժման գրառում փոխարինելի է, երբ ախտորոշում եք կապը։ Սխալի տեքստը, ժամանակը և փաթեթների որսումը տարբերվում են, և աղյուսակում եղած երթուղու տեսակը ձեզ ասում է, թե որին եք նայում։ ip-route ձեռնարկը թվարկում է տեսակները և նրանց սխալի վարքը։
Ինչպե՞ս է այն համեմատվում kill switch-ի հետ
kill switch-ը փաթեթների զտում է․ firewall կանոն, որը գցում է ելքային թրաֆիկը, որը կհեռանար թունելից դուրս։ blackhole երթուղին փոխանցման որոշում է, որն ընդունվում է ավելի վաղ ստեկում։ Երկուսն էլ կարող են կանգնեցնել թրաֆիկը, բայց նրանք տարբեր բաներ են տեսնում և բաց թողնում տարբեր դեպքեր։
| Mechanism | What it blocks | What it misses | How failure looks |
|---|---|---|---|
| Blackhole route | Destinations matching the prefix and table | Other tables, other address families, traffic with a different route | Silent timeout |
| Firewall kill switch | Egress not bound to the tunnel interface | Rules that are too broad can break the endpoint or DHCP | Dropped packets with counters |
| WireGuard AllowedIPs | Destinations not routed into the interface | Traffic that never enters the interface at all | No tunnel route, direct egress |
Ծածկույթն այն տեղն է, որտեղ համեմատությունը նշանակություն ունի։ Firewall-ը կարող է համապատասխանեցնել սեփականատիրոջը, պորտին կամ ինտերֆեյսին և արգելափակել հավելվածը, մինչ վերջնակետը մնում է հասանելի․ երթուղին չի կարող։ Հակառակը, երթուղին կարող է ամբողջ նախածանց ուղարկել մերժման առանց որևէ փաթեթային զտիչ բեռնելու, ինչը օգտակար է նվազագույն համակարգում։
WireGuard-ի AllowedIPs-ը գաղտնաբանալի երթուղավորում է, ոչ firewall։ Այն որոշում է, թե որ նպատակակետային նախածանցներն են ընդունվում ինտերֆեյսում, և պրոֆիլը, որը թվարկում է միայն թունելի ենթացանցը, պարզապես մյուս նպատակակետերը թողնում է սովորական լռելյայն երթուղուն։ Այդ պատճառով ամբողջական թունելի պրոֆիլներն օգտագործում են 0.0.0.0/0, և այդ պատճառով wg-quick-ը նաև firewall կանոններ է տեղադրում, երբ կարող է։
Թունելի վերջնակետը պահեք մերժումից դուրս
Վերջնակետի արտաքին հասցեն պետք է մնա հասանելի ֆիզիկական ինտերֆեյսով։ Մերժումը, որը նաև որսում է այդ հասցեն, խանգարում է ձեռքսեղմմանը դուրս գալ, և թունելը երբեք չի բարձրանում, ինչը նման է VPN խափանման, ոչ թե երթուղային քաղաքականության։ Ստուգեք վերջնակետի երթուղին փոփոխությունից առաջ և հետո։
Կառավարման հասանելիությունը նույն ստուգատեսի մեջ է։ Եթե դեպի երթուղիչ կամ հաճախորդ միակ ուղին թունելն է, ապա չափազանց լայն մերժումը կարող է ձեզ փակել այն մեքենայից, որը կթույլատրեր հեռացնել այն։ Պահեք փաստաթղթավորված ժապավենից դուրս երթուղի, կոնսոլ կամ ժամանակավորված հետգլում։
IPv6-ը պահանջում է իր գրառումը և իր ստուգատեսը։ Նախագիծը, որը IPv4-ը գցում է blackhole-ի մեջ՝ IPv6-ը թողնելով լռելյայն երթուղու վրա, արտահոսում է հենց այն թրաֆիկը, որը քաղաքականությունը պետք է կանգնեցներ, և սխալն անտեսանելի է միայն IPv4-ով թեստում։
Ներդրեք այն ժամանակաչափով և հետգլումով
Կիրառեք երթուղին կարճ ավտոմատ հեռացմամբ, որպեսզի սխալը չպահպանվի վերագործարկումից հետո։ Ստորև բերված հրամաններն օգտագործում են փաստաթղթային տիրույթ․ փոխարինեք այն նախածանցով, որը ձեր նախագիծն իրականում մերժում է։
sudo ip route replace blackhole 10.0.0.0/8
ip route get 10.1.2.3
sudo systemd-run --on-active=60 /sbin/ip route del blackhole 10.0.0.0/8Երկրորդ հրամանը պետք է հաղորդի blackhole երթուղու և այն աղյուսակի մասին, որտեղից այն եկել է։ Երրորդը պլանավորում է հեռացումը մեկ րոպեից, ինչը բավական ժամանակ է քաղաքականությունը հաստատելու և բավական կարճ՝ հեռավոր հոսթի վրա սխալից վերականգնվելու համար։ Վարքը հաստատելուց հետո գրառումը դարձրեք մշտական նույն կոնֆիգուրացիայի կառավարմամբ, որը պատկանում է մյուս երթուղիներին։
Փակեք փոփոխությունը՝ գրանցելով նախածանցը, աղյուսակը, հասցեների ընտանիքը և հետգլման եղանակը։ Մերժումը երթուղային նախագծում դիտավորյալ բացառություն է, և հաջորդ ինժեները պետք է իմանա, թե որ թրաֆիկն էր այն պետք կանգնեցնել, նախքան որոշելը՝ արդյոք այն դեռ տեղին է։