UFW туннель көтерілген бойда VPN-нің DNS серверін тастайды
UFW-тің әдепкі бас тарту саясаты туннель интерфейсін де қамтиды. Трафикті бағыт бойынша сұрыптап, итерілген resolver-ге tun0-де рұқсат беріп, содан кейін сыртқы жолды ашыңыз.
VPN қосылған сәтте аттар шешілуін тоқтатады, ал қоғамдық мекенжайға ping әлі жауап береді және firewall күйі қате көрінетін ештеңе көрсетпейді. Саясатта ештеңе өзгерген жоқ; өзгергені — жаңа интерфейс пайда болды, ал әдепкі бас тарту оны бірінші пакеттен бастап қамтиды. UFW бағыт пен интерфейс бойынша шешім қабылдайды, сондықтан сымсыз байланыс үшін жазылған ереже туннельден шығатын трафик туралы ештеңе айтпайды. Түзету — белгілі бір ретпен қолданылатын бірнеше тар ереже.
Симптом туннель көтерілгеннен кейін ғана пайда болады
Әдепкі бас тарту саясаты өзіне айтылғанды дәл орындайды: сәйкес ережесі жоқ нәрсенің бәрі бар интерфейстердің бәрінде қабылданбайды. Ережелер жазылған кезде туннель болмаған, сондықтан олардың ешқайсысы оны ұстай алмайды, ал әрқашан болған бас тарту енді ат шешуге қолданылады. Нақты мекенжайға тікелей трафик кеңірек рұқсат қамтығанда әлі жұмыс істеуі мүмкін, сондықтан қоғамдық resolver-ге ping сәтті болады, ал ат іздеу сәтсіз аяқталады. Олқылық — саясат ешқашан көрмеген интерфейске арналған ереже.
Бұл сәтсіздіктің неге таза кері айналатынын да түсіндіреді: туннельді түсіріңіз, аттар қайта шешіледі, өйткені сұраныс ережелері бар интерфейске қайтады. Туннель көтерілгенде ғана сәтсіз болатын саясат DNS мәселесі емес, ал resolver-дің өзін реттеу мұнда ең көп уақытты жоғалтады. Resolver конфигурациясын оқымас бұрын интерфейстер тізімін оқыңыз.
Үш бағыт, үш түрлі ереже жиынтығы
Бір сессия ережелерге бірнеше бағытта қатысады, ал туннель олардың барлығына дерлік екінші интерфейс қосады. Трафикті алдымен бағыт пен интерфейс бойынша сұрыптау қалғанын механикалық етеді, өйткені төмендегі әр жол өз орнында өз ережесін қажет етеді. Мысалдар tun0 мен 10.8.0.0/24 пулын пайдаланады, сондықтан аттар мен диапазондарды клиенттің өз шығысынан алынғандармен ауыстырыңыз.
| Direction | Example packet | Rule that admits it | Written on |
|---|---|---|---|
| Client to the pushed resolver | A DNS query to 10.8.0.1 | Destination port 53 over the tunnel | The client's tun0 |
| Client to the VPN server | A handshake to the server's public address | Server address and port on the physical link | The client's physical interface |
| Server to a service | SSH from the pool to port 22 | Source pool, destination port, tunnel interface | The server's tun0 |
| Anyone to the listener | The VPN listener itself | 1194/udp on the public side | The server's public interface |
Екі жол жиі шатастырылады, өйткені екеуі де туннельді атайды. Resolver ережесі клиент туннельге жіберетін трафикке рұқсат береді, ал SSH ережесі сервер одан алатын трафикке рұқсат береді; олар түрлі машиналарда тұрады және тәуелсіз сәтсіз болады. Ең жиі ұмытылатын жол — екіншісі, өйткені клиент сервердің қоғамдық мекенжайына трафигіне рұқсат берілмейінше туннельді мүлде құра алмайды. Жоғарыдан төмен жұмыс істеңіз, әр сәтсіздіктің бір ықтимал себебі бар.
Итерілген resolver өз ережесін қажет етеді
Туннель DNS таситыны сервердің не жіберетініне байланысты. Resolver опциясын итеретін сервер клиент конфигурациясына жеке мекенжай орнатады, ал бұл мекенжай тек туннель арқылы маршрутталады. Сервер ештеңе итермесе, клиент бұрыннан бар resolver-ді сақтайды және төмендегі ережелерге рұқсат беретін ештеңе қалмайды. Бірдеңе жазбас бұрын итерілген күйді және ағымдағы сұраныс нәтижесін тексеріңіз:
dig +short @10.8.0.1 example.com
resolvectl status tun0
sudo ufw status numberedКүй шығысы пайдаланылып жатқан resolver-ді және ол байланған қосылымды атайды, ал оның артындағы маршрут іздеуі сол мекенжайға сұранысты қай интерфейс таситынын көрсетеді. Resolver басқа қосылымда отырса, мәселе firewall-ден бұрын және ешбір ереже көмектеспейді. Екеуі туннель туралы келіссе, екі ереже қажет, өйткені сұраныстардың көбін UDP тасиды, ал жауап қиылғанда TCP қолға алады. Екі мәнді де жазып алыңыз, өйткені ережелер дәл соларды атайды:
sudo ufw allow out on tun0 to 10.8.0.1 port 53 proto udp comment 'pushed resolver'
sudo ufw allow out on tun0 to 10.8.0.1 port 53 proto tcp comment 'truncated answers'Ішкі жолдан бұрын сыртқы жолды ашыңыз
Клиент туннель пайда болмас бұрын сервердің қоғамдық мекенжайына жетуі керек, сондықтан оған арналған ереже физикалық қосылымда отырады және бірінші болып орнында болуы керек. Resolver-ге рұқсат беріп, серверді ұмытатын саясат клиентті туннельді мүлде құра алмайтын күйде қалдырады, ал бұл симптом әдетте kill switch-ке жабылады. Содан кейін шынымен туннель арқылы қалаған қызметтерге рұқсат беріңіз, бір уақытта бір тар ереже, интерфейсті толық ашудың орнына. Тар ережелер — бас тартудың орнында қалуының себебі.
sudo ufw allow out to 198.51.100.10 port 1194 proto udp comment 'vpn server'
sudo ufw allow out on tun0 to any port 443 proto tcp comment 'web through tunnel'Сынақ кезінде рет маңызды, өйткені туннельдің мүлде көтерілуіне мүмкіндік беретін бірінші ереже. Оны қосыңыз, қосылыңыз және қызмет ережесін қоспас бұрын туннельдің көтерілгенін растаңыз, өйткені екеуін бірге жасау сәтсіздіктің қай жартысы дұрыс емес екенін айтпайды. Жоғарыдағы құжаттама мекенжайын клиент пайдалануға конфигурацияланған соңғы нүктемен ауыстырыңыз.
Клиент жағын әдейі ажырату арқылы аяқтаңыз. Бас тарту әдейі шығарып тастаған трафикті әлі де қабылдамауы керек, өйткені туннель көтерілгенде жауап беретін resolver күмән болғанда бас тартатын саясаттың жартысын ғана қамтиды.
Қосылған клиент әлі қабылданбаған
Сервердің өз бағытын ескеруі керек, ал қол алысуды аяқтаған клиент сервер оны қабылдамайынша серверде жұмыс істейтін ештеңеге жете алмайды. Қоғамдық тыңдаушы ережесі туннельдің болуына ғана рұқсат береді; ол туннель трафигін ішке кіргізбейді. Серверде бұл екі ереже және қызметтің шынымен тыңдап жатқанын тексеретін бір тексеру:
sudo ufw allow 1194/udp comment 'openvpn listener'
sudo ufw limit in on tun0 from 10.8.0.0/24 to any port 22 proto tcp comment 'admin over tunnel'
ss -ltn | grep ':22'Ережедегі пул сервер бөлетін диапазонға тең болуы керек, ал туннель нөмірі сервер жасағанына сәйкес болуы керек, өйткені басқа интерфейске арналған ережені ереженің жоқтығынан ажырату мүмкін емес. limit әкімшілік порт үшін әдейі, өйткені ол қайталанатын қосылымдарды шексіз қабылдаудың орнына шектейді. Тыңдаушыны тексеру жабық портты тасталған пакеттен ажыратады, олар клиент жағынан бірдей көрінеді. Нөмірленген ережелер де толық сурет емес: UFW-ның before ережелері және қолмен жазылған кез келген nftables жолы ертерек сәйкес келеді және тізім рұқсат етеді көрінген пакетті де әлі де қабылдамай қоюы мүмкін.