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 сабы эртерек дал келет жана тизме уруксат берет көрүнгөн пакетти дагы эле четке кагышы мүмкүн.