Աջակցության թեման ավարտվում է «սիմետրիկ NAT, VPN-ն այստեղ չի աշխատի» վճռով, և հետո հաճախորդը երեք անգամ առանց պատճառի վերատեղադրվում է։ Պիտակը վնաս է հասցնում, որովհետև պատասխանում է մի հարցի, որը ոչ ոք չի տվել։ Դուրս՝ դեպի ֆիքսված սերվեր միացող հաճախորդը քարտեզագրում է ստեղծում առաջին փաթեթն ուղարկելու պահին, և պատասխանին թույլատրվում է վերադառնալ գրեթե յուրաքանչյուր ցանցի կիրառած կանոններով։ Այն, ինչ վերջնակետից կախված քարտեզագրումը իրականում բարդացնում է, երկու հավասարակիցների փորձն է՝ միաժամանակ հասնել միմյանց, և դա այլ փորձարկում է։

Մեկ պիտակի հետևում երկու հարց է թաքնված

Առաջին հարցն այն է՝ կարո՞ղ է այս ցանցի հետևում գտնվող հոսթը նստաշրջան բացել հայտնի հանրային հասցեի և պորտի հետ։ Թունելի հաճախորդի համար սա սովորական դեպք է, և պատասխանը գրեթե միշտ այո է։ Երթուղիչը գրանցում է ներքին աղբյուրը, հատկացնում արտաքին պորտ և թողնում պատասխանն անցնել, որովհետև այն պատկանում է ներսից սկսված նստաշրջանի։

Երկրորդ հարցն այն է՝ կարո՞ղ են տարբեր ցանցերի հետևում գտնվող երկու հոսթեր գտնել ընդհանուր ուղի և առանց մեջտեղի սերվերի ուղարկել միմյանց։ Դա կախված է նրանից, թե ինչպես է յուրաքանչյուր ցանց հատկացնում այդ արտաքին պորտերը, և քարտեզագրման վարքագիծը նշանակություն ունի միայն այստեղ։

Երկուսը շփոթելը տալիս է դասական սխալ ախտորոշումը՝ հավասարակից-հավասարակից գործառույթը ձախողվում է, ինչ-որ մեկը վազում է NAT-ի տիպի թեստ, տեսնում է ամենավատ կատեգորիան և եզրակացնում, որ սովորական թունելը նույնպես չի կարող աշխատել։ Թունելը երբեք այն չի եղել, ինչը ձախողվել է։

Քարտեզագրումն ու զտումը առանձին հատկություններ են

RFC-ի տերմինաբանությունն ավելի ճշգրիտ է, քան մատակարարների գործածած անունները, և արժե այն տանել տոմսի մեջ, որովհետև այն լուծում է վեճերը։ Քարտեզագրումն այն է, թե ինչպես է հատկացվում արտաքին պորտը։ Զտումն այն է, թե որ մուտքային փաթեթներին է թույլատրվում անցնել։ Ցանցը կարող է խիստ լինել մեկում և ազատ՝ մյուսում, և հենց այդ համադրությունն է, որ հավասարակից-հավասարակից արձանագրությունը պետք է դիմանա։

BehaviourWhat it meansEffect on a direct peer path
Endpoint-independent mappingOne external port for every destinationDiscovery works if the port is advertised
Address-dependent mappingNew port per remote addressWorks only if both sides probe the same pair
Address-and-port-dependentNew port per remote address and portUsually needs a relay

Երրորդ տողն այն է, ինչ շատ սպառողական երթուղիչներ և բջջային օպերատորներ հասկանում են սիմետրիկ ասելով։ Նկատի ունեցեք, որ պիտակը նկարագրում է միայն հատկացումը։ Նման քարտեզագրմամբ և ազատ զտմամբ ցանցը դեռ կարող է ընդունել մուտքային փաթեթներ հենց նոր հատկացված պորտին, այդ պատճառով անցքերի ծակումը ոմանց վրա հաջողվում է, ոմանց վրա՝ ոչ։

Զտումն ունի իր երեք դեպքերը և իր անունը յուրաքանչյուրի համար։ Տոմսի մեջ «սիմետրիկ NAT» գրելը, երբ նկատի ունեք «հասցեից և պորտից կախված զտում», հաջորդ մարդուն ուղարկում է ձեռնարկի սխալ գլուխ։ Երկուսը թեստի ժամանակ այլ կերպ են վարվում, ուստի սխալը ակադեմիական չէ։

Չափե՛ք քարտեզագրումը՝ փոխանակ անվանելու

Հատկացված պորտը կարող եք ուղղակիորեն դիտել ցանկացած UDP ծառայության սերվերի կողմից, որը դուք կառավարում եք։ Սկսեք որսում հանրային հոսթի վրա, ուղարկեք հաճախորդից և կարդացեք այն աղբյուր-պորտը, որով եկել է փաթեթը։

