WireGuard DNS DNAT: жооп жолун иштөө абалында кармаңыз
DNAT багыттоону кайра жазат, башталышын эмес. Эрежени коштон мурун жогорку resolver кантип жооп бере аларын чечиңиз жана ар бир дал келүүнү тар кармаңыз.
WireGuard кардарынын DNS суроосун башка resolverге багыттоо бир эрежеге окшошуп, үч чечимдей жүрүм-турум көрсөтөт. Бара турган жерди кайра жазуу керек, пакетти өткөрүү керек, ал эми жооп шлюз түзгөн котормо абалы аркылуу кайра кайтуу жолун табышы керек. Үчүнчүсүн өткөрүп жиберсеңиз, суроо таза чыгып кетет, ал эми кардар түбөлүк күтөт.
10.77.0.0/24 ичиндеги уруксат берилген кардарлар wg0 аркылуу келип, жарыяланган 10.77.0.1 дарегин сурап, 203.0.113.53 дарегинде resolver керек болгон мисалды алалы. Жогорку дарек документ үчүн орун толтургуч, иштеп жаткан кызмат эмес.
Суроону кайра багыттоо анын бара турган жерин гана өзгөртөт
PREROUTING ичиндеги багыттоо-NAT эрежеси маршруттоо чечими кабыл алынганга чейин даректи кайра жазат, ошондуктан пакет кийин эскинин ордуна жаңы багытка маршрутталат. Кардардын башталыш дареги бул операциядан тийбей калат. Ошондуктан толук көрүнгөн эреже да үнсүздүк жаратышы мүмкүн: суроо эми кардардын жеке диапазону тууралуу эч угуп көрбөгөн resolverге барат. Шлюз бир талааны которуп, экинчи маселени мурастады.
DNSтин эки транспортуна тең дал келүүчү эрежелер керек, анткени жооп кесилгенде кардар TCPге кайтат.
Төмөнкү эрежелер бир кирүүчү интерфейсти, бир кардар диапазонун жана бир баштапкы багыт дарегин тандайт. Шлюзде башка эч нерсе таасирленбейт, ал эми шлюздун өз суроосу такыр дал келбейт.
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -i wg0 -s 10.77.0.0/24 -d 10.77.0.1 -p udp --dport 53 -j DNAT --to-destination 203.0.113.53:53
iptables -t nat -A PREROUTING -i wg0 -s 10.77.0.0/24 -d 10.77.0.1 -p tcp --dport 53 -j DNAT --to-destination 203.0.113.53:53
Жооп жолу өзүнчө чечим
Эки жайгаштыруу жооптун кайтышына жол берет, ал эми бирөөнү эрте тандоо бир жөндөө сессиясын үнөмдөйт. Же жогорку resolverдин ушул шлюз аркылуу 10.77.0.0/24 тармагына кайтуучу маршруту бар, же шлюз чыгууда башталышты которот, ошондо жооп жогорку тарап мурдатан билген дарекке жетет. Экөө тең иштейт; жогорку тарапка карата башкарууңузга бирөө гана туура келет.
Маршруттоо биринчи аракетке татыктуу, анткени ал кардардын дарегин resolver үчүн көрүнүктүү кармайт жана экинчи котормо катмарынан качат. Жогорку тарап сиздин башкарууңуздан сыртта болсо, белгилүү чыгуучу интерфейсте башталышты которуу практикалык тандоо.
Бул котормону кайра багыттоо сыяктуу тар чектеңиз, болбосо эреже ага кокустан дал келген нерселердин баары үчүн жалпы максаттагы NATка айланат:
iptables -t nat -A POSTROUTING -s 10.77.0.0/24 -d 203.0.113.53 -o eth0 -p udp --dport 53 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.77.0.0/24 -d 203.0.113.53 -o eth0 -p tcp --dport 53 -j MASQUERADE
Байланыштарды көзөмөлдөө картаны түгөйү менен кармайт, ошондуктан жооп кайтар жолдо кардардын баштапкы tupleине кайра жазылат. Чыгуу эрежесиз resolver жообун жете албаган жеке дарекке жиберет, ал эми кардар катанын ордуна убакыттын бүтүшүн көрөт.
Эрежелерди тапшырма көрүнгөндөн тар жазыңыз
Өткөрүү уруксаты ошол эле чөйрөгө таандык. Машинадагы ар бир DNAT байланышын кабыл алуунун ордуна кардардан resolverге агымды жана conntrack мурдатан тааный турган кайтар трафикти уруксат кылыңыз. Жалпы уруксат DNSке тиешеси жок порт өткөрүүлөргө да уруксат берет.
Шлюздун өз resolverи башка код жолу. Жергиликтүү чыгарылган суроо OUTPUT аркылуу өтөт, ошондуктан шлюз shellинен тесттөө PREROUTING эрежесин да, өткөрүү саясатын да машыктырбайт. Ошондуктан жергиликтүү тест өтүп, ар бир кардар ийгиликсиз болушу мүмкүн, ал эми тескериси да ошондой эле кеңири таралган.
Бул жерде эч нерсе 443 портундагы HTTPS үстүндөгү DNSти же 853 портундагы TLS үстүндөгү DNSти камтыбайт, IPv6ны да камтыбайт. IPv6 resolverи конфигурацияланган кардар бүт жайгаштырууну ыраазы болуп этибарга албайт.
Жаңы суроо эмнени далилдейт
Байланыштарды көзөмөлдөө мурунку карталарды эстейт, ошондуктан эреже өзгөргөнгө чейин жиберилген суроо эски абалдан жооп алып, жаңы эрежени бузук көрсөтүшү мүмкүн. Жаңы башталыш портунан баштаңыз жана кардар жоопторду кэштеген жерде жаңы ат менен баштаңыз.
dig @10.77.0.1 example.com A +short
conntrack -L -p udp --dport 53 | head
Биринчи команда кардар жолу таптакыр чечилерин көрсөтөт, экинчиси шлюз чын эле орноткон котормону tupleдин эки багыты менен кошо көрсөтөт. Туура resolverге көрсөтүп турса да жооп эсептегичи нөлдө катылып калган карта — чыпка эмес, кайтар жол маселеси.
Бир нерсени кайра багыттоодон мурун resolver сиз күткөн аттарды билерин тастыктаңыз. Коомдук аттарга жооп берген, бирок сиздин жеке аймагыңызга жооп бербеген алмаштыргыч иштеп жаткан издөөнү бузук туннелге окшош NXDOMAINга айландырат. Кардар жолу аралашканга чейин resolverди түздөн-түз шлюзден текшериңиз. Ал эми iptables кеңейтүүлөрүнүн маалымдамасы ушул эрежелер таянган DNAT жана masquerade семантикасын документтештирет.