Адна машына, дзве задачы, адзін фірвол: Wi-Fi-канал уверх, невялікая сетка Ethernet за ім і кліент VPN для працоўнага стала, які мяркуе, што ўсё, што выходзіць з машыны, лакальнае. Лакальна запушчаныя праграмы выходзяць праз лакальны шлях выхаду. Прылады за працоўнай станцыяй прыходзяць на порт Ethernet і патрабуюць рашэння аб перасылцы. Выключэнне, напісанае для першага шляху, ніколі не бачыць другі, і менавіта таму браўзер абыходзіць тунель, а прылады — не.

Два шляхі пакетаў, адна палітыка

OriginPathDecision owner
Application on the workstationOUTPUT then egressThe VPN app's routing policy
Device behind the workstationPREROUTING then FORWARDThe workstation's own forwarding policy

Першы радок — гэта тое, што апісваюць большасць кіраўніцтваў па split-tunneling. Другі — канфігурацыя маршрутызатара, якая выпадкова жыве на той самай машыне. Зліваць іх у адну разумовую мадэль — памылка; яны дзеляць ядро, а не палітыку. Намалюйце абодва шляхі, перш чым правіць любое правіла, і астатні дызайн вынікае з таго, якога шляху не хапае.

Табліца таксама тлумачыць, чаму адна машына можа прайсці адзін тэст і праваліць іншы. Браўзер на працоўнай станцыі даказвае лакальны шлях; ноўтбук, уключаны ў порт Ethernet, даказвае шлях перасылкі. Правярайце змену абодвума, інакш другі застанецца неправераным, колькі б разоў ні абнаўляўся браўзер.

Што насамрэч класіфікуе выключэнне праграмы

Выключэнне для асобнай праграмы звычайна працуе так: пакетам ад працэса або карыстальніка ставіцца метка, а затым пазначаны трафік накіроўваецца па-за тунель. Гэта канструкцыя лакальнага выхаду. Пакет ад прылады ніжэйшага ўзроўню не мае лакальнага працэса, таму ён ніколі не адпавядае селектару, якім бы селектар ні быў.

Якім бы ні быў селектар, два спісы — не адзін і той жа спіс, і ў гэтым уся справа. Кіраўніцтва Mullvad для Linux апісвае меткі, якія спажываюцца яго фірволам і палітыкай маршрутызацыі, і яго прыклады накіраваныя на лакальны выхад; яны не з'яўляюцца падтрыманым апісаннем маршрутызатара ніжэйшага ўзроўню. Іх капіраванне дае машыну, якая лічыць, што мае выключэнне, але перасылае ўсё ў тунель.

Напішыце кантракт транзіту

Назавіце прэфікс крыніцы ніжэйшага ўзроўню і інтэрфейс уваходу разам, затым абмяжуйце гэты прэфікс на ўваходзе. Без абмежавання любая прылада, якая дасягае порта, можа заявіць выключаны адрас і выйсці праз абыход. Разглядайце гэта як два пытанні: ці могуць гэтыя хасты наогул карыстацца гэтым каналам уверх, і ці могуць яны дасягаць працоўнай станцыі або прыватных дыяпазонаў тунеля? Гэта дадатковыя дазволы, а не пабочныя эфекты выбару канала.

Дазвольце перасылку, затым адфільтруйце яе. Шлюзу Linux трэба ўключаная перасылка, правілы, якія дазваляюць патрэбны трафік у абодвух кірунках, і альбо зваротны маршрут уверх, альбо наўмысна абмежаванае пераўтварэнне крыніцы. NAT сам па сабе не выбірае канал уверх і не дае праходу праз фільтр; ён толькі перапісвае адрас пасля гэтых рашэнняў.

Класіфікацыя для транзіту павінна адбывацца да рашэння аб маршруце перасылкі, гэта значыць на этапе prerouting, а не output. Правіла, размешчанае пасля рашэння, можа змяніць пакет, але не можа змяніць тое, куды пакет ужо быў адпраўлены.

Меткі належаць праграме, якая імі валодае

Значэнні метак, нумары табліц і прыярытэты ланцугоў — частка палітыкі праграмы VPN, а не вечныя канстанты. Устойлівая сетка, якая залежыць ад устаўкі правіла ў табліцу, якую перарабляе іншая праграма, зламаецца пры наступным абнаўленні, звычайна падчас перападключэння, а не ў зручны час.

Даданне другога базавага ланцуга з вердыктам accept не абавязкова пераадольвае drop пазнейшага ланцуга. Базавыя ланцугі маюць хукі і прыярытэты, і першы вердыкт у парадку перамагае; accept у адным ланцугу не адмяняе drop, да якога іншы ланцуг даходзіць раней. Глядзіце на поўны набор правілаў і парадак палітыкі маршрутызацыі, а не на адзін лічыльнік, які вырас. Лічыльнік даказвае, што правіла выканалася, але ніколі — што яго вердыкт быў ужыты.

Інтэгруй або перанясі падсетку

Два дызайны адрозніваюцца тым, хто валодае абыходам. Інтэграваны дызайн захоўвае адну машыну і адну палітыку, коштам залежнасці ад жыццёвага цыкла табліц праграмы VPN і ад набору метак, які яго дакументацыя можа змяніць. Выдзелены маршрутызатар для сеткі ніжэйшага ўзроўню цалкам здымае гэтую залежнасць: падсетка мае ўласны канал уверх, а працоўная станцыя застаецца кліентам без ролі перасылкі.

Выбірайце другі варыянт, калі сетка ніжэйшага ўзроўню павінна працаваць падчас абнаўленняў VPN, або калі ніхто не можа праверыць інтэграваную палітыку пасля кожнага выпуску. Выбірайце першы толькі тады, калі інтэграцыя дакументаваная і хтосьці ёю займаецца.

Праверце мяжу ў чатырох станах: падключана, перападключэнне, наўмысна заблакавана і спынена. Праверце развязанне імёнаў і абедзве сям'і адрасоў у кожным стане, бо абыход, які выдае DNS, — гэта не тое выключэнне, якое вы праектавалі. Тэст павінен даказаць дакладную мяжу, а не проста тое, што загрузілася адна старонка.

Падобныя артыкулы