Жаңа VPN шығысында жаңа қосылымдар, ескі ағындар өз күйінде қалады
Жоспарлы ағызу тек жіктелмеген ағындарды жылжытады. Оны маршрутты ауыстырумен салыстырып, оны ұстап тұратын белгілерді, кестелерді және conntrack күйін қараңыз.
Екі сау VPN шығысы, әлдеқашан жүріп жатқан бір ұзақ жүктеу және келесі қосылымның екінші туннельді пайдалануы туралы талап. Мұны орындаудың екі жолы бар және олардың тек біреуі жұмыс істеп тұрған қақпада қауіпсіз. Әдепкі маршрутты ауыстыру әр пакетті жылжытады, жүктеуге тиесілі пакеттерді де қоса. Жоспарлы ағызу жаңа қосылымдар үшін таңдауды өзгертіп, бақыланатын ағындарды олар басталған жолда қалдырады.
Шығысты ауыстырудың екі жолы
Маршрутты ауыстыру — бір команда және оны секундтарда қайтаруға болады, сондықтан оқиғалар кезінде қолданылады. Ол сондай-ақ айырмашылықсыз: қолданыстағы жүктеу пакеттері кенеттен басқа туннельден шығады, басқа жария бастау адресімен және бөлек аудару күйімен.
Егер алыс жақ ағындарды бастау адресі бойынша бақылайтын болса, жүктеу жай ғана танылмай қалуы мүмкін. Ағызу бұған шешімді әр қосылым үшін бір рет қабылдап, оны сақтау арқылы жол бермейді, сондықтан ескі жүктеу аяқталғанша өз шығысын сақтайды. Бұл — бүкіл жаттығудың құндылығы: алыс жақ түсіндіруі тиіс ешқандай өзгеріс көрмейді. Ол өзі бұрыннан білетін қосылымға сәйкес пакеттерді алуды жалғастырады.
Бағасы — күрделілік: екі маршруттау кестесі, дұрыс ілмекте жұмыс істейтін жіктеуіш және машинадағы оларды пайдаланатын қалғанның бәрімен үйлестірілуі тиіс белгілер.
Әр шығысқа өз кестесін беріңіз
Әр шығыс үшін маршруттау кестесін және екі таңдау үшін бөлек белгі мәндерін немесе биттерін бөліңіз. Әр кестеге тек атау емес, өз рөліне сай маршруттар керек, және жетіспейтін жағдай үшін әдейі сәтсіздік нәтижесі керек. Негізгі кестеге үнсіз құлайтын бос кесте — трафик ешкім таңдамаған шығыстан осылай шығады.
ip rule add fwmark 0x10/0x10 table 101
ip rule add fwmark 0x20/0x20 table 102
ip route add default via 192.0.2.1 dev wg-a table 101
ip route add default via 198.51.100.1 dev wg-b table 102Әр кестенің соңына blackhole маршрутын қосыңыз, сәйкестік таппаған іздеу сіз таңдамаған әдепкіге қашу орнына қатты дауыспен сәтсіз болсын.
Бір рет таңдаңыз, бірінші пакетте
Қосылымды бақылау пайда болғаннан кейін және маңызды маршрут іздеуінен бұрын жіктеңіз. Жаңа, жіктелмеген LAN қосылымы үшін шығысты таңдап, оны қосылым күйіне сақтаңыз. Кейінгі пакеттерде сақталған мәнді саясаттық маршруттау оқитын пакет белгісіне қалпына келтіріңіз.
Нәзік жері — жаңа дегеннің мағынасы. Conntrack жауап көрінбей тұрып ерте пакеттер мен қайта жіберулер үшін әлі де NEW хабарлай алады, сондықтан тек сол күйге сүйенетін жіктеуіш бұрын қабылдаған таңдауды қайта жазуы мүмкін. Бір шығысты тағайындамас бұрын қосылым үшін ешқандай шығыс сақталмағанын тексеріңіз.
nftables пакет және қосылым белгілерін бөлек ұстайды, және метаақпарат нұсқаулығы олардың арасындағы айқын көшірмені құжаттайды. Қосылым белгісі ережеңіз сәйкес келетін пакет белгісіне өздігінен айналмайды, және бұл мұқият жазылған жіктеуіштің әсері болмауының ең көп тараған себебі.
Қалпына келтіруді өзіңіз меңзеген бағыт пен трафикке шектеңіз. Интернет-шығыс белгісін қайтатын пакеттерге қолдану жауаптарды LAN орнына шығысқа қарай жіберуі мүмкін, ал симптомы — firewall мәселесіне ұқсайтын бір бағытты қосылым. Firewall ережесіне тимес бұрын жауап жолын оқыңыз, өйткені пакет маршрутталып жатыр, тек жіберушіге қайта оралмайды.
Ағызудың төрт фазасы
B-ны A-ға тимей дайындаңыз: маршруттау, жіберу, авторизация, NAT және қайту жолы. Оның кестесі мен таңдау саясатын қақпаның қолданыстағы конфигурация иесі арқылы орнатыңыз.
Жіктеуішті ауыстырыңыз, жаңа, жіктелмеген қосылымдар B-ны таңдасын, сақталған таңдаулар сақталсын. Атомдық nftables транзакциясы ескі күйді тазалауға тура келетін терезені болдырмайды.
A ағындары бітпейінше A қосулы тұрсын. Оның интерфейсі, кестесі, алыс шығысы және NAT карталары әлі де сол ағындардың бөлігі, ал NAT ережесін өңдеу бұрыннан бар байланыстарды қайта құрмайды.
Ағызу шарты орындалғанда A-ны тоқтатыңыз, бұл бір тыныш аралықпен емес, қосылымдар күйі мен қолданба мінез-құлқымен бағаланады.
Ағызу уәде бере алмайтын нәрсе
Браузер сұранысы жаңа тасымалдау қосылымы емес; біріктіру сұраныстарды ескі қосылым арқылы жіберуді жалғастырады. Керісінше, UDP ағыны conntrack-тен қартайып, кейінгі пакет қайтадан жіктеледі. Ағызу бақыланатын ағындарды ғана ұстанады, қолданбаның сессия туралы түсінігін емес.
Егер A өз ағындары бітпей тұрып істен шықса, сақталған белгі оларды құтқармайды. Олар B арқылы қайта қосылады, немесе мүлде қосылмайды. Жоспарлы ағызу бастапқы жол сау кезде үздіксіздікті сатып алады; бұл тәуелсіз шығыстар арасындағы күйді көшіру емес.
Екі жартысын да тексеріңіз
Өзгеріс алдында ұзақ мерзімді рұқсат етілген қосылымды және одан кейін шынымен жаңа қосылымды бастаңыз. Әрқайсысы қай туннельді пайдаланатынын және алыс жақ қай жария бастау адресін көретінін растаңыз, содан кейін қайтарым трафигінің қайтатынын тексеріңіз.
Жаңа таңдау көрінуі үшін conntrack кестесін тазартпаңыз. Бұл ағызу сақтауға тиіс күйді дәл жояды және бақыланатын көшіруді таза көрінетін тестпен үзіліске айналдырады.