sudo tcpdump -ni eth0 -c 10 'udp port 51820'
sudo wg show wg0 endpoints
sudo conntrack -L -p udp --dport 51820

Վերջնակետի տողն ամենաօգտակարն է երեքից, որովհետև WireGuard-ը գրանցում է վերջին հասցեն և պորտը, որ ստացել է յուրաքանչյուր հավասարակիցից։ Համեմատեք այդ պորտը նրա հետ, ինչ հաճախորդը կարծում է, թե օգտագործում է։ Դրանք կտարբերվեն ամեն անգամ, երբ տեղի է ունենում որևէ փոխակերպում, և կարևոր հարցն այն է՝ մնում է արդյոք արժեքը կայուն։

Կրկնեք դիտումը երկրորդ նպատակակետ-պորտի կամ երկրորդ սերվերի նկատմամբ և նորից համեմատեք։ Եթե արտաքին պորտը փոխվում է ըստ նպատակակետի, քարտեզագրումը կախված է հասցեից և պորտից։ Եթե այն նույնն է մնում, ցանցը ձեզ մեկ քարտեզագրում է տալիս, և հայտնաբերումը շանս ունի։

STUN-ի վրա հիմնված գործիքները նույն դասակարգումը հաղորդում են մեկ քայլով, և դրանք կարելի է օգտագործել, երբ ցանցը թույլատրում է ելքային UDP դեպի հանրային STUN սերվեր։ Երբ չի թույլատրում, վերևի որսման եղանակը դեռ աշխատում է և ոչինչ չի պահանջում, բացի այն հոսթից, որն արդեն ձեր վերահսկողության տակ է։

Ընտրե՛ք խափանմանը համապատասխան ուղղում

Եթե ձախողվող գործառույթը հավասարակից-հավասարակից է, ապա աջակցվող պատասխաններն են ռելեն, հանդիպման ծառայությունը, որին երկու հավասարակիցներն էլ կարող են հասնել, կամ այլ տոպոլոգիա։ TURN-ը հենց դրա համար է գոյություն ունի, և ապրանքը, որն ունի իր սեփական ռելեն, ձեզ ասում է, որ սպասում է որոշ ցանցերի թշնամական վերաբերմունքին։

Եթե ձախողվող գործառույթը սովորական թունել է, քարտեզագրման վարքագիծը ձեր խնդիրը չէ, և վերոնշյալներից ոչ մեկը չի կիրառվում։ Ստուգեք, որ հաճախորդն իրոք ուղարկում է, որ սերվերը տեսնում է փաթեթը, և որ պատասխանը վերադառնում է։ Այդ հաջորդականությունը երեք դիտում է և չի պահանջում իմանալ ոչինչ երթուղիչի NAT կատեգորիայի մասին։

Այն, ինչ չի աշխատում, տեղական պորտի փոփոխություններն են ցրելն այնքան ժամանակ, մինչև ինչ-որ բան միանա։ Հաճախորդի աղբյուր-պորտը փոխելը չի փոխում, թե ինչպես է ցանցը հատկացնում քարտեզագրումները։ Հինգերորդ փորձի պատահական հաջողությունը կեղծ դրական է, և այն ամիսներ շարունակ կմեջբերվի որպես ուղղում։

Արձանագրե՛ք ճարտարապետությունը, ոչ թե վճիռը

Օգտակար նշումն ասում է, թե որ արձանագրությունը, որ ուղղությամբ է սկսվում նստաշրջանը, արդյոք ուղու վրա ռելե կա, և ինչ է դիտվել լարի վրա։ «սիմետրիկ NAT, չի աշխատում» անօգտագործելի է, որովհետև այն միաժամանակ սխալ է թունելի մասին և անտեղեկատու՝ հավասարակցի ուղու մասին։

Ներառեք չափված պորտի կայունությունը և զտման վարքագիծը, եթե փորձարկել եք դրանք։ Այդ երկու փաստերը թույլ են տալիս մեկ ուրիշին կանխատեսել, թե նոր գործառույթը կաշխատի՞ արդյոք այդ ցանցում, առանց ողջ հետաքննությունը կրկնելու։ Դրանք նաև ավելի լավ են ծերանում, քան մատակարարի կատեգորիան, որն ամեն օգնության էջում մի փոքր այլ բան է նշանակում։

Վերջապես, այն գրելիս ձեռքի տակ պահեք RFC 4787-ի տերմինաբանությունը։ Ճշգրիտ տերմինների գործածությունն արժե մեկ նախադասություն և թույլ չի տալիս հաջորդ ընթերցողին կրկնել նույն սխալ ախտորոշումը, և հենց դա է նշումը գրելու ամբողջ իմաստը։

Առնչվող հոդվածներ