SSH-ով հասանելի մեքենայի վրա ամբողջական թունելով OpenVPN հաճախորդը միացնելը կարող է նստաշրջանը կտրել մեկ վայրկյանում, և մեքենան ոչ մի սխալ բան չի անում։ Թունելը չի փոխում, թե ինչպես են փաթեթները հասնում սերվերին. այն փոխում է, թե ինչպես են պատասխանները դուրս գալիս։ Հենց որ լռելյայն ուղին մատնանշում է tun0-ին, ձեր SSH հաճախորդին ուղղված պատասխանը մտնում է մատակարարի ցանց, որը ձեր հասցեին վերադառնալու ուղի չունի։ Կապը կախվում է, հաջորդ փորձը ժամանակավարտվում է, և դեյմոնը ողջ ընթացքում լսում է 22 պորտին։

Կարդացեք երթուղային աղյուսակը նախքան VPN մատյանը կարդալը։ Մատյանը կասի, որ թունելը բարձրացել է, և դա ճիշտ է։ Հարցն այն է, թե որ ինտերֆեյսին է հանձնվում յուրաքանչյուր պատասխան, և դա փաթեթ առ փաթեթ որոնում է աղյուսակում, որը թունելը հենց նոր վերագրել է։

Ինչու պատասխանը դուրս է գալիս սխալ դռնով

Մուտքային փաթեթները դեռ հասնում են ֆիզիկական ինտերֆեյս, որովհետև VPN հաճախորդը չի կարող փոխել, թե ինչպես է ինտերնետը հասնում ձեր սերվերի հանրային հասցեին։ Պատասխանները առանձին որոշում են. ամեն փաթեթի համար միջուկը փնտրում է նպատակակետը, և --redirect-gateway-ից հետո լռելյայն գրառումն ասում է թունել։ Մատակարարի ելքը տեսնում է նպատակակետ, որը չի սպասարկում, և գցում է փաթեթը։

OpenVPN-ի սեփական պաշտպանությունը ծածկում է ուղիղ մեկ նպատակակետ։ 2.6 ձեռնարկը --redirect-gateway-ը նկարագրում է որպես հաջորդականություն. այն ավելացնում է հոսթ-ուղի VPN փիրի համար այն դարպասով, որն օգտագործվում էր թունելից առաջ, որպեսզի գաղտնագրված երթևեկությունը չկարողանա վերադառնալ ինքն իր մեջ, ապա փոխարինում է լռելյայն ուղին։ Այդ հոսթ-ուղին միայն փիրի համար է։ Ձեր SSH հաճախորդը պարզապես ևս մեկ ինտերնետ հասցե է և ոչ մի բացառություն չի ստանում։

Արժե վաղ բացառել մեկ նախածանցային սխալ։ Առանց երկարության ip route add -net 0.0.0.0 gw 10.8.0.1 dev tun0 համընկնում է 0.0.0.0 միակ հասցեին, ոչ ինտերնետին. այն պետք է լինի 0.0.0.0/0։ Եվ եթե լռելյայնը վերցնելը կտրում է թունելի սեփական տրանսպորտը, ավելացրեք վերջնակետը որպես հոսթ-ուղի ֆիզիկական ինտերֆեյսով, օգտագործելով մատակարարի իրական հասցեն։

Ամրացրեք ձեր SSH հաճախորդի հասցեն անհապաղ ուղղման համար

Ամենաարագ վերանորոգումը հոսթ-ուղի է ձեր հաճախորդի հասցեի համար այն դարպասով, որն օգտագործում էր սերվերը մինչև թունելի գոյությունը։ Ձեր կողմից գտեք այն հասցեն, որը սերվերը կտեսնի, ապա կարդացեք սերվերի աղյուսակը՝ հին դարպասն իմանալու համար.

curl -s https://ifconfig.co
ip route

Սերվերի վրա ավելացրեք բացառությունը նախքան հաճախորդի մեկնարկը։ Այստեղ հասցեները տեղապահեր են. կարևորը ձևն է.

sudo ip route add 80.128.240.55 via 192.168.178.1

