«Қосалқы жұмыс істейді» деген сөйлемнің ішінде екі нәтиже жасырылған. Жаңа сұраныс сәтті орындалады, бұл — қалпына келу. Қазір жүріп жатқан тасымал жалғасады, бұл — үздіксіздік. Бұл екі түрлі уәде, және көптеген ауысу жобалары біріншісін береді, ал екіншісі үнсіз уақыт бітімімен аяқталады. Тетікті таңдамас бұрын қайсысы керек екенін шешіңіз және сынақты оларды ажырата алатындай етіп жазыңыз.

Бір табысқа ұқсайтын екі нәтиже

10.90.0.42 мекенжайындағы клиенттің 198.51.100.20:443 мекенжайына қосылымы бар деп елестетіңіз. Негізгі шығыс оны бір жария мекенжай мен портқа айналдырады, ал қосалқы шығыс басқасына айналдырады. Клиенттің ішкі мекенжайы ешқашан өзгермейді, сондықтан адамдар қосылым аман қалады деп күтеді.

Сервер ішкі мекенжайды көрмейді. Ол түрлендірілген соңғы нүктені көреді, ал бұл нүкте ауысудан кейін басқаша.

Осылайша ескі ағын уақыт бітімімен аяқталады, ал сол қызметке жаңа қосылым бірден жұмыс істейді. Екі байқау да бір уақытта дұрыс.

Шығыс өзгергенде сервер не көреді

TCP қосылымы өзінің төрттігімен анықталады, ал бастапқы мекенжай немесе порттың өзгеруі қабылдаушы хост үшін басқа қосылым жасайды. Сервер білмейтін қосылымға жаңа көзден келген пакеттер тасталады немесе қайта орнатумен жауап беріледі. VPN клиентінің мекенжайында бұл өзгеріс бойы байланысты сақтайтын ештеңе жоқ.

Күйі бар ауысу дәл осыдан құтылу үшін бар және жіберуші құрылғылар арасында түрлендіру күйі мен қосылым күйін алмасу арқылы жұмыс істейді. Бұл жұптың қасиеті, туннельдің емес, және оны болжаудың орнына жобалап, сынау керек.

Біреуге үздіксіздік уәде етпес бұрын жұптың шынымен күй сақтайтынын тексеріңіз. Төмендегі командалар екі жақтағы ағымдағы күйді көрсетеді.

conntrack -L -d 198.51.100.20 2>/dev/null | head
ss -tin dst 198.51.100.20
tcpdump -ni any host 198.51.100.20 -c 10

Неге бір жария мекенжай жеткіліксіз

Екі жолда бір жария мекенжайды сақтау — жақсы бастама, өйткені сонда сервер сол бастапқы соңғы нүктені көреді. Алайда жалғыз өзі бұл жеткіліксіз. Жіберуші құрылғыға әлі де түрлендіру күйі, брандмауэр күйі және пайдалануға болатын қайтару жолы қажет, және олар ауысудан кейін трафикті таситын құрылғыда болуы керек.

RFC 3022 мекенжайларды түрлендіруді сипаттайды және түрлендіретін құрылғылар арасындағы күй алмасуды қосалқы жобаның бөлігі ретінде қарастырады. Қалқымалы мекенжай немесе көшірілген профиль конфигурацияны жылжытады, бірақ күйді жылжытпайды.

Сондықтан тек қосалқы арқылы ping жасайтын сынақ өте азды дәлелдейді. Ping-нің жоғалтатын қосылым күйі жоқ.

Талаптың қаншалықты күшті екенін шешіңіз

Егер пайдаланушылар ақаудан кейін қайта қосыла алса, жоба — қалпына келтіру жобасы, ал қабылдау сынағы — жаңа сұраныс. Егер файл тасымалы аман қалуы керек болса, жобаға күйді синхрондау және әлдеқайда мұқият сынақ қажет. Егер қашықтағы сессия аман қалуы керек болса, талап одан да күшті және желі деңгейінің орнына қолданба деңгейіндегі тетік қажет болуы мүмкін.

Талапты өлшенетін нәтижесі бар сөйлем ретінде жазыңыз, мысалы жүктеу қайта бастамай-ақ аяқталады немесе оператор бір минут ішінде қайта қосылады. Содан кейін оны қанағаттандыратын ең арзан тетікті таңдаңыз, және бұл көбіне қалпына келтіру жобасы болады.

Негізгі жол қайтып келгенде не болатынын анық айтыңыз, өйткені автоматты қайта оралу қосалқыда жаңа ғана қалпына келген қосылымды үзуі мүмкін. Бұл жағдай сынақ жоспарына жатады, түсіндірмеге емес.

Ескі ағынды және жаңа сұранысты тексеріңіз

Негізгі жол арқылы зиянсыз ұзақ тасымалды бастаңыз, содан кейін сол қызметке бөлек жаңа сұраныс жіберіңіз. Қолданба контексін, байқалған шығыс мекенжайын және уақытты жазып алыңыз. Негізгі жолды мақұлданған тәсілмен үзіп, жаңа сұранысты қосалқы арқылы жіберіп жатқанда бастапқы тасымалды бақылауды жалғастырыңыз.

Үш мәнді хабарлаңыз: ескі ағын жалғасты ма, қайта орнатылды ма әлде уақыт бітімімен аяқталды ма; жаңа операция алғаш рет қашан істеді; және қайта оралу бірдеңені үзді ме. Сол үш жол — қабылдау жазбасы.

ss -tin dst 198.51.100.20
curl -sS -o /dev/null -w '%{http_code} %{time_total}\n' https://198.51.100.20/
tcpdump -ni any port 443 -c 20

Егер жұмыс жүктемесі деректер жазса, уақыт бітімінен кейін белгісіз операцияны соқыр түрде қайталамаңыз. Жазу жауап жоғалмай тұрып жеткен болуы мүмкін. Нәтижені қолданбадан сұраңыз немесе операция идемпотентті болған жерде ғана қайталаңыз. Содан кейін қабылдау мәлімдемесін үш бөлікте жазыңыз: жаңа операциялар шығыс саясаты бойынша қалпына келеді, бар ағындардың құжатталған үзілу мінезі бар, және қолданба қауіпсіз жалғасады. Бұл мәлімдеме тексеріле алады және жоба нені уәде етпейтіні туралы шынайы.

Қатысты мақалалар