Սա այն վերանորոգումն է, որն օգտագործվել է հաղորդված դեպքում, և այն աշխատում է անմիջապես։ Այն նաև փխրուն է երկու կանխատեսելի ձևով. ուղին անհետանում է վերագործարկման ժամանակ, և այն դառնում է սխալ այն պահին, երբ ձեր ISP-ն ձեզ այլ հասցե է տալիս։ Վերաբերվեք դրան որպես արտակարգ միջոց և դիտավորյալ դարձրեք այն կայուն՝ ցանցային միավորի կամ dispatch-կեռիկի միջոցով, կամ ընդունեք, որ այն ժամանակավոր է, և գրեք վերականգնման ուղին։

Թույլ մի տվեք, որ հաճախորդը վերցնի լռելյայնը

Ավելի մաքուր տարբերակը թույլ չտալն է, որ թունելը ընդհանրապես փոխարինի լռելյայն ուղին։ route-nopull-ը, --client-ի կամ --pull-ի հետ օգտագործելիս, ընդունում է ուղարկված ընտրանքները, բացի ուղիներից, block-outside-dns-ը և DHCP-ոճի ընտրանքներից, ինչպիսիք են DNS սերվերները, այնպես որ ավելացնում եք միայն անհրաժեշտ նախածանցերը։ Ավելի նեղ գործիք է քաշող զտիչը, որը մերժում է մեկ խնդրահարույց հրահանգ և պահում մնացածը.

route-nopull
pull-filter ignore "redirect-gateway"

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

Բաժանեք վերադարձի ուղին ըստ աղբյուրի կամ ըստ կապի

Երբ մուտքային հասցեն կայուն է, աղբյուրի կանոնը պատասխանները պահում է տեղական՝ չդիպչելով թունելի սեփական ուղիներին։ Տվեք ֆիզիկական ինտերֆեյսի հասցեին իր աղյուսակը՝ LAN նախածանցով և ֆիզիկական լռելյայնով, ապա ընտրեք այդ աղյուսակը դրանից եկող երթևեկության համար.

ip rule add from 192.168.1.11 table 128
ip route add table 128 to 192.168.1.0/24 dev eth0
ip route add table 128 default via 192.168.1.1

Սա աշխատում է, որովհետև մուտքային SSH կապին պատասխանները գալիս են այն հասցեից, որին միացել էր հաճախորդը։ Հաղորդված դեպքում, որտեղ յուրաքանչյուր մուտքային ծառայություն պետք է շարունակեր աշխատել, օգտագործվել է հենց այս ձևը։ Երբ մուտքային հասցեն լողում է կամ ուղին դինամիկ է, փոխարենը նշեք կապը. դրեք conntrack նշան ֆիզիկական ինտերֆեյսից եկող առաջին փաթեթին, պատճենեք այն OUTPUT-ի պատասխան փաթեթներին, և նշված փաթեթները երթուղավորեք աղյուսակով, որը մատնանշում է ֆիզիկական դարպասին։

iptables -t mangle -A PREROUTING -i eth0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 1234
iptables -t mangle -A OUTPUT -m connmark --mark 1234 -j MARK --set-mark 4321
ip route add default via 192.168.1.1 dev eth0 table 3412
ip rule add fwmark 4321 table 3412

Փորձարկման ընթացքում առանձին պահեք կապի նշանը, firewall նշանը և աղյուսակի համարը։ Մեկ համարը երկու դերի համար վերօգտագործելը տալիս է կանոն, որը ճիշտ է թվում և համընկնում է սխալ փաթեթներին։ Աղյուսակի լռելյայն գրառմանը նաև պետք է via LAN դարպասով սովորական Ethernet կապում. մերկ dev eth0-ը աշխատում է միայն այն դեպքում, երբ ինտերֆեյսը կետ-կետ է, կամ հաջորդ թռիչքը լուծվում է այլ կերպ։ Հաղորդված Jessie հոսթը պատահաբար գտնվում էր կապի վրա, որտեղ մերկ ձևն աշխատում էր, ինչը պատճենելու ենթակա բաշխման կանոն չէ։

Ստուգեք առանց ձեզ դուրս փակելու

Չփորձարկեք անջատելով։ Բաց պահեք առաջին նստաշրջանը, բարձրացրեք թունելը, և հարցրեք միջուկին, թե որ ուղին կվերցնի ձեր սեփական հասցեն.

ip route get 80.128.240.55

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

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

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