{"id":346778,"date":"2023-03-15T15:25:36","date_gmt":"2023-03-15T15:25:36","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=346778"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=346778","title":{"rendered":"<span>\u0427\u0435\u0440\u0435\u0437 \u0440\u0435\u043a\u0438, \u0447\u0435\u0440\u0435\u0437 \u043b\u0435\u0441 \u043f\u0440\u044f\u043c\u043e \u043a PowerDNS<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c, \u044f \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0433\u0440\u0443\u043f\u043f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0432 Ozon. \u041d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445, \u043f\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0435\u0440\u0432\u0438\u0441 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043e\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u043c\u0435\u043d (DNS).<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b94\/aaf\/432\/b94aaf43270c9bbc03ba58d78b15eece.png\" width=\"1920\" height=\"1080\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b94\/aaf\/432\/b94aaf43270c9bbc03ba58d78b15eece.png\"\/><\/figure>\n<p>\u0412 Ozon \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c. \u041e\u043d\u0438 \u043e\u0431\u0449\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c \u043f\u043e \u0434\u043e\u043c\u0435\u043d\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0430\u043c. DNS \u2014 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u0432\u0435\u043d\u043e, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u043d\u0438 \u043e\u0434\u043d\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 DNS \u043e\u0442\u0434\u0430\u0451\u0442 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0442\u043e \u044d\u0442\u043e \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0438\u0442 \u2014 \u043f\u043b\u043e\u0445\u043e, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u0451\u0433 \u2014 \u043e\u0447\u0435\u043d\u044c \u043f\u043b\u043e\u0445\u043e, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u0451\u0433 \u043d\u0430\u0434\u043e\u043b\u0433\u043e \u2014 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f. \u0417\u043d\u0430\u0447\u0438\u0442, \u043e\u0434\u043d\u0430 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u2014 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0435 \u0438, \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043e\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u043c\u0451\u043d. \u041e\u0431 \u044d\u0442\u043e\u043c \u043c\u044b \u0438 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c. \u0422\u0430\u043a\u0436\u0435 \u0437\u0430\u0442\u0440\u043e\u043d\u0435\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043d\u044b\u043c\u0438 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438, \u0436\u0438\u0437\u043d\u044c \u0432 Multi DC-\u0441\u0440\u0435\u0434\u0435, \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 DNS, \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<\/p>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u043c\u0441\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0435\u0439, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0434\u0430 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u0430 \u043a\u0430\u043a \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0432 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438.<\/p>\n<blockquote>\n<p><em>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0433\u043e DNS \u0431\u0443\u0434\u0443\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 (\u043b\u044e\u0431\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u0435\u0442\u0438). \u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u0437\u043e\u043d\u044b \u0443 \u043d\u0430\u0441, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0435\u0441\u0442\u044c, \u043d\u043e, \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438, \u0438\u043c\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 NOC (\u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b), \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u0438\u043d\u0444\u0440\u0443 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041f\u043e \u044d\u0442\u043e\u0439 \u0436\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0442\u044c DNSSEC \u0438 IPv6.<\/em><\/p>\n<\/blockquote>\n<details class=\"spoiler\">\n<summary>Disclaimer<\/summary>\n<div class=\"spoiler__content\">\n<p><em>\u041b\u044e\u0431\u044b\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u043d \u043c\u0430\u0448\u0438\u043d \u0438 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u0438 ip \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b.<\/em><\/p>\n<\/div>\n<\/details>\n<h2>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/h2>\n<p>\u0422\u0430\u043a, \u0430 \u0437\u0430\u0447\u0435\u043c \u043d\u0430\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u0447\u0442\u043e-\u0442\u043e \u043c\u0435\u043d\u044f\u0442\u044c, \u0440\u0430\u0437\u0432\u0435 \u043d\u0430\u0448 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0439 DNS \u043d\u0435\u043d\u0430\u0434\u0451\u0436\u0435\u043d? \u0423 \u043c\u0435\u043d\u044f \u0432\u043e\u0442 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 DNS-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 \u0442\u0440\u0451\u0445 \u0426\u041e\u0414\u0430\u0445, \u0432\u0441\u0435 \u043e\u043d\u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 resolv.conf \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0441\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u0438\u043b\u0451\u0433, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440 \u043f\u043e\u0439\u0434\u0451\u0442 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439, \u0430 \u0437\u0430\u0442\u0435\u043c \u0438 \u0432 \u0442\u0440\u0435\u0442\u0438\u0439.<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 (\u043a\u043e\u0433\u0434\u0430 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0435\u0442\u0438\u0439 \u0426\u041e\u0414) \u0438 \u043f\u0440\u0438 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440\u0430 (option timeout:5), \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 nameserver \u043e\u0442\u0432\u0435\u0442\u0438\u0442 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043f\u0440\u043e\u0448\u0435\u0441\u0442\u0432\u0438\u0438 \u0434\u0435\u0441\u044f\u0442\u0438 \u0441\u0435\u043a\u0443\u043d\u0434, \u0447\u0442\u043e \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u043a\u043e\u0433\u0434\u0430 \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0435\u0442 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u0441 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u043d\u044b\u043c \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u043c \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043e\u043f\u0446\u0438\u044f\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440\u0430, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u0443 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e. \u0422\u043e\u0442 \u0436\u0435 options rotate \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u044b \u0438\u0437 nameserver-\u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 round-robin (\u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438), \u0438 33 % \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u0431\u0435\u0437 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u0432\u2026 \u0422\u041e\u041b\u042c\u041a\u041e 33 %! \u041d\u0430\u043c \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442.<\/p>\n<blockquote>\n<p><em>\u0417\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u041d\u0435 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 resolver.<\/em><\/strong>      <\/p>\n<\/blockquote>\n<p>\u0418\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435. \u0414\u0443\u043c\u0430\u044e, \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u201csmart DNS resolver\u201d. \u041f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0439 DNS forwarder, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0445\u043e\u0441\u0442. \u0415\u0433\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441\u0440\u0430\u0437\u0443 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e DNS-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u2014 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c, \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438\u043c\u0451\u043d.<\/p>\n<p><em>(\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u043e\u043c\u0443-\u0442\u043e \u0442\u0440\u0430\u0444\u0438\u043a x2,3,N \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u044d\u0442\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435.)<\/em><\/p>\n<p>\u0414\u043b\u044f \u0433\u043e\u043c\u043e\u0433\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0435\u0437\u0434\u0435 Linux) \u0441 \u0435\u0434\u0438\u043d\u044b\u043c \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f (DNS \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442 \u043e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432) \u044d\u0442\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435 \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0438, \u0447\u0442\u043e \u043d\u0435\u043c\u0430\u043b\u043e\u0432\u0430\u0436\u043d\u043e, \u2014 \u043f\u0440\u043e\u0441\u0442\u043e\u0435.<\/p>\n<p>\u041d\u043e, \u0443 \u043d\u0430\u0441 \u043d\u0435 \u0433\u043e\u043c\u043e\u0433\u0435\u043d\u043d\u0430\u044f \u0441\u0440\u0435\u0434\u0430 (\u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f Windows, \u043d\u0435\u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u0435\u0441\u0442\u044c), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434; \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0443\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e\u0433\u043e DNS-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0426\u041e\u0414), \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u00absmart DNS\u00bb \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043a\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u0442\u044b\u0441\u044f\u0447\u0438 \u043c\u0430\u0448\u0438\u043d\u2026 \u0422\u043e\u0436\u0435 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442.<\/p>\n<p>\u0412\u043e\u0431\u0449\u0435\u043c, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0433\u0438\u0431\u043a\u043e\u0433\u043e \u0438 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e IP-\u0430\u0434\u0440\u0435\u0441 DNS-\u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f.<\/p>\n<blockquote>\n<p><em>\u0412\u0442\u043e\u0440\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>DNS-\u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432 \u043d\u0430 \u0441\u0435\u0442\u0435\u0432\u043e\u043c (IP \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f) \u0443\u0440\u043e\u0432\u043d\u0435 (L3 OSI).<\/em><\/strong><\/p>\n<\/blockquote>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0437\u0430 \u043e\u0434\u043d\u0438\u043c IP-\u0430\u0434\u0440\u0435\u0441\u043e\u043c \u043d\u0430\u0448\u0435\u0433\u043e DNS-\u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0432\u0430 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 DNS-\u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438 \u0442\u0430\u043a\u043e\u0439 IP \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c VIP-\u0430\u0434\u0440\u0435\u0441\u043e\u043c (Virtual IP), \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 DNS-\u0441\u0435\u0440\u0432\u0435\u0440 \u2014 real (\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c), \u0430 \u043f\u0430\u0447\u043a\u0443 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 DNS-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0437\u0430 VIP \u2014 \u043f\u0443\u043b\u043e\u043c (pool)<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432 Ozon \u0435\u0441\u0442\u044c \u043e\u0431\u0449\u0435\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<blockquote>\n<p><strong><em>\u0421\u0435\u0440\u0432\u0438\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u0443\u044e \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u0433\u043e \u0426\u041e\u0414 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u043c\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 DC-1).<\/em><\/strong><\/p>\n<\/blockquote>\n<p>\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0437\u0430 VIP \u043e\u0434\u0438\u043d \u0438\u0437 real-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u00ab\u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f\u00bb \u0438\u043b\u0438 \u00ab\u043f\u0440\u0438\u043a\u0430\u0437\u0430\u043b \u0434\u043e\u043b\u0433\u043e \u0436\u0438\u0442\u044c\u00bb? \u041f\u043e \u0441\u0443\u0442\u0438, \u043c\u044b \u043f\u043e\u043f\u0430\u0434\u0451\u043c \u0432 \u0442\u0443 \u0436\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u0447\u0442\u043e \u0438 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c resolver, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043a\u0430\u044f \u0434\u043e\u043b\u044f DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043d\u0435 \u043e\u0431\u0441\u043b\u0443\u0436\u0435\u043d\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a (healthchecks) real-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0441 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u0437 \u043f\u0443\u043b\u0430 \u00ab\u0431\u043e\u043b\u044c\u043d\u044b\u0445\u00bb \u0438 \u0437\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u00ab\u0437\u0434\u043e\u0440\u043e\u0432\u044b\u0445\u00bb.<\/p>\n<blockquote>\n<p><em>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 (healthchecks) real-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b VIP.<\/em><\/strong><\/p>\n<\/blockquote>\n<p>\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0443\u0441\u043f\u0435\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b? \u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 \u043d\u0430\u0448 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 DNS \u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430, \u0432\u0441\u0435\u0433\u043e 15-20 \u0442\u044b\u0441. RPS, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043b\u0435\u0433\u043a\u043e \u0432\u044b\u0432\u043e\u0437\u0438\u0442 \u043e\u0434\u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u044d\u0442\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0435 \u043a\u043e\u043f\u0430\u0435\u043c. \u0410 \u0441 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u043f\u043e\u0434\u0430\u0432\u043d\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u0443\u0441\u043f\u0435\u0432\u0430\u043d\u0438\u044f\u00bb \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u043a\u0440\u044b\u0442. \u041e\u043d\u043e \u0443 \u043d\u0430\u0441, \u0441\u043a\u043e\u0440\u0435\u0435, \u0434\u043b\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430.<\/p>\n<blockquote>\n<p><em>\u041f\u044f\u0442\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u0423\u043c\u0435\u0442\u044c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f<\/em><\/strong><em>.<\/em><\/p>\n<\/blockquote>\n<p>\u0420\u0430\u0437 \u0443\u0436 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0426\u041e\u0414, \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u0438 \u043e \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u0445. \u0421\u0442\u0440\u0430\u043d\u043d\u043e \u0445\u043e\u0434\u0438\u0442\u044c \u0432 DNS \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0426\u041e\u0414 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0434 \u0431\u043e\u043a\u043e\u043c \u0435\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 DNS. \u041c\u044b \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 \u0442\u043e\u043c \u0436\u0435 \u0426\u041e\u0414 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0445\u043e\u0434\u0438\u043b\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0435\u0433\u043e \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u0438 \u043e\u0442\u0432\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<blockquote>\n<p><em>\u0428\u0435\u0441\u0442\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u0423\u043c\u0435\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0426\u041e\u0414<\/em><\/strong><em>.<\/em><\/p>\n<\/blockquote>\n<p>\u0410 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043c\u043d\u0435 \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0435\u0433\u043b\u0430\u043c\u0435\u043d\u0442\u043d\u043e\u0435 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u041e\u0421, \u0436\u0435\u043b\u0435\u0437\u043e, \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432)? \u042f \u043c\u043e\u0433\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e DNS-\u0441\u043b\u0443\u0436\u0431\u0443, \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 healthchecks, \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u0437 \u043f\u0443\u043b\u0430 \u0438 \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435\u043c. \u041d\u043e \u0442\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u0441\u043b\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e DNS \u0438 \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u0437 \u043f\u0443\u043b\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439. \u0422\u0430\u043a\u043e\u0435 \u0441\u0435\u0431\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443:<\/p>\n<blockquote>\n<p><em>\u0421\u0435\u0434\u044c\u043c\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u041f\u043b\u0430\u0432\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043c \u0440\u0435\u0433\u043b\u0430\u043c\u0435\u043d\u0442\u043d\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u044b<\/em><\/strong><em>.<\/em><\/p>\n<\/blockquote>\n<p>DNS-\u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u043e\u043d \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 DNS \u0438\u043b\u0438 API. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043d\u0430\u043b\u0438\u0432\u043a\u0438 \u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0445 \u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 (Foreman, MaaS, Terraform \u0438 \u0442.\u0434.).<\/p>\n<blockquote>\n<p><em>\u0412\u043e\u0441\u044c\u043c\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0437\u043e\u043d<\/em><\/strong><em>.<\/em><\/p>\n<\/blockquote>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0447\u0442\u043e \u043d\u0430\u0441\u0447\u0451\u0442 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430?<\/p>\n<p>\u041e\u0447\u0435\u043d\u044c \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u044f \u0431\u044b \u0434\u0430\u0436\u0435 \u0441\u043a\u0430\u0437\u0430\u043b, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438 \u0440\u0430\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u043e\u0432. \u0410 \u0435\u0449\u0451 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0430\u043c \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 geo DNS \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c.<\/p>\n<blockquote>\n<p><em>\u0414\u0435\u0432\u044f\u0442\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u0414\u043e\u043b\u0436\u043d\u044b \u0432\u0438\u0434\u0435\u0442\u044c source IP \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/em><\/strong><em>.<\/em><\/p>\n<\/blockquote>\n<p>\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432? \u0414\u0430, \u043e\u0442\u0434\u0435\u043b \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0441 \u043b\u043e\u0433\u0430\u043c\u0438 debug \u043a\u0443\u0434\u0430 \u043f\u0440\u043e\u0449\u0435 \u0438 \u043f\u0440\u0438\u044f\u0442\u043d\u0435\u0435.<\/p>\n<blockquote>\n<p><em>\u0414\u0435\u0441\u044f\u0442\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u0423\u043c\u0435\u0442\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u044b<\/em><\/strong><em>.<\/em><\/p>\n<\/blockquote>\n<p>\u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0431\u0435\u0437 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043d\u0438\u043a\u0443\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443 DNS-\u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u041f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 Prometheus, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432 Ozon.<\/p>\n<blockquote>\n<p><em>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0432 DNS-\u0441\u0435\u0440\u0432\u0438\u0441 \u043c\u0435\u0442\u0440\u0438\u043a<\/em><\/strong><em>.<\/em><\/p>\n<\/blockquote>\n<h3>\u041f\u0440\u0438\u043a\u0438\u043d\u0435\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443<\/h3>\n<p>\u041f\u043e \u0437\u0430\u0434\u0443\u043c\u043a\u0435 \u043f\u0443\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<p><strong>Client (DNS-query) \u2192 LoadBalancer \u2192 Caching DNS \u2192 Authoritative DNS\u00a0<\/strong><\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b DNS (LoadBalancer, Caching DNS, Authoritative DNS) \u2014 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u043c \u0441\u0445\u0435\u043c\u0443 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f4f\/034\/201\/f4f034201f50923009cb9a5b0af026ba.png\" width=\"1300\" height=\"888\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f4f\/034\/201\/f4f034201f50923009cb9a5b0af026ba.png\"\/><\/figure>\n<p>\u041c\u0430\u0448\u0438\u043d\u044b LoadBalancer (LB) \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u0432\u0445\u043e\u0434\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0443 \u043d\u0438\u0445 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c VIP \u2014 \u0435\u0434\u0438\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 LB \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u043b\u0438\u043a\u0430\u0442\u044c\u0441\u044f. <\/p>\n<h3>VIP (Virtual IP)<\/h3>\n<p>\u041d\u0430 \u0443\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0434\u0432\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438: CARP\/VRRP \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f (BGP). \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/230\/e5d\/3d5\/230e5d3d5e72bc2ca6fa3702a3edad01.png\" width=\"1300\" height=\"993\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/230\/e5d\/3d5\/230e5d3d5e72bc2ca6fa3702a3edad01.png\"\/><\/figure>\n<h3>LoadBalancer <\/h3>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u043e\u0437\u0430\u0431\u043e\u0442\u0438\u043b\u0438\u0441\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u043e healthchecks, \u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442. \u041e\u0431\u044b\u0447\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a (LoadBalancer, \u0438\u043b\u0438 LB). \u0418\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0435\u0433\u043e \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 real-\u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u0438\u0445 real-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u0438 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0445 \u0438\u0437 \u043f\u0443\u043b\u0430 (\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438).\u00a0<\/p>\n<p>\u0422\u0443\u0442 \u043c\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u043b\u0438 \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9ad\/528\/99e\/9ad52899e9b439b9a9f20ead003f61fe.png\" width=\"1705\" height=\"1008\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9ad\/528\/99e\/9ad52899e9b439b9a9f20ead003f61fe.png\"\/><\/figure>\n<details class=\"spoiler\">\n<summary>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0435\u0442\u0438 \u0432 Ozon:<\/summary>\n<div class=\"spoiler__content\">\n<p><em>\u0422\u0440\u0438 \u0426\u041e\u0414. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u0442\u0438, \u0438\u043b\u0438 underlay, \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 Layer 3 Network, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 overlay\u00a0 \u2014 BGP EVPN VXLAN. VLAN \u043c\u0435\u0436\u0434\u0443 \u0426\u041e\u0414 \u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u043d\u0435 \u0442\u044f\u043d\u0443\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u0438.<\/em><\/p>\n<\/div>\n<\/details>\n<p>IPVS NAT mode \u043e\u0431\u044f\u0436\u0435\u0442 \u043d\u0430\u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u0442 \u0436\u0435 IPVS-\u0448\u043b\u044e\u0437, \u0447\u0442\u043e \u0443\u0436\u0435 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043b\u044f real-\u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u0438\u0445 \u0448\u043b\u044e\u0437\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e. \u0423\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442\u0441\u044f debug.<\/p>\n<p>IPVS DR mode \u0437\u0430\u0432\u044f\u0437\u0430\u043d \u043d\u0430 L2-\u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0441\u0435\u0442\u0438. \u0418 \u0435\u0441\u043b\u0438 \u043d\u0435 \u0442\u044f\u043d\u0443\u0442\u044c \u044d\u0442\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0447\u0435\u0440\u0435\u0437 VLAN, \u0442\u043e \u00ab\u043f\u043e\u0448\u0430\u0440\u0438\u0442\u044c\u00bb real-\u0441\u0435\u0440\u0432\u0435\u0440\u044b \u043c\u0435\u0436\u0434\u0443 \u0426\u041e\u0414 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f.<\/p>\n<p>IPVS IPIP \u2014 \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439: \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f GRE-\u0442\u0443\u043d\u043d\u0435\u043b\u044e \u0442\u0440\u0430\u0444\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u0440\u043e\u0448\u0435\u043d \u0432 \u043b\u044e\u0431\u0443\u044e L3-\u0441\u0435\u0442\u044c \u0438 \u043e\u0442\u0434\u0430\u043d \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u043c\u0438\u043d\u0443\u044f IPVS. \u041d\u043e, \u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0438, debug \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433.<\/p>\n<p>\u0412\u044b\u0432\u043e\u0434: \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c Userspace Layer7 LB \u043a\u0430\u043a \u0441\u0430\u043c\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0435\u0442\u0438.<\/p>\n<h3>\u041f\u0440\u043e source IP \u043a\u043b\u0438\u0435\u043d\u0442\u0430 <\/h3>\n<p>\u041e\u0431\u0441\u0443\u0434\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432 \u043b\u043e\u0433\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<h4>EDNS Client Subnet (ECS)<\/h4>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b: \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c (\u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c, \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c, \u0435\u0441\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442) \u043f\u043e\u043b\u0435 ECS \u0432 DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u0435, \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044f \u0442\u0430\u043c source IP \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0441\u0435\u0442\u044c, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 IP, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043c\u0430\u0441\u043a\u0430 \/32 (\u0434\u043b\u044f IPv4). \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u044f ECS \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f L7 LoadBalancer.<\/p>\n<p>\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430: \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 DNS-\u0437\u0430\u043f\u0440\u043e\u0441, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u0435\u0433\u043e \u043d\u0430 Layer7 (OSI), \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u044f ECS \u0432 \u0437\u0430\u043f\u0440\u043e\u0441.\u00a0<\/p>\n<h4>X-Proxied-For (XPF)<\/h4>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438, \u043c\u0435\u0442\u0430-RR (resource record), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443. \u0418\u043c\u0435\u0435\u0442 <a href=\"https:\/\/datatracker.ietf.org\/doc\/draft-bellis-dnsop-xpf\/\"><u>\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441, \u0441 \u0438\u0441\u0442\u0451\u043a\u0448\u0438\u043c \u0434\u0440\u0430\u0444\u0442\u043e\u043c<\/u><\/a>.<\/p>\n<p>\u041d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0435 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c.\u00a0<\/p>\n<h4>Proxy Protocol (PROXYv2)<\/h4>\n<p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u0430\u0445 \u0438 \u043f\u043e\u0440\u0442\u0430\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 header \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 UDP-\u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0438\u043b\u0438 TCP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 nginx, <a href=\"https:\/\/www.haproxy.org\/download\/2.2\/doc\/proxy-protocol.txt\"><u>Haproxy<\/u><\/a> \u0438 \u0442.\u0434.\u00a0<\/p>\n<p>\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0432 lb, resursor \u0438 auth.<\/p>\n<p>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0432 PowerDNS: Dnsdist \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 1.5.0, recursor \u2014 \u0441 4.4.0, auth \u2014 \u0441 4.6.0.<\/p>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u0431\u043e\u0440\u0430 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 source IP \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0441\u0430\u043c\u044b\u043c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f ECS. \u0418 \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430 \u043d\u0430\u0448\u0438\u0445 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u043d\u0435\u0442 (15-20 \u0442\u044b\u0441. RPS), \u043c\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430 \u043d\u0451\u043c.\u00a0<\/p>\n<p>Proxy protocol, \u0447\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c \u0442\u043e\u0433\u0434\u0430 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0443\u0436\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 \u0431\u0438\u043d\u0430\u0440\u0435\u0439. \u041a\u0430\u043a \u0431\u044b \u0442\u0430\u043c \u043d\u0438 \u0431\u044b\u043b\u043e, \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u0440\u0430\u0431\u043e\u0447\u0438\u043c. \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u0440\u0443\u043a\u0438 \u0434\u043e\u0448\u043b\u0438, \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0435\u0433\u043e \u043a\u0430\u043a \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0430 \u0431\u0443\u0434\u0443\u0449\u0435\u0435, \u0435\u0441\u043b\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 ECS \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0435\u0442 \u0445\u0432\u0430\u0442\u0430\u0442\u044c.<\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u0440\u043e source ip \u043e\u0442 Dnsdist <a href=\"https:\/\/dnsdist.org\/advanced\/passing-source-address.html\"><u>\u0437\u0434\u0435\u0441\u044c<\/u><\/a> \u0438 <a href=\"https:\/\/ripe83.ripe.net\/wp-content\/uploads\/presentations\/10-DNS-proxyprotocol.pdf\"><u>\u0437\u0434\u0435\u0441\u044c<\/u><\/a>.\u00a0<\/p>\n<h3>Control Plane <\/h3>\n<p>\u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f RR \u0440\u0430\u043d\u044c\u0448\u0435 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 PowerDNS + <a href=\"https:\/\/doc.powerdns.com\/authoritative\/backends\/generic-postgresql.html\">Generic PostgreSQL backend<\/a>.\u00a0<\/p>\n<p>\u041d\u043e \u043f\u043e\u0441\u043b\u0435 \u0430\u0432\u0430\u0440\u0438\u0438 (\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043d\u0438\u0436\u0435) \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0437\u043e\u043d (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 <a href=\"https:\/\/datatracker.ietf.org\/doc\/html\/rfc2136\">DNS update<\/a>) \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c SQL-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 backend (\u0442\u043e\u0442 \u0436\u0435 PostgreSQL), \u0430 \u0434\u043b\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0434\u043a\u043e \u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0445\u0441\u044f RR \u0432\u0437\u044f\u0442\u044c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u043e\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/doc.powerdns.com\/authoritative\/backends\/bind.html\">BIND zone backend<\/a>.\u00a0<\/p>\n<p>\u0414\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f RR \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u0430\u0434\u043c\u0438\u043d\u043a\u043e\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/github.com\/PowerDNS-Admin\/PowerDNS-Admin\"><u>PowerDNS-Admin<\/u><\/a>. \u0422\u044f\u043f-\u043b\u044f\u043f \u0438 \u0432 production. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0435\u0441\u0451\u0442 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0435 \u0440\u0438\u0441\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u044b \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434. \u041c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u0441 \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u043b\u043e \u043a \u043f\u043b\u0430\u0447\u0435\u0432\u043d\u044b\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f\u043c: \u043f\u043e\u0442\u0435\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u044e \u043d\u0430 \u0432\u0440\u0435\u043c\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0438\u0436\u0435.<\/p>\n<p>\u0422\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.\u00a0<\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u043a\u043e\u0434\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Gitlab. \u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0441\u0442\u0430\u0442\u0438\u043a\u0443 bind-zone? \u041f\u043e\u0434\u0443\u043c\u0430\u0435\u043c.\u00a0<\/p>\n<h3>\u041e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 (Maintenance) <\/h3>\n<p>\u041f\u0440\u0438 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438 \u043b\u044e\u0431\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u043d\u0430\u0448\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043b\u0430\u0432\u043d\u043e \u0443\u0431\u0438\u0440\u0430\u0442\u044c \u0441 \u043d\u0435\u0433\u043e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0431\u0435\u0437 \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u043d\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u0438 \u043f\u043e\u0442\u043e\u043c \u0442\u0430\u043a \u0436\u0435 \u043f\u043b\u0430\u0432\u043d\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c. \u0414\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, switchover.\u00a0<\/p>\n<p>\u041d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043f\u0440\u0438\u0437\u043d\u0430\u043a, \u043f\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e auth, recursor \u0438 \u0441\u0435\u0440\u0432\u0438\u0441 BGP-\u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0439\u043c\u0443\u0442, \u0447\u0442\u043e \u0438\u043c \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043d\u044f\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443. \u041f\u043e \u043e\u043f\u044b\u0442\u0443, \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430: \u0435\u0441\u043b\u0438 \u043e\u043d \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u2014 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b, \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u2014 \u0440\u0435\u0436\u0438\u043c \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f (\u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443).<\/p>\n<h3>\u041b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u0440\u0430\u0444\u0438\u043a\u0430<\/h3>\n<p>\u0422\u0443\u0442 \u0432\u0441\u0451 \u043f\u0440\u043e\u0441\u0442\u043e. Anycast BGP \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043d\u0430 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0439 LoadBalancer. \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0442\u043e\u043c \u0436\u0435 \u0426\u041e\u0414, \u0447\u0442\u043e \u0438 \u043a\u043b\u0438\u0435\u043d\u0442 (\u0435\u0441\u043b\u0438 \u0430\u043d\u043e\u043d\u0441 VIP \u043f\u043e\u0434\u043d\u044f\u0442 \u0438 \u043d\u0435\u0442 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438). \u0414\u0430\u043b\u0435\u0435 LoadBalancer \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 DNS-\u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439, \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 Caching\/Authoritative DNS, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u2014 \u043d\u0430 Caching\/Authoritative DNS, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0439\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u0426\u041e\u0414.<\/p>\n<h3>\u041f\u043e\u0434\u044b\u0442\u043e\u0436\u0438\u043c \u043d\u0430\u0448\u0443 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443\u00a0<\/h3>\n<p>\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u0437\u0430\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0442\u0440\u0438 \u0426\u041e\u0414 \u0447\u0435\u0440\u0435\u0437 BGP anycast. \u0427\u0435\u0440\u0435\u0437 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Equal-cost_multi-path_routing\">ECMP<\/a> \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e Layer7 LoadBalancer, \u0434\u0430\u043b\u0435\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430 Caching DNS, \u0438 \u0437\u0430\u0442\u0435\u043c \u2014 \u043d\u0430 Authoritative DNS.\u00a0<\/p>\n<p>LoadBalancer \u0436\u0438\u0432\u0443\u0442 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2014 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445). Caching DNS \u0438 Authoritative DNS \u0436\u0438\u0432\u0443\u0442 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0435 (VM).\u00a0<\/p>\n<p>\u0421 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u043c \u0446\u0435\u0445\u043e\u043c (NOC, network operation center) \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 BGP-\u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f, \u0431\u0443\u0434\u0443\u0442 \u0436\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0438.\u00a0<\/p>\n<p>Caching DNS \u0438 Authoritative DNS \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u2014 \u0442\u0430\u043a\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u0430, \u043b\u0435\u0433\u043a\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043d\u0435\u0442 \u043b\u0438\u0448\u043d\u0438\u0445 \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0445\u043e\u043f\u043e\u0432.\u00a0<\/p>\n<p>\u0410\u0432\u0442\u043e\u0440\u0438\u0442\u0430\u0442\u0438\u0432\u043d\u044b\u0439 DNS \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0434\u0432\u0430 \u0431\u044d\u043a\u0435\u043d\u0434\u0430: \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0435\u043b\u044c\u0437\u044f \u0443\u0434\u0430\u043b\u0438\u0442\u044c RR \u043b\u0435\u0433\u043a\u0438\u043c \u043a\u043b\u0438\u043a\u043e\u043c \u043c\u044b\u0448\u043a\u0438, \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u043d\u044b\u0439 \u2014 \u0434\u043b\u044f \u0432\u0441\u044f\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 DNS update (Foreman), \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 API (Terraform, MaaS).\u00a0<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u041f\u041e, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0430\u0440\u043e\u0434 \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f (\u0432 RR) \u0432 \u0431\u044d\u043a\u0435\u043d\u0434\u044b, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435.\u00a0<\/p>\n<p>\u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441 \u043c\u0430\u0448\u0438\u043d\u044b LB \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435\u043c BGP-\u0430\u043d\u043e\u043d\u0441\u0430 VIP-\u0430\u0434\u0440\u0435\u0441\u0430, \u0441 \u043c\u0430\u0448\u0438\u043d\u044b Caching\/Authoritative DNS \u2014 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u043c healthcheck \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b LB.\u00a0<\/p>\n<p>Failover: \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 LB-\u043c\u0430\u0448\u0438\u043d BGP-\u0430\u043d\u043e\u043d\u0441 VIP-\u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f, \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u0438\u0434\u0443\u0442 \u043d\u0430 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f LB-\u043c\u0430\u0448\u0438\u043d\u044b.\u00a0<\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0441 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u043e\u0439 \u0441 Caching\/Authoritative DNS \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0447\u0435\u0440\u0435\u0437 healthchecks \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 \u044d\u0442\u043e \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0442\u0440\u0430\u0444\u0438\u043a \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0443 Caching\/Authoritative DNS \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0426\u041e\u0414.\u00a0<\/p>\n<p>Switchover: \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e failover, \u043d\u043e \u0431\u0435\u0437 \u043e\u0442\u043a\u0430\u0437\u0430 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438 \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u2014 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441 \u043c\u0430\u0448\u0438\u043d\u044b LB \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f BGP-\u0430\u043d\u043e\u043d\u0441\u0430 VIP-\u0430\u0434\u0440\u0435\u0441\u0430, \u0441 \u043c\u0430\u0448\u0438\u043d\u044b Caching\/Authoritative DNS \u2014 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u043c healthcheck \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b LB.\u00a0<\/p>\n<p>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0447\u0435\u0440\u0435\u0437 Prometheus.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/790\/399\/c16\/790399c165b0f898fda2492f6fe765d0.png\" width=\"1656\" height=\"1117\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/790\/399\/c16\/790399c165b0f898fda2492f6fe765d0.png\"\/><\/figure>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438, DNS \u2014 \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0441\u0435\u0440\u0432\u0438\u0441, \u0438 \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u043a\u0430\u0442\u043a\u043e\u0439 \u0432 production \u043d\u043e\u0432\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0442\u0435\u0440\u043f\u0438\u043c\u043e\u043c \u043a \u0441\u0431\u043e\u044f\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438. \u0422\u0430\u043a\u0438\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f PowerDNS, \u043a\u0430\u043a \u0438 \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f staging. \u0414\u043b\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f \u043a \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c \u0432 prod \u043d\u0430 PowerDNS \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0432 staging-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430. \u042d\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438\u0437 development- \u0438 staging-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438 \u043f\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443, \u0438 \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c, \u0438 \u043f\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u044e \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u044b \u0432 production \u0438 staging \u043f\u043e\u0447\u0442\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u00ab\u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0439\u00bb \u0437\u043e\u043d\u044b (h.lan). \u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043b\u043e\u0436\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u043e\u043d\u044b \u0434\u043b\u044f production, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0434\u043b\u044f staging \u0438 \u0442.\u0434. \u0412\u0441\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u043c\u0430\u0448\u0438\u043d \u0438\u0437\u043e \u0432\u0441\u0435\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0439 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 h.lan. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u00ab\u0436\u0435\u043b\u0435\u0437\u043d\u0443\u044e\u00bb \u0437\u043e\u043d\u0443 \u043c\u044b \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0447\u0435\u0440\u0435\u0437 \u0435\u0434\u0438\u043d\u044b\u0439 \u044d\u043d\u0434\u043f\u043e\u0438\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f production. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u043b\u0435\u0442\u0435\u0432\u0448\u0438\u0435 \u0432 production, \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0432\u0438\u0434\u0435\u0442\u044c \u0438 \u0432 staging PowerDNS. \u0421\u0432\u044f\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0411\u0414-\u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u0438\u0434\u0435\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0440\u0435\u043f\u043b\u0438\u043a\u0430 \u0438\u0437 staging \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 prod, \u0430 \u0432\u043e\u0442 \u043e\u0431\u044b\u0447\u043d\u0430\u044f master \u2192 slave DNS-\u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f (\u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc5936\">AXFR<\/a>) \u2014 \u0442\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e.\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d35\/956\/5ce\/d359565ced982a509e62b8834ffd9b68.png\" width=\"1300\" height=\"888\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d35\/956\/5ce\/d359565ced982a509e62b8834ffd9b68.png\"\/><\/figure>\n<h2>\u0412\u044b\u0431\u043e\u0440 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f <\/h2>\n<h4>Authoritative DNS \u0438 Caching DNS<\/h4>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 authoritative \u0438 caching DNS \u0443 \u043d\u0430\u0441 \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f PowerDNS, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0441\u043c\u043e\u0442\u0440\u0435\u043b\u0438 \u043d\u0430 \u043d\u0435\u0433\u043e.<\/p>\n<p>PowerDNS Authoritative Server (\u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e pdns auth) \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 SQL-\u0431\u0430\u0437\u044b, \u0444\u0430\u0439\u043b\u044b bind zone, \u043a\u0443\u0447\u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u0432, Lua-\u0437\u0430\u043f\u0438\u0441\u0438 (\u044d\u0442\u043e \u043d\u0430\u043c \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f), \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0434\u043b\u044f Prometheus \u0438 SNMP, \u0438\u043c\u0435\u0435\u0442 API \u0434\u043b\u044f \u043c\u0435\u043d\u0435\u0434\u0436\u043c\u0435\u043d\u0442\u0430 RR \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u0435\u043c\u043e\u043d\u043e\u043c.\u00a0<\/p>\n<p>PowerDNS Caching Server (\u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e pdns recursor) \u2014 \u0432\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u0435\u0448\u0438\u0440\u0443\u044e\u0449\u0438\u0439 DNS-\u0441\u0435\u0440\u0432\u0435\u0440 \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 Lua-\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432. \u041c\u0435\u0442\u0440\u0438\u043a\u0438 \u0442\u043e\u0436\u0435 \u0438\u043c\u0435\u044e\u0442\u0441\u044f.\u00a0<\/p>\n<h4>L7 LoadBalancer<\/h4>\n<p>\u0414\u043e\u043b\u0433\u043e \u0438\u0441\u043a\u0430\u0442\u044c \u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c: \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0432 PowerDNS \u043e\u0431\u043e \u0432\u0441\u0451\u043c \u0443\u0436\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u043b\u0438 \u0438 \u0437\u0430\u0432\u0435\u0437\u043b\u0438 Dnsdist \u2014 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DNS- \u0438 DoS-\u0430\u0442\u0430\u043a.\u00a0<\/p>\n<p>\u0421\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u043e\u0441\u0442\u0438 \u0440\u0430\u0434\u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u043d\u0430\u0433\u0443\u0433\u043b\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b, \u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u0434\u0430\u0436\u0435 \u043e\u0442\u0434\u0430\u043b\u0451\u043d\u043d\u043e \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e\u0449\u0435\u0435 Dnsdist \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c.\u00a0<\/p>\n<h4>BGP<\/h4>\n<p>\u041a\u0440\u043e\u043c\u0435, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, BGP-\u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b healthcheks, \u0447\u0442\u043e\u0431\u044b \u0441\u043d\u044f\u0442\u044c \u0438\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 (\u0443\u0431\u0440\u0430\u0442\u044c \u0438\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0430\u043d\u043e\u043d\u0441 \/32 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 VIP), \u0435\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0441 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, dnsdist, \u0438\u043b\u0438 \u0435\u0441\u043b\u0438 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u043c\u0430\u0448\u0438\u043d\u0443 \u043d\u0430 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435.\u00a0<\/p>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u043b\u0438 \u043c\u0435\u0436\u0434\u0443:\u00a0<\/p>\n<ul>\n<li>\n<p><strong>ExaBGP<\/strong> \u2014 \u0434\u0435\u043c\u043e\u043d\u043e\u043c \u043d\u0430 Python \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 healthchecks, \u043d\u043e \u0431\u0435\u0437 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Bidirectional_Forwarding_Detection\"><u>BFD<\/u><\/a>.<\/p>\n<\/li>\n<li>\n<p><strong>BIRD<\/strong> \u2014 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u0434\u0435-\u0444\u0430\u043a\u0442\u043e \u0432 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438. \u0415\u0441\u0442\u044c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 BFD, \u043d\u043e \u043d\u0435\u0442 healthchecks, \u0442\u043e \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043a\u043e\u0441\u0442\u044b\u043b\u0438\u0442\u044c \u0441\u0431\u043e\u043a\u0443.\u00a0<\/p>\n<\/li>\n<\/ul>\n<p>\u0418\u0437-\u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e BFD \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u043d\u0430 BIRD.\u00a0<\/p>\n<h4>Database &amp; database orchestrator<\/h4>\n<p>\u0414\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f RR PowerDNS \u0442\u0440\u0435\u0431\u0443\u0435\u0442 SQL-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0443\u044e \u0411\u0414. \u0412 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u0438\u0437\u0430 \u0432 PostgreSQL, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0435\u0451. \u0422\u0430\u043a\u0436\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u0432\u0435\u0440\u0445 PostgreSQL \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Patroni, \u0437\u0434\u0435\u0441\u044c \u0432\u044b\u0431\u043e\u0440 \u0442\u043e\u0436\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d.\u00a0<\/p>\n<h2>\u041a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 PowerDNS <\/h2>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0437\u044f\u0442\u044c \u0432\u0441\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u2014 Dnsdist \u2192 PDNS Recursor \u2192 PDNS Auth, \u2014 \u0442\u043e \u0432 \u0441\u0443\u043c\u043c\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u044f\u0442\u044c \u0443\u0440\u043e\u0432\u043d\u0435\u0439, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d. \u041f\u044f\u0442\u044c, \u041a\u0430\u0440\u043b!!! \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u0438\u0445 \u0432\u0441\u0435, \u0442\u043e \u043d\u0430\u0432\u0440\u044f\u0434 \u043b\u0438 debug \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043b\u0451\u0433\u043a\u043e\u0439 \u043f\u0440\u043e\u0433\u0443\u043b\u043a\u043e\u0439.\u00a0<\/p>\n<p>Dnsdist:<a href=\"https:\/\/dnsdist.org\/guides\/cache.html\"> <u>packet cache<\/u><\/a>.\u00a0<\/p>\n<p>PDNS Recursor:<a href=\"https:\/\/doc.powerdns.com\/recursor\/settings.html#packetcache-ttl\"> <u>packet cache<\/u><\/a>,<a href=\"https:\/\/doc.powerdns.com\/recursor\/settings.html#max-cache-entries\"> <u>query cache<\/u><\/a>.<\/p>\n<p>PDNS Auth:<a href=\"https:\/\/doc.powerdns.com\/authoritative\/settings.html#cache-ttl\"> <u>packet cache<\/u><\/a>,<a href=\"https:\/\/doc.powerdns.com\/authoritative\/settings.html#query-cache-ttl\"> <u>query cache<\/u><\/a>.<\/p>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u043a\u0435\u0448\u0430\u043c\u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f.<\/p>\n<p>\u0412 \u043a\u0435\u0448\u0435 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043b\u0435\u0436\u0430\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0443\u0436\u0435 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043e\u0442\u0432\u0435\u0442\u043e\u0432. \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0431\u0435\u0437 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0442\u0434\u0430\u0451\u043c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u043e\u0442\u0432\u0435\u0442\u044b. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u0440\u043e\u0434\u0435 <a href=\"https:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/query-cache.html\"><u>\u043a\u0435\u0448\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 MySQL<\/u><\/a>.\u00a0<\/p>\n<p>Query cache \u0438\u043b\u0438 record cache, \u2014 \u043a\u0435\u0448 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0441\u044e\u0434\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0442\u0432\u0435\u0442\u044b \u043e\u0442 \u0431\u044d\u043a\u0435\u043d\u0434\u0430. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u0440\u044f\u0434\u0443 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u043f\u0430\u0434\u0443\u0442 \u0432 query cache. \u0421\u0430\u043c\u044b\u0439 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 A-\u0442\u0438\u043f\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u0443 CNAME-\u0442\u0438\u043f\u0430.\u00a0<\/p>\n<p>TTL \u0432 \u043e\u0442\u0432\u0435\u0442\u0435 \u0438\u0437 packet cache \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0438\u0437 query cache TTL \u0447\u0435\u0441\u0442\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c\u0441\u044f \u043d\u0430 1 \u0441 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0435\u043a\u0443\u043d\u0434\u043e\u0439.\u00a0<\/p>\n<p>\u0427\u0442\u043e \u0435\u0449\u0435\u2026 <a href=\"https:\/\/doc.powerdns.com\/authoritative\/performance.html#packet-cache\"><u>Packet cache<\/u><\/a> \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043e\u0442\u0432\u0435\u0442\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 TTL (packetcache-ttl), \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a query cache \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 TTL \u0437\u0430\u043f\u0438\u0441\u0438 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u043c, \u043d\u043e \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 max-cache-ttl. \u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0431\u044d\u043a\u0435\u043d\u0434\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u041e\u0417\u0423 (\u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430), \u0442\u043e packet cache \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u0430\u0436\u0435 \u0432\u0440\u0435\u0434\u0435\u043d \u0438 \u043b\u0443\u0447\u0448\u0435 \u0435\u0433\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c.\u00a0<\/p>\n<p>\u041e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0434\u0432\u0430 \u043a\u0435\u0448\u0430. \u041a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e?\u00a0<\/p>\n<p>Dnsdist \u0434\u043b\u044f \u043d\u0430\u0441 \u2014 \u043f\u0440\u043e\u043a\u0441\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0443\u0437\u0435\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u0434\u0430\u043b\u044c\u0448\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043a\u0435\u0448 \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c.\u00a0<\/p>\n<p>PDNS Recursor \u2014 \u043a\u0435\u0448 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u2014 \u0434\u0430, \u043a\u0435\u0448 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u2014 \u043d\u0435\u0442. \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0442\u0435\u0441\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e packet cache \u043d\u0430 \u0431\u044d\u043a\u0435\u043d\u0434\u0435 bind-zone \u043f\u0440\u043e\u0444\u0438\u0442\u0430 \u043d\u0435 \u0434\u0430\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u043c \u0435\u0433\u043e \u0432 pdns, \u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c TTL query cache. \u041e\u043d \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u0443\u0447\u0438\u0442\u044c \u0442\u044f\u0436\u0435\u043b\u044b\u0439 SQL-\u0431\u044d\u043a\u0435\u043d\u0434, \u043d\u043e \u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u043d \u0442\u043e\u0436\u0435 \u0431\u044b\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d (\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435), \u0447\u0442\u043e\u0431\u044b healthcheck \u0441\u043a\u0432\u043e\u0437\u044c SQL-\u0431\u044d\u043a\u0435\u043d\u0434 \u0431\u044b\u043b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c.\u00a0<\/p>\n<h2>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 <\/h2>\n<h3>Dnsdist \u043d\u0430 LoadBalancer (LB) \u0443\u0437\u043b\u0435 <\/h3>\n<p>\/etc\/dnsdist\/dnsdist.conf\u00a0 <\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">--- \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u044b\u0431\u043e\u0440\u0430 \u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0432\u0448\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 setServerPolicy(roundrobin)   --- backends newServer({     pool=\"current_dc\",       ... })  newServer({     pool=\"fallback_dc\",       ... })<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433 <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">--- \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 dns \u0437\u0430\u043f\u0440\u043e\u0441 source ip \u043a\u043b\u0438\u0435\u043d\u0442\u0430 - \/32 \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0435\u0441\u044c ipv4 \u0430\u0434\u0440\u0435\u0441 setECSSourcePrefixV4(32)  --- \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u043c\u0443 \u0434\u0435\u043c\u043e\u043d\u0443 \u0438 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0441 \u043d\u0438\u043c \u043f\u043e\u0434\u0435\u043b\u0430\u0442\u044c controlSocket(\"127.0.0.1:5199\") --- \u0434\u043b\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 setKey(\"\u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439_\u043a\u043b\u044e\u0447\")  --- webui \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0432 realtime  webserver(\"0.0.0.0:8080\") setWebserverConfig({   password=\"\u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439_\u043a\u043b\u044e\u0447_2\",   apiKey=\"\",   statsRequireAuthentication=false,   acl=\"127.0.0.1, ::1, 10.0.0.0\/8\" })  --- \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u0435\u043d\u0438\u0435, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u0440\u0438\u043a\u0438 setAPIWritable(false)  --- \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 53 \u043f\u043e\u0440\u0442\u0443 \u043d\u0430 \u0432\u0441\u0435\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u0445 setLocal(\"0.0.0.0:53\")  --- \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 \u0432\u044b\u0431\u043e\u0440\u0430 \u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u0432\u0448\u0435\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430 setServerPolicy(roundrobin)     --- backends. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u0431\u044d\u043a\u0435\u043d\u0434\u0443 \u043d\u0430 \u0426\u041e\u0414 (1 \u0432 current_dc \u043f\u0443\u043b\u0435, 2 \u0432 fallback_dc \u043f\u0443\u043b\u0435) newServer({   --- \u0430\u0434\u0440\u0435\u0441 \u0431\u044d\u043a\u0435\u043d\u0434\u0430   address=\"10.0.0.1\",   --- \u0438\u043c\u044f \u0431\u044d\u043a\u0435\u043d\u0434\u0430   name=\"powerdns1\",   --- \u043e\u0434\u0438\u043d \u0438\u0437 \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u0432 \u043f\u0443\u043b\u0430 \"fallback_dc\"   pool=\"fallback_dc\",   --- \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0436\u0438\u0432\u043e\u0441\u0442\u0438 \u0431\u044d\u043a\u0435\u043d\u0434\u0430   checkClass=DNSClass.IN,   checkName=\"status.backend.powerdns.lan.\",    checkType=\"TXT\",   checkTimeout=2000,   --- \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c 3 \u0440\u0430\u0437\u0430   maxCheckFailures=3,   --- 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043f\u044b\u0442\u043a\u0430\u043c\u0438   checkInterval=3,   --- \u0434\u043e\u043b\u0436\u043d\u044b \u044f\u0432\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0432\u0435\u0442, \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a   mustResolve=true,   --- \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c ECS   useClientSubnet=true,   --- \u0436\u0434\u0435\u043c 2 \u0443\u0434\u0430\u0447\u043d\u044b\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043f\u0435\u0440\u0435\u0434 \u0432\u0432\u043e\u0434\u043e\u043c \u0431\u044d\u043a\u0435\u043d\u0434\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 \u0441\u0442\u0440\u043e\u0439   rise=2 })  newServer({   address=\"10.0.0.2\",   name=\"powerdns2\",   pool=\"fallback_dc\",   checkClass=DNSClass.IN,   checkName=\"status.backend.powerdns.lan.\",   checkType=\"TXT\",   checkTimeout=2000,   maxCheckFailures=3,   checkInterval=3,   mustResolve=true,   useClientSubnet=true,   rise=2 })  newServer({   address=\"10.0.0.3\",   name=\"powerdns3\",   pool=\"current_dc\",   checkClass=DNSClass.IN,   checkName=\"status.backend.powerdns.lan.\",   checkType=\"TXT\",   checkTimeout=2000,   maxCheckFailures=3,   checkInterval=3,   mustResolve=true,   useClientSubnet=true,   rise=2 })   --- \u0435\u0441\u043b\u0438 \"current_dc\" \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d (\u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0438\u0437 \u0435\u0433\u043e \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u0432), \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432 \u043d\u0435\u0433\u043e addAction(PoolAvailableRule(\"current_dc\"), PoolAction(\"current_dc\")) --- \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u2013 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432 \"fallback_dc\" addAction(AllRule(), PoolAction(\"fallback_dc\")) <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c webserver, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e <a href=\"http:\/\/127.0.0.1:8080\/\"><u>http:\/\/127.0.0.1:8080<\/u><\/a>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/344\/bb2\/197\/344bb2197e8900dbc801a15196966f56.png\" width=\"1846\" height=\"811\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/344\/bb2\/197\/344bb2197e8900dbc801a15196966f56.png\"\/><\/figure>\n<details class=\"spoiler\">\n<summary>\u0418\u043b\u0438 \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0437 CLI:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">lbdns1:~# echo \"showServers()\" | dnsdist -c 127.0.0.1:5100 #   Name                 Address            State     Qps    Qlim Ord Wt    Queries      Drops     Drate   Lat Outstanding Pools 0   powerdns1     10.0.0.1:53         up       0.0       0   1  1          0          0       0.0   0.0           0 fallback_dc 1   powerdns2     10.0.0.2:53         up       0.0       0   1  1     163994       3917       0.0   1.2           0 fallback_dc 2   powerdns3     10.0.0.3:53         up     971.8       0   1  1 5209759184  512719881      80.0  40.3        9603 current_dc 3   powerdns4     10.0.0.4:53         up     972.1       0   1  1 5261742931      17716       0.0  75.2          57 current_dc 4   powerdns5     10.0.0.5:53         up       0.0       0   1  1      23001          0       0.0   0.8           0 fallback_dc 5   powerdns6     10.0.0.6:53         up       0.0       0   1  1      23435          0       0.0   1.1           0 fallback_dc All                                         1943.0                10471712545 512741514  <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0427\u0442\u043e \u0435\u0449\u0451, \u043a\u0440\u043e\u043c\u0435 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438, \u0443\u043c\u0435\u0435\u0442 dnsdist?\u00a0<\/p>\n<p>\u041e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0443\u0433\u043e\u0434\u043d\u044b\u0435 \u043f\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044e \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b, \u043b\u0438\u043c\u0438\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 \u043f\u043e DNS query \u0438 \u043f\u043e IP, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u0430 <a href=\"https:\/\/en.wikipedia.org\/wiki\/EBPF\">eBPF<\/a> \u0434\u043b\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\u0415\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c packet cache \u0432 dnsdist:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">pc = newPacketCache(    10000, --- \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u043a\u044d\u0448\u0435      {      --- \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 ttl      maxTTL=86400,      --- \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 ttl \u0434\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432 \u043a\u044d\u0448      minTTL=0,      --- \u043a\u044d\u0448\u0438\u0440\u0443\u0435\u043c Server Failure or a Refused      temporaryFailureTTL=60,      ---       staleTTL=60,      dontAge=false    }  )  getPool(\"\"):setCache(pc) <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041a\u0435\u0448 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0443\u043b. \u201c\u201d \u2014 \u043f\u0443\u043b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0410 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e<a href=\"https:\/\/dnsdist.org\/reference\/tuning.html#setStaleCacheEntriesTTL\"> <u>setStaleCacheEntriesTTL()<\/u><\/a> \u043c\u043e\u0436\u043d\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 \u043a\u0435\u0448, \u043f\u043e\u043a\u0430 \u0431\u044d\u043a\u0435\u043d\u0434 \u043d\u0435 \u043f\u0440\u0438\u0434\u0451\u0442 \u0432 \u043d\u043e\u0440\u043c\u0443.\u00a0<\/p>\n<h3>BIRD \u043d\u0430 LoadBalancer \u0443\u0437\u043b\u0435<\/h3>\n<p>\u0421\u043e\u043e\u0431\u0449\u0430\u0435\u043c \u043d\u0430\u0448 VIP-\u0430\u0434\u0440\u0435\u0441, \u0430 \u0442\u043e\u0447\u043d\u0435\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043a \u043d\u0435\u043c\u0443 (\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u043c \/32). \u0421\u0430\u043c VIP \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0441\u0435\u0442\u044c \u043d\u0430 dummy-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435, \u0430 \u0430\u043d\u043e\u043d\u0441 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \/32 \u0431\u0443\u0434\u0435\u0442 \u0443\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0432 BGP \u0447\u0435\u0440\u0435\u0437 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \/32. \u0412\u0441\u0451 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u0430\u043c\u0438 \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c monit.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\/etc\/bird\/bird.conf <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">log syslog all; router id 10.1.0.1;  filter z00_p32 {   if net ~ [ 10.10.0.0\/23{32,32} ] then accept;   reject; }  protocol device {   debug { states,routes,filters,interfaces,events,packets }; }  protocol direct {   disabled; }  protocol kernel {   learn;             # Learn all alien routes from the kernel   persist;           # Don't remove routes on bird shutdown   scan time 10;       # Scan kernel routing table every 2 seconds   import filter z00_p32;   export none;      # Export to protocol. default is export none   graceful restart;  # Turn on graceful restart to reduce potential flaps in }  template bgp bgp_template {   debug { states,routes,filters,interfaces,events,packets };   description \"Connection to BGP peer\";   local as 4200000002;   multihop;   gateway recursive; # This should be the default, but just in case.   add paths on;   graceful restart;  # See comment in kernel section about graceful restart.   connect delay time 2;   connect retry time 5;   error wait time 5,30;   import none;   # \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e   export filter z00_p32;   bfd on; } protocol bgp Node_10_1_1_1 from bgp_template {   neighbor 10.1.1.1 as 4200000001;   source address 10.1.0.1; } # bfd, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0430 \u0441\u0435\u0442\u0438 protocol bfd {   interface \"eth*\" {     min rx interval 100 ms;     min tx interval 100 ms;     idle tx interval 300 ms;     multiplier 10;   };   multihop {     interval 200 ms;     multiplier 10;   };   import none;   export filter z00_p32;   neighbor 10.1.1.1 local 10.1.0.1 multihop; } <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h3>Monit \u043d\u0430 LoadBalancer \u0443\u0437\u043b\u0435 <\/h3>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0442\u0440\u0430\u0444\u0438\u043a \u0441\u043d\u0438\u043c\u0430\u043b\u0441\u044f \u0441 \u043c\u0430\u0448\u0438\u043d\u044b, \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442 \u043e\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e Dnsdist, \u0438\u043b\u0438 \u043a\u043e\u0433\u0434\u0430 \u0438\u043d\u0436\u0435\u043d\u0435\u0440 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u0435\u0433\u043b\u0430\u043c\u0435\u043d\u0442\u043d\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u044b.\u00a0<\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439:\u00a0<\/p>\n<ol>\n<li>\n<p>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c healthcheck (\u043e\u0431\u044b\u0447\u043d\u044b\u0439 DNS-\u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u043c\u0443 Dnsdist) \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \/var\/lib\/vip0.down.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043d\u0438\u043c\u0430\u0435\u043c \u0430\u043d\u043e\u043d\u0441 (\u0443\u0434\u0430\u043b\u044f\u0435\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043a vip0), \u0435\u0441\u043b\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 healthcheck \u043d\u0435\u0443\u0441\u043f\u0435\u0448\u0435\u043d \u0438\u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \/var\/lib\/vip0.down.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0430\u043d\u043e\u043d\u0441 (\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043c\u0430\u0440\u0448\u0440\u0443\u0442 \u043a vip0), \u0435\u0441\u043b\u0438 healthcheck \u0443\u0441\u043f\u0435\u0448\u0435\u043d \u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0444\u0430\u0439\u043b \/var\/lib\/vip0.down.<\/p>\n<\/li>\n<\/ol>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0436\u0438\u0432\u043e\u0441\u0442\u0438:\u00a0\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\/usr\/local\/bin\/dns_healthcheck_vip0.sh\u00a0<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#!\/bin\/bash  dummy_iface=vip0 announce_ip=10.50.0.1  check_record=status.backend.powerdns.lan. check_type=TXT check_content=\\\"up\\\"  # check1 if [ -e \"\/var\/lib\/${dummy_iface}.down\" ]; then   echo \"file \/var\/lib\/${dummy_iface}.down is exist\"   exit 1 fi  # check2 _result=$(dig +short +timeout=3 +tries=2 @127.0.0.1 -t ${check_type} ${check_record}) if [ \"${_result}\" != \"${check_content}\" ]; then   echo \"failed to check record ${check_record}\"   exit 22 fi  echo OK<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u043d\u0438\u043c\u0430\u0435\u043c \u0430\u043d\u043e\u043d\u0441 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \/32:\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\/usr\/local\/bin\/bgp_withdraw_vip0.sh<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#!\/bin\/bash  dummy_iface=vip0 announce_ip=10.50.0.1  _result=$(ip route show ${announce_ip}) if [ -n \"${_result}\" ]; then   ip route delete ${announce_ip}\/32 &amp;&amp; echo OK else   echo \"NOTHING TO DO: route ${announce_ip}\/32 not exists\" fi<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0430\u043d\u043e\u043d\u0441 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0430 \/32: <\/p>\n<details class=\"spoiler\">\n<summary>\/usr\/local\/bin\/bgp_announce_vip0.sh <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#!\/bin\/bash  check_vip () {   iface=${1}   ip=${2}   if [[ \"${ip}\" =~ ^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$ ]]; then     ip -brief a | grep \"^${iface} \" | grep \" ${ip}\/32 \" | grep -q -v \" DOWN \"     e_code=$?     if (( e_code != 0 )); then       echo \"Interface \\\"${iface}\\\" is not UP or IP \\\"${ip}\\\" is not match ip format\"       exit 0     fi   fi }  check_maintenance () {   if [ -e \"\/var\/lib\/${dummy_iface}.down\" ]; then     echo \"file \/var\/lib\/${dummy_iface}.down is exist\"     exit 0   fi }   dummy_iface=vip0 announce_ip=10.50.0.1  check_maintenance check_vip ${dummy_iface} ${announce_ip}  _result=$(ip route show ${announce_ip}) if [ -z \"${_result}\" ]; then   ip route add ${announce_ip}\/32 dev ${dummy_iface} &amp;&amp; echo OK else   echo \"NOTHING TO DO: route ${announce_ip}\/32 already exists\" fi<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u044d\u0442\u043e \u0432\u0441\u0451 \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u0430\u043a\u043e\u0433\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0443\u043f\u0435\u0440\u0432\u0438\u0437\u043e\u0440\u0430. \u0421\u0442\u0430\u0440\u044b\u0439 \u0434\u043e\u0431\u0440\u044b\u0439 monit \u0434\u043e\u043b\u0436\u0435\u043d \u0441 \u044d\u0442\u0438\u043c \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\/etc\/monit\/monitrc<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">set daemon 10 set log \/var\/log\/monit.log set idfile \/var\/lib\/monit\/id set statefile \/var\/lib\/monit\/state set eventqueue basedir \/var\/lib\/monit\/events slots 100  check program dns_healthcheck_vip0.sh     with path \/usr\/local\/bin\/dns_healthcheck_vip0.sh     with timeout 8 seconds     if status != 0 for 3 cycles then         exec \/usr\/local\/bin\/bgp_withdraw_vip0.sh         repeat every 5 cycles     if status == 0 for 2 cycles then         exec \/usr\/local\/bin\/bgp_announce_vip0.sh         repeat every 5 cycles<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h3>PDNS Recursor \u043d\u0430 \u0443\u0437\u043b\u0435 PowerDNS<\/h3>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u043e\u0440\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>\/etc\/powerdns\/recursor.conf  <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">allow-from=0.0.0.0\/0, 127.0.0.0\/8, 10.0.0.0\/8, 169.254.0.0\/16, 192.168.0.0\/16, 172.16.0.0\/12, ::1\/128, fc00::\/7, fe80::\/10 api-key=\u0441\u0435\u043a\u0440\u0435\u0442\u043d\u044b\u0439_\u0430\u043f\u0438_\u043a\u0435\u0439 config-dir=\/etc\/powerdns forward-zones-file=\/etc\/powerdns\/recursor-forward.zones hint-file=\/usr\/share\/dns\/root.hints include-dir=\/etc\/powerdns\/recursor.d local-address=0.0.0.0 local-port=53 disable-packetcache=yes #packetcache-ttl=5 #packetcache-servfail-ttl=5 max-cache-ttl=86400 max-negative-ttl=10 quiet=no security-poll-suffix= setgid=pdns setuid=pdns webserver=yes webserver-address=0.0.0.0 webserver-password=\u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440_\u043f\u0430\u0440\u043e\u043b\u044c webserver-port=8082 dnssec=off # \u0430 \u0437\u0434\u0435\u0441\u044c \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u044f\u043a\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0432\u0435\u0449\u0438, \u0442\u0438\u043f\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u043e\u0432\u0430\u0442\u044c maintenance \u0440\u0435\u0436\u0438\u043c \u0438 \u0431\u0435\u0441\u043f\u0430\u0440\u0434\u043e\u043d\u043d\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u043b\u0435\u0442\u0430\u044e\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438 \u043e\u0442\u0432\u0435\u0442\u044b  lua-dns-script=\/etc\/powerdns\/recursor.lua.d\/main.lua lua-maintenance-interval=5 trace=fail loglevel=5 ecs-ipv4-bits=32 use-incoming-edns-subnet=yes<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0432\u0441\u0435 Lua-\u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0432 \u043e\u0434\u0438\u043d \u0444\u0430\u0439\u043b:<\/p>\n<details class=\"spoiler\">\n<summary>\/etc\/powerdns\/recursor.lua.d\/main.lua<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lua\">function fileExists(file)   local f = io.open(file, \"rb\")   if f then     f:close()     return true   end   return false end   dofile(\"\/etc\/powerdns\/recursor.lua.d\/maintenance.lua\") dofile(\"\/etc\/powerdns\/recursor.lua.d\/dns.lua\")<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043e\u0434 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b maintenance. \u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0440\u0435\u0436\u0438\u043c \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u2014 \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442. \u0424\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u0438 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0438 \u0431\u0443\u043b\u0435\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 maintenanceState \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f true \u0438\u043b\u0438 false.\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\/etc\/powerdns\/recursor.lua.d\/dns.lua<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lua\">healthcheckSet = newDS() healthcheckSet:add{\"status.backend.powerdns.lan\"}  function preresolve(dq)   if healthcheckSet:check(dq.qname) then     dq.variable = true                      -- disable packet cache. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043a\u043b\u044e\u0447\u0435\u043d packet cache \u0432 recursor     if maintenanceState == true then       dq.rcode = pdns.NXDOMAIN       return true;     end   end    return false; end<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u043d\u0444\u0438\u0433<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lua\">healthcheckSet = newDS() healthcheckSet:add{\"status.backend.powerdns.lan\"}  backendname_request = \"name.backend.powerdns.lan\" backendname_response = \"\\\"powerdns1.lan\\\"\"  function preresolve(dq)   if healthcheckSet:check(dq.qname) then     dq.variable = true                      -- disable packet cache. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u043a\u043b\u044e\u0447\u0435\u043d packet cache \u0432 recursor     if maintenanceState == true then       dq.rcode = pdns.NXDOMAIN       return true;     end   end    if dq.qname:equal(backendname_request) then     dq.variable = true                      -- disable packet cache     dq.rcode=0                              -- make it a normal answer     dq:addAnswer(pdns.TXT, backendname_response, 1)     -- ttl 1s     return true   end    return false; end<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0424\u0430\u0439\u043b \u0444\u043e\u0440\u0432\u0430\u0440\u0434\u0430 \u0437\u043e\u043d: <\/p>\n<details class=\"spoiler\">\n<summary>\/etc\/powerdns\/recursor-forward.zones  <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lua\"># forward zones h.lan=127.0.0.1:5300 s.lan=127.0.0.1:5300 powerdns.lan=127.0.0.1:5300   # forward zones recurse +k8s.lan=10.2.0.1, 10.2.0.2 +example.net=9.9.9.9 , 8.8.8.8:53, 8.8.4.4  +.=10.9.0.1  # \u0413\u0434\u0435 127.0.0.1:5300 \u044d\u0442\u043e pdns auth<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h3>PDNS Auth \u043d\u0430 \u0443\u0437\u043b\u0435 PowerDNS <\/h3>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0430\u0432\u0442\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u043e\u0433\u043e DNS:<\/p>\n<details class=\"spoiler\">\n<summary>\/etc\/powerdns\/pdns.conf <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">allow-axfr-ips=127.0.0.0\/8, ::1 api=yes api-key=\u0441\u0435\u043a\u0440\u0435\u0442_\u0430\u0440\u0438_\u043a\u0435\u0439 include-dir=\/etc\/powerdns\/pdns.d  # \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c BIND \u0438 PG \u0431\u044d\u043a\u0435\u043d\u0434\u044b launch= local-address=127.0.0.1,10.1.2.1 local-port=5300 cache-ttl=0 negquery-cache-ttl=10 query-cache-ttl=3 security-poll-suffix= setgid=pdns setuid=pdns webserver=yes webserver-address=0.0.0.0 webserver-allow-from=127.0.0.1,10.0.0.0\/8 webserver-password=\u0432\u0435\u0431\u0441\u0435\u0440\u0432\u0435\u0440_\u043f\u0430\u0440\u043e\u043b\u044c webserver-port=8081 enable-lua-records=yes  # \u044d\u0442\u043e \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 LUA RR \u0432 \u0431\u044d\u043a\u0435\u043d\u0434\u0435 primary=no              # \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043f\u043e\u0447\u0435\u043c\u0443 secondary=no            # \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043f\u043e\u0447\u0435\u043c\u0443 xfr-cycle-interval=60 only-notify= also-notify= loglevel=5<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 bind \u0438 gpgsql:<\/p>\n<details class=\"spoiler\">\n<summary>\/etc\/powerdns\/pdns.d\/40_bind.conf <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">launch+=bind bind-config=\/etc\/powerdns\/backend_bind\/zone_bind.conf bind-supermaster-config=\/var\/lib\/powerdns\/supermaster.conf bind-supermaster-destdir=\/var\/lib\/powerdns\/zones.slave.d<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\/etc\/powerdns\/pdns.d\/20_gpgsql.conf <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">launch+=gpgsql gpgsql-host=127.0.0.1 gpgsql-port=5432 gpgsql-dbname=powerdns gpgsql-user=powerdns gpgsql-password=\u043f\u0430\u0440\u043e\u043b\u044c_\u043a_\u0431\u0434 gpgsql-dnssec=yes<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u043f\u043b\u0430\u0433\u0438\u043d\u044b bind \u0438 gpgsql.\u00a0<\/p>\n<p>\u041c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u0438\u0434\u0435\u0435\u0439 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0437\u043e\u043d\u0443 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0431\u044d\u043a\u0435\u043d\u0434\u0430\u0445 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u044b\u0433\u043e\u0434\u0443 \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u0431\u043e\u0438\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u043c \u0431\u044b\u043b\u043e \u0431\u044b \u0443\u0434\u043e\u0431\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u0432\u0441\u0435\u043c \u043f\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0443 bind-\u0444\u0430\u0439\u043b\u043e\u043c, \u043d\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 <a href=\"https:\/\/doc.powerdns.com\/authoritative\/backends\/geoip.html\"><u>GeoIP<\/u><\/a>-\u0431\u044d\u043a\u0430 (\u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 source IP \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u0430\u043c \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e.\u00a0<\/p>\n<p>\u0422\u0430\u043a \u0432\u043e\u0442, \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043f\u0440\u043e \u044d\u0442\u043e. \u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u0432 \u043d\u0430 \u044d\u0442\u043e \u043d\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430. \u0414\u0430, \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0437\u043e\u043d\u0443 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u0438\u043b\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0431\u044d\u043a\u0435\u043d\u0434\u0430\u0445, \u0438 PDNS Auth \u044d\u0442\u043e \u043f\u0440\u043e\u0433\u043b\u043e\u0442\u0438\u0442 \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a, \u043d\u043e \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u0432 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d. \u0417\u043e\u043d\u0443 \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u0431\u044d\u043a\u0430 PDNS Auth \u0432\u043e\u0437\u044c\u043c\u0451\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0439? \u041e\u0442\u0432\u0435\u0442 \u0437\u043d\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c PDNS Auth.\u00a0<\/p>\n<p>\u041c\u043e\u0436\u0435\u0442 \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043e\u043f\u0446\u0438\u0435\u0439 launch=bind \u0432 gpgsql, \u043c\u0435\u043d\u044f\u044f \u043e\u0447\u0435\u0440\u0451\u0434\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u0432. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u044d\u043a\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u044f\u0442\u0441\u044f \u0432 \u0442\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d\u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0432 \u043e\u043f\u0446\u0438\u0438 launch, \u043d\u043e, \u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u044d\u0442\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043f\u043e\u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u0442\u043e, \u0432 \u043a\u0430\u043a\u043e\u0439 \u0431\u044d\u043a PDNS Auth \u043f\u043e\u0439\u0434\u0451\u0442 \u0437\u0430 \u0437\u043e\u043d\u043e\u0439.\u00a0<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440:\u00a0<\/p>\n<ol>\n<li>\n<p>\u0431\u0435\u0440\u0451\u043c bind- \u0438 geoip-\u0431\u044d\u043a\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u043d\u043e \u0441 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u043c\u0441\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c (\u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u0431\u044d\u043a\u0430 \u043f\u0440\u0438\u0448\u0451\u043b \u043e\u0442\u0432\u0435\u0442);<\/p>\n<\/li>\n<li>\n<p>\u0434\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0438\u0437 geoip-\u0431\u044d\u043a\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043c\u0435\u043d\u044f\u0435\u043c \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0431\u044d\u043a\u0438 \u0432 launch;<\/p>\n<\/li>\n<li>\n<p>\u043e\u043f\u044f\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0438\u0437 geoip-\u0431\u044d\u043a\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043c\u0435\u043d\u044f\u0435\u043c serial \u0432 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0438 \u0432 \u043c\u0435\u043d\u044c\u0448\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443;<\/p>\n<\/li>\n<li>\n<p>\u0441\u043d\u043e\u0432\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u0438\u0437 geoip-\u0431\u044d\u043a\u0430;<\/p>\n<\/li>\n<li>\n<p>\u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 bind-\u0431\u044d\u043a;<\/p>\n<\/li>\n<li>\n<p>\u0438\u0449\u0435\u043c \u043f\u043e \u043d\u0435\u0439<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c NXDOMAIN;<\/p>\n<\/li>\n<li>\n<p>\u0443\u0434\u0430\u043b\u044f\u0435\u043c SOA \u0438\u0437 geoip;<\/p>\n<\/li>\n<li>\n<p>\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c REFUSED.\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u0410 \u0432\u043e\u0442 \u0441 \u043f\u0430\u0440\u043e\u0439 bind + gpgsql \u0431\u044b\u043b\u043e \u0447\u0443\u0442\u044c \u0438\u043d\u0430\u0447\u0435: \u043f\u0440\u0438 \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 40_gpgsql.conf \u0438 20_bind.conf (\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0438\u0441\u044c \u0447\u0435\u0440\u0435\u0437 include-dir=\/etc\/powersns\/pdns.d).<\/p>\n<p><strong>\u0412\u044b\u0432\u043e\u0434: \u043a\u0430\u0436\u0434\u0430\u044f \u0437\u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0431\u044d\u043a\u0435\u043d\u0434\u043e\u0432 PDNS Auth.\u00a0<\/strong><\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043e\u0431\u0430 \u0431\u044d\u043a\u0430 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0430\u0440\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.<\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440 PostgreSQL. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0432\u044f\u0437\u043a\u0438 master \u2013> replica \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u043c. \u0413\u043e\u0440\u0430\u0437\u0434\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435 \u043f\u043e\u0434\u044a\u0451\u043c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e HighAvailability (HA)\u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Patroni. \u0412 Ozon \u043f\u043e \u043d\u0435\u043c\u0443 \u043e\u0442\u043b\u0438\u0447\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u0435\u0442\u0435\u043d\u0446\u0438\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u044e\u0440\u043f\u0440\u0438\u0437\u043e\u0432 \u0432 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0431\u044b\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b: \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f HA \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b (PostgreSQL, Patroni, etcd) \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u0435\u0445 \u0436\u0435 \u043c\u0430\u0448\u0438\u043d\u0430\u0445, \u0447\u0442\u043e \u0438 PDNS Auth. \u0421\u0434\u0435\u043b\u0430\u043d\u043e \u044d\u0442\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u0411\u0414 \u0431\u044b\u043b\u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u044b\u043c\u0438, \u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a etcd, \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c\u0438, \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 DNS, \u0434\u0430\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u043e\u0442 \u043d\u0438\u0445.<\/p>\n<blockquote>\n<p><em>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u0444\u0444\u0442\u043e\u043f. \u041d\u0430\u0448 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 etcd-Patroni (\u0442\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u0430 \u043d\u0435 \u0442\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434 DNS), \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0435\u0442 \u0443\u0436\u0435 3,7 \u0442\u044b\u0441. Patroni-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u0438 11 \u0442\u044b\u0441. \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 PostgreSQL \u0432 production.<\/em><\/p>\n<\/blockquote>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433 Patroni \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439:<\/p>\n<details class=\"spoiler\">\n<summary>\/etc\/patroni\/patroni.yml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">--- name: stgpowerdns1.h.lan namespace: \/service\/ scope: powerdns_multidc restapi:   listen: 0.0.0.0:8008   connect_address: 10.40.0.11:8008   authentication:     username: patroni     password: \"somepassword\" bootstrap:   dcs:     ttl: 60     loop_wait: 10     retry_timeout: 20     maximum_lag_on_failover: 1048576     master_start_timeout: 60     synchronous_mode: True     postgresql:       use_pg_rewind: True       use_slots: True       parameters:         wal_level: logical         hot_standby: 'on'         wal_keep_segments: 100         max_wal_senders: 24         max_replication_slots: 30         wal_log_hints: 'on'         max_connections: '100'         max_locks_per_transaction: '64'   initdb: ['encoding=UTF8', 'data-checksums', 'auth-local=trust', 'locale=en_US.UTF-8', 'auth-host=md5', 'auth-local=trust']   pg_hba:     - 'local all all trust'     - 'local replication all trust'     - 'host replication replication 127.0.0.1\/32 trust'     - 'host replication replication 127.0.0.1\/32 md5'     - 'host all all 127.0.0.0\/8 md5'     - 'local all all trust'     - 'host replication replication 10.40.0.11\/32 trust'     - 'host replication replication 10.40.0.12\/32 trust'     - 'host replication replication 10.40.0.13\/32 trust'     - 'host replication replication 10.40.0.14\/32 trust'     - 'host replication replication 10.40.0.15\/32 trust' postgresql:   basebackup:     {'max-rate': '1000M', 'checkpoint': 'fast'}   listen: 0.0.0.0:5432   connect_address: 10.40.0.11:5432   data_dir: \"\/data\/postgresql\"   config_dir: \"\/etc\/postgresql\/12\/main\"   bin_dir: \"\/usr\/lib\/postgresql\/12\/bin\"   use_unix_socket: True   parameters:     unix_socket_directories: \"\/var\/run\/postgresql\"   authentication:     replication:       username: replication       password: \"somepassword2\"     superuser:       username: postgres       password: \"somepassword3\" etcd: # \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435 \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430    protocol: https   cert: \"\/etc\/patroni\/ssl\/patroni.pem\"   key: \"\/etc\/patroni\/ssl\/patroni-key.pem\"   cacert: \"\/etc\/patroni\/ssl\/ca.pem\"   hosts: \"10.40.0.11:2379,10.40.0.12:2379,10.40.0.13:2379,10.40.0.14:2379,10.40.0.15:2379\" watchdog:   mode: \"off\"   device: \"\/dev\/watchdog\"   safety_margin: 5 tags:   noloadbalance: False   nofailover: False   clonefrom: False   nosync: False<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0441\u0435\u0442\u0430\u043f\u0430 \u0411\u0414..<\/p>\n<p>\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0441\u0445\u0435\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u0438 \u0442.\u0434.). \u0414\u043b\u044f PostgreSQL: <a href=\"https:\/\/doc.powerdns.com\/authoritative\/backends\/generic-postgresql.html#default-schema\"><u>https:\/\/doc.powerdns.com\/authoritative\/backends\/generic-postgresql.html#default-schema\u00a0<\/u><\/a><\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0430\u0440\u0443 \u0437\u043e\u043d \u0438 \u043d\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438.<\/p>\n<p>\u0417\u043e\u043d\u0430 <strong>powerdns.lan<\/strong><\/p>\n<p>\u041d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 healthchecks. Dnsdist \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0443 \u0431\u044d\u043a\u0435\u043d\u0434\u0430 status.backend.powerdns.lan \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c PowerDNS \u0443\u0437\u043b\u0435. \u0427\u0442\u043e\u0431\u044b healthcheck \u0431\u044b\u043b \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0430\u043a\u0442\u0443\u0430\u043b\u0435\u043d, \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c pa\u0441ket cache \u043d\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u043e\u0440\u0435, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c TTL \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 1 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0438 \u043a\u0435\u0448 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 3 \u0441\u0435\u043a\u0443\u043d\u0434\u044b (\u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u0443\u0447\u0438\u0442\u044c PostgreSQL).<\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u0437\u043e\u043d\u0443 powerdns.lan \u043c\u044b \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u0432\u043d\u043e\u0441\u0438\u043c, \u0442\u043e \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u043a\u043e\u0441\u044f\u0447\u0438\u0442\u044c, \u0443\u0434\u0430\u043b\u0438\u0432 \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u043a\u043b\u044e\u0447\u0435\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c status.backend.powerdns.lan, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0437\u043e\u043d\u0443 \u0432 \u0411\u0414: pdnsutil create-zone powerdns.lan ns1.powerdns.lan.<\/p>\n<ul>\n<li>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c: pdnsutil edit-zone powerdns.lan.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043c\u043e\u0442\u0440\u0438\u043c: pdnsutil list-zone powerdns.lan.<\/p>\n<\/li>\n<\/ul>\n<details class=\"spoiler\">\n<summary>\u0417\u0430\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">$ORIGIN . powerdns.lan    3600    IN      SOA     ns1.powerdns.lan hostmaster.powerdns.lan 1234568 10800 3600 604800 3600 powerdns.lan    3600    IN      NS      ns1.powerdns.lan. ns1.powerdns.lan        3600    IN      A       10.10.0.1 status.backend.powerdns.lan     1       IN      TXT     \"up\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0417\u043e\u043d\u0430 <strong>h.lan<\/strong> \u2014 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f (\u00ab\u0436\u0435\u043b\u0435\u0437\u043d\u0430\u044f\u00bb) \u0437\u043e\u043d\u0430.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c:<\/p>\n<p>pdnsutil create-zone h.lan ns1.powerdns.lan<\/p>\n<p>pdnsutil edit-zone h.lan<\/p>\n<p>pdnsutil list-zone h.lan<\/p>\n<details class=\"spoiler\">\n<summary>\u0417\u0430\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">$ORIGIN . h.lan   3600    IN      NS      ns1.powerdns.lan. h.lan   3600    IN      SOA     ns1.powerdns.lan hostmaster.powerdns.lan 1234568 10800 3600 604800 3600 powerdns1.h.lan      3600    IN      A       10.40.0.11 powerdns2.h.lan      3600    IN      A       10.40.0.12 powerdns3.h.lan      3600    IN      A       10.40.0.13 powerdns4.h.lan      3600    IN      A       10.40.0.14 powerdns5.h.lan      3600    IN      A       10.40.0.15 ... ...<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u0441\u0451, \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0437\u043e\u043b\u0432 h.lan \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c:<\/p>\n<pre><code class=\"go\">dig @10.10.0.1 +short powerdns3.h.lan 10.40.0.13<\/code><\/pre>\n<p>\u0414\u043b\u044f production \u0437\u043e\u043d\u0443 h.lan \u043c\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043b\u0438, \u0442\u0435\u043f\u0435\u0440\u044c \u0435\u0451 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0442\u0430\u0449\u0438\u0442\u044c \u0432 staging-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435. \u041d\u0430\u0432\u0441\u043a\u0438\u0434\u043a\u0443 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044e PostgreSQL \u0438\u043b\u0438 DNS. DNS-\u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u0432\u0438\u0434\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0433\u0438\u0431\u043a\u0438\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0436\u0435 staging-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0442\u043b\u0438\u0447\u043d\u0443\u044e \u043e\u0442 production \u00ab\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e\u00bb. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/doc.powerdns.com\/authoritative\/modes-of-operation.html#modes-of-operation-axfrfilter\"><u>\u043d\u0430 \u043b\u0435\u0442\u0443 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u0443\u044e \u043f\u043e AXFR \u0437\u043e\u043d\u0443<\/u><\/a>\u00a0 \u0438\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c DNSSEC, \u0447\u0442\u043e \u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u0435 PostgreSQL \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e.<\/p>\n<p>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0434\u043b\u044f staging-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u0441\u0432\u043e\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Patroni \u0438 \u0432\u0441\u0435\u0433\u043e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0433\u043e (PDNS Auth, PDNS Recursor, Dnsdist).<\/p>\n<p>\u0418 \u0434\u0430\u043b\u0435\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043f\u0443\u0442\u0438.\u00a0<\/p>\n<h4>\u041f\u0443\u0442\u044c 1<\/h4>\n<ul>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0432 \u0411\u0414 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u0443\u044e \u0437\u043e\u043d\u0443 h.lan: pdnsutil create-secondary-zone h.lan 10.40.0.11:5300 10.40.0.12:5300 \u0438 \u0442.\u0434.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c pdnsutil edit-zone h.lan.<\/p>\n<\/li>\n<\/ul>\n<p>\u0427\u0442\u043e\u0431\u044b DNS-\u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 PDNS Auth (\/etc\/powerdns\/pdns.conf), \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u0442\u044c secondary=yes. <strong>\u0418 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0442\u043e\u0439 <\/strong>PowerDNS-<strong>\u043c\u0430\u0448\u0438\u043d\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 PostgreSQL \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f primary!<\/strong> \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438 \u043d\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 vm, \u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0437\u043e\u043d\u0443 (AXFR-\u0437\u0430\u043f\u0440\u043e\u0441) \u043f\u0440\u043e\u0446\u0435\u0441\u0441 pdns_server (PDNS Auth) \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0430\u0434\u0430\u0442\u044c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0411\u0414 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f.<\/p>\n<details class=\"spoiler\">\n<summary>\u0417\u0430\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041d\u0443 \u0438 \u043e\u0441\u0442\u0430\u043b\u0441\u044f bind-\u0431\u044d\u043a\u0435\u043d\u0434. \u0422\u0443\u0442 \u0432\u0441\u0451 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e: \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b bind zone, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0441\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432 staging, \u043f\u043e\u0442\u043e\u043c \u0432 production: \/etc\/PowerDNS\/backend_bind\/zone_bind.conf.<\/p>\n<p>\u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0442\u0438\u043f \u0437\u043e\u043d\u044b\/\u0437\u043e\u043d: master, slave \u0438\u043b\u0438 native.<\/p>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c, \u0447\u0442\u043e PDNS Auth (\u0431\u044d\u043a\u0435\u043d\u0434 gpgsql) \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 PostgreSQL, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043c\u0430\u0448\u0438\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f master, \u043d\u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u2014 \u0440\u0435\u043f\u043b\u0438\u043a\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435.<\/p>\n<h4>\u041f\u0443\u0442\u044c 2<\/h4>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u043c \u0432 \u0411\u0414 \u0437\u043e\u043d\u0443 h.lan: pdnsutil create-zone h.lan<\/p>\n<p>\u0417\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u043c: pdnsutil edit-zone h.lan<\/p>\n<p>\u041d\u0430 \u0432\u0441\u0435\u0445 PowerDNS-\u043c\u0430\u0448\u0438\u043d\u0430\u0445 staging-\u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 pdns secondary=yes.<\/p>\n<p>\u0410 \u0437\u043e\u043d\u0443 h.lan (AXFR-\u0437\u0430\u043f\u0440\u043e\u0441) \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<pre><code class=\"cpp\">\/usr\/bin\/pdns_control retrieve h.lan 10.40.0.11:5300.<\/code><\/pre>\n<p>\u0412 \u0447\u0435\u043c \u0442\u0443\u0442 \u0441\u043e\u043b\u044c? \u0427\u0435\u0440\u0435\u0437 secondary=yes \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043c PDNS Auth, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0431\u044b\u043b \u0433\u043e\u0442\u043e\u0432 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0442\u043e\u0440\u0438\u0447\u043d\u043e\u0433\u043e (slave) DNS, \u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043b\u0438 \u043e\u043d \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0431\u0440\u0430\u0442\u044c \u0437\u043e\u043d\u0443 \u0441 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e , \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 (\u0442\u0438\u043f\u043e\u043c) \u0437\u043e\u043d\u044b.<\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 (\u041f\u0443\u0442\u044c 1) \u043c\u044b \u044f\u0432\u043d\u043e \u0437\u0430\u0434\u0430\u043b\u0438 \u0442\u0438\u043f \u0437\u043e\u043d\u044b \u043a\u0430\u043a SECONDARY. \u0418 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 TTL \u0438\u0437 SOA-\u0437\u0430\u043f\u0438\u0441\u0438 PDNS Auth \u043d\u0430\u0447\u0430\u043b \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u00ab\u0441\u0442\u044f\u043d\u0443\u0442\u044c\u00bb \u0437\u043e\u043d\u0443.<\/p>\n<p>\u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 (\u041f\u0443\u0442\u044c 2) \u0442\u0438\u043f \u0437\u043e\u043d\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f NATIVE, \u0447\u0442\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043b\u043e\u0433\u0438\u043a\u0443 PRIMARY (\u043e\u0442\u0441\u044b\u043b\u043a\u0430 notify \u0432\u0441\u0435\u043c NS) \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0437\u043e\u043d\u044b \u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043b\u043e\u0433\u0438\u043a\u0443 SECONDARY (\u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u043f\u0440\u043e\u0441 PRIMARY-\u043c\u0430\u0448\u0438\u043d), \u043d\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 SECONDARY \u043d\u0438\u0432\u0435\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c pdns_control retrieve.\u00a0<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0443\u0442\u044c \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043a\u0440\u0430\u0441\u0438\u0432\u0448\u0435. \u0412\u0441\u0435 \u0443\u0437\u043b\u044b PowerDNS \u0432 staging \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b \u043f\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438:<\/p>\n<ul>\n<li>\n<p>\u043d\u0430 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u0430\u0445 \u0432\u043a\u043b\u044e\u0447\u0435\u043d secondary=yes;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u0430\u0445 \u0435\u0441\u0442\u044c cron-\u0437\u0430\u0434\u0430\u0447\u0430 pdns_control retrieve, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 PostgreSQL \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u043c.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0443 \u0438 \u043e\u0441\u0442\u0430\u043b\u0441\u044f bind-\u0431\u044d\u043a\u0435\u043d\u0434. \u0422\u0443\u0442 \u0432\u0441\u0451 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e: \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0444\u0430\u0439\u043b bind zone, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0441\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0432 staging, \u043f\u043e\u0442\u043e\u043c \u0432 production: \/etc\/PowerDNS\/backend_bind\/zone_bind.conf.<\/p>\n<p>\u041e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0442\u0438\u043f \u0437\u043e\u043d\u044b\/\u0437\u043e\u043d: master, slave \u0438\u043b\u0438 native.<\/p>\n<details class=\"spoiler\">\n<summary>https:\/\/doc.powedns.com\/authoritative\/backends\/bind.html#master-slave-native-configuration <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">zone \"s.lan\" {   file \"\/etc\/powerdns\/backend_bind\/s.lan.zone\";   type native; };<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u0438:<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">s.lan.      3600    IN    SOA    ns1.powerdns.lan hostmaster.powerdns.lan 2021081853 3600 300 604800 300 s.lan.      3600    IN    NS     ns1.powerdns.lan. db1.s.lan.  600     IN    A      10.100.0.45 web1.s.lan. 600     IN    A      10.100.0.47<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0437\u043e\u043d\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437 \u0440\u0435\u0441\u0442\u0430\u0440\u0442\u0430 pdns_server (PDNS Auth) \u0441\u043b\u0443\u0436\u0431\u044b:<\/p>\n<pre><code class=\"go\">\u00a0\/usr\/bin\/pdns_control bind-reload-now s.lan<\/code><\/pre>\n<h3>\u0414\u043e\u0441\u0442\u0430\u0432\u043a\u0430 resource records \u0434\u043e PowerDNS <\/h3>\n<p>\u041f\u0430\u0440\u0443 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 \u0443 \u043d\u0430\u0441 \u0441\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u00ab\u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439\u00bb \u0442\u0430\u043a\u043e\u0439 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u0432\u0451\u043b \u043a \u0434\u0430\u0443\u043d\u0442\u0430\u0439\u043c\u0443 <a href=\"http:\/\/ozon.ru\">ozon.ru<\/a> \u043d\u0430 \u0447\u0430\u0441 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0438 \u0443\u0431\u044b\u0442\u043a\u0443 \u0432 \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443. \u041f\u0440\u043e\u0441\u0442\u043e \u0438\u0437 PowerDNS \u043f\u0440\u043e\u043f\u0430\u043b\u0430 \u0431\u041e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0435\u0439.\u00a0<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443? \u0412\u0441\u0451 \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u0439 \u0441\u0430\u043c\u043e\u0439 \u0430\u0434\u043c\u0438\u043d\u043a\u0435, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u043f\u0438\u0441\u0430\u043b \u0432\u044b\u0448\u0435, PowerDNS-Admin \u2014 WebUI \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043d\u044b\u043c\u0438 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438 \u0432 PowerDNS. \u0418 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u0440\u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0432\u043d\u0435\u0441\u0442\u0438 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438, \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0444\u043e\u0440\u043c\u0430\u0442\u0430 RR, \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c, \u0442\u043e \u044d\u0442\u043e\u0442 UI \u0442\u0438\u043f\u0430 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u0435\u0442.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/86d\/f8b\/bd1\/86df8bbd19bc418b6f6a7598d5f6fc09.png\" width=\"1210\" height=\"800\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/86d\/f8b\/bd1\/86df8bbd19bc418b6f6a7598d5f6fc09.png\"\/><\/figure>\n<p>\u041e\u043d \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u0447\u043a\u0443 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439, \u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430. \u0412 \u043e\u0431\u0449\u0435\u043c, \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u0442\u0430\u0431\u043b\u0438\u0447\u043a\u0430 PostgreSQL records \u043f\u043e\u0442\u0451\u0440\u043b\u0430\u0441\u044c \u0438\u0437-\u0437\u0430 \u043d\u0435\u0432\u0435\u0440\u043d\u043e \u0432\u043d\u0435\u0441\u0451\u043d\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438, \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437 \u2014 \u043d\u0443, \u043d\u0430\u0434\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u043e\u0448\u0438\u0431\u043b\u0438\u0441\u044c \u0432 \u0441\u0432\u043e\u0438\u0445 \u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f\u0445, \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e, \u0430 \u0432 \u0442\u0440\u0435\u0442\u0438\u0439 \u0440\u0430\u0437 \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0440\u043e\u0433\u043d\u0443\u043b\u0430 \u0440\u0443\u043a\u0430.\u00a0<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 <a href=\"https:\/\/github.com\/PowerDNS-Admin\/PowerDNS-Admin\/issues\/752\"><u>\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430<\/u><\/a> \u0438 \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435 \u0431\u044b\u043b\u0430 \u0440\u0435\u0448\u0435\u043d\u0430. \u0412 \u0438\u0442\u043e\u0433\u0435, \u0430\u0434\u043c\u0438\u043d\u043a\u0443 \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0448\u043b\u0438 \u043d\u0430 pdnsutil edit-zone &lt;zone>.\u00a0<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0434\u0443\u043c\u0430\u0435\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u044d\u043a\u0441\u0446\u0435\u0441\u0441\u043e\u0432, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0438 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u0430 \u043f\u0440\u0438 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u0438 \u043f\u0440\u0430\u0432\u043e\u043a \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0435 \u0437\u043e\u043d\u044b.\u00a0<\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443 \u2014 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0439\u0441\u044f \u043d\u0430\u0431\u043e\u0440 SQL-\u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438:<\/p>\n<ol>\n<li>\n<p>\u0420\u0435\u0434\u043a\u043e \u043c\u0435\u043d\u044f\u044e\u0449\u0443\u044e\u0441\u044f. \u041f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0435\u0451 \u0432 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0439 \u0431\u044d\u043a\u0435\u043d\u0434 \u0442\u0438\u043f\u0430 bind<\/p>\n<\/li>\n<li>\n<p>\u0427\u0430\u0441\u0442\u043e \u043c\u0435\u043d\u044f\u044e\u0449\u0443\u044e\u0441\u044f \u2014 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0431\u044d\u043a, \u0442\u0438\u043f\u0430 SQL.\u00a0<\/p>\n<\/li>\n<\/ol>\n<p>\u0422\u0430\u043a \u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u043c: \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 (s.lan) \u0432\u044b\u043d\u043e\u0441\u0438\u043c \u0432 bind-\u0431\u044d\u043a\u0435\u043d\u0434, \u0430 \u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 (h.lan) \u2014 \u0432 GPGSQL.\u00a0<\/p>\n<p>\u0421 GPGSQL \u0432\u0441\u0451 \u043f\u043e\u043d\u044f\u0442\u043d\u043e: \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0443 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u0437\u043e\u043d\u0443 \u0447\u0435\u0440\u0435\u0437 CLI pdnsutil edit-zone &lt;zone>, \u0431\u043b\u0430\u0433\u043e \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e, \u0432\u0435\u0434\u044c \u043e\u0431\u044b\u0447\u043d\u043e \u0437\u0430 \u043d\u0430\u0441 \u044d\u0442\u0443 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 Terraform \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u043d\u0430\u043b\u0438\u0432\u0430\u0442\u043e\u0440 \u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0445 \u0438\u043b\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d.\u00a0<\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c \u0441\u043e \u0441\u043c\u0435\u043d\u043e\u0439 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043c\u044b, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043d\u0435 \u0438\u043c\u0435\u0435\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u0438\u0445 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u043c (\u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d \u0438\u043b\u0438 \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f). \u041f\u043e\u0434\u0445\u043e\u0434 \u0442\u0430\u043a\u043e\u0439: \u0435\u0441\u043b\u0438 \u0445\u043e\u0447\u0435\u0448\u044c \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443 \u0438\u043b\u0438 \u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u0432 \u0434\u0440\u0443\u0433\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u2014 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0434\u0440\u0443\u0433\u043e\u0439 \u0426\u041e\u0414, \u2014 \u0442\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0435\u0440\u0435\u043d\u0430\u0441\u0442\u0440\u043e\u0439: \u0437\u0430\u0434\u0430\u0439 \u043d\u043e\u0432\u043e\u0435 \u0438\u043c\u044f, IP-\u0430\u0434\u0440\u0435\u0441 \u0438 \u0442.\u0434.\u00a0<\/p>\n<p>\u0410 \u043a\u0430\u043a \u0431\u044b\u0442\u044c \u0441\u043e \u0441\u0442\u0430\u0442\u0438\u043a\u043e\u0439? \u041c\u043e\u0436\u0435\u0442, \u0432 Git \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c?\u00a0<\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b CI\/CD \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f <a href=\"https:\/\/gitlab.com\/\"><u>gitlab<\/u><\/a> (\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f. \u043a\u043e\u043d\u0435\u0447\u043d\u043e). \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430 \u043d\u0451\u043c \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f.\u00a0<\/p>\n<p>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u044b\u043a\u0430\u0442\u043a\u0438 \u0442\u0430\u043a\u043e\u0439:\u00a0\u00a0<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443.<\/p>\n<\/li>\n<li>\n<p>\u0412\u043d\u0435\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u043e\u043d\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043a\u043e\u043c\u043c\u0438\u0442\u0438\u0442\u044c \u0438 \u0437\u0430\u043f\u0443\u0448\u0438\u0442\u044c \u0432 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0442\u043a\u0443.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0442\u044c MR.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u043a\u043e\u043b\u043b\u0435\u0433 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0438 \u0437\u0430\u0430\u043f\u0440\u0443\u0432\u0438\u0442\u044c.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0434\u0430\u0447\u043d\u043e\u0433\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447\u0438 zones check \u043c\u0435\u0440\u0436\u0438\u043c MR.<\/p>\n<\/li>\n<li>\n<p>\u0416\u0434\u0451\u043c, \u043f\u043e\u043a\u0430 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 pipeline \u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441\u0442\u0430\u0434\u0438\u0438 diff staging \u0438 diff production.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c diff -\u0437\u043e\u043d\u044b (\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e \u043e\u0434\u043d\u043e\u0439 job \u0438\u0437 diff staging\/diff production).\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 diff \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0430\u0448\u0438\u043c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f\u043c, \u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0437\u0430\u0434\u0430\u0447\u0443stgpowerdns1.lan.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u043e\u043d\u0430 stgpowerdns1.lan \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0435\u043c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 Deploy staging \u0438 Deploy production.<\/p>\n<\/li>\n<\/ol>\n<p>Gitlab pipeline \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>.gitlab-ci.yml<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"yaml\">--- include:   - local:   \".vault.gitlab-ci.yml\"  stages:   - build   - validate   - diff staging   - diff production   - deploy staging   - deploy production  workflow:   rules:     - &amp;merge_and_changes       if: $CI_MERGE_REQUEST_ID               # Execute jobs in merge request context       changes: &amp;change_list         - Dockerfile         - .gitlab-ci.yml         - bind\/zones\/*     - &amp;master_and_changes       if: $CI_COMMIT_BRANCH == 'master'      # Execute jobs when a new commit is pushed to master branch       changes:         *change_list     - when: never     - allow_failure: false  .master.on_success:   rules:     - if: $CI_COMMIT_BRANCH == 'master'      # Execute jobs when a new commit is pushed to master branch       when: on_success  variables:   TARGET_IMAGE: $CI_REGISTRY_IMAGE\/deploy:latest   WORKDIR: workdir\/$CI_PIPELINE_ID   ZONES_FILE: workdir\/$CI_PIPELINE_ID\/zones.list   SSH_PRIVATE_KEY: .ssh_private_key   VAULT_SECRET: deploy:ssh_private_key  create image:   extends: .containers.build   stage: build   variables:     BUILD_DST: ${TARGET_IMAGE}     DOCKERFILE_PATH: Dockerfile   when: manual  zones check:   stage: validate   image: ${TARGET_IMAGE}   script:     - unset COMMIT_FIRST COMMIT     - rm -rf ${WORKDIR}     - mkdir -p ${WORKDIR}     - git config --global url.\"https:\/\/gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.lan\/\".insteadOf \"ssh:\/\/git@gitlab.lan\/\"     - echo \"Searching for zones changed\"     - |       if [[ -n \"$CI_MERGE_REQUEST_ID\" ]]; then         COMMIT=$CI_COMMIT_SHA         echo $COMMIT       fi     - |       if [[ -z \"$CI_MERGE_REQUEST_ID\" ]]; then         COMMITS=\"$(git show --pretty=format:%P $CI_COMMIT_SHA | head -1 || true)\"         COMMIT_FIRST=${COMMITS%% *}         COMMIT=${COMMITS##* }       fi     - git diff-tree --no-commit-id --name-only -r ${COMMIT} bind\/zones\/*     - |       for zone_file in $(git diff-tree --no-commit-id --name-only -r ${COMMIT} bind\/zones\/*); do         echo ${zone_file##*\/}       done | sort | uniq > ${ZONES_FILE}     - |       if [[ -s \"${ZONES_FILE}\" ]]; then          echo -e \"\\e[1m\\e[34mProcceding zones\\e[0m\"         echo -e \"\\e[1m\\e[34m================\\e[0m\"         cat ${ZONES_FILE}         echo -e \"\\e[1m\\e[34m================\\e[0m\"         # gen config         for ZONE in $(cat ${ZONES_FILE}); do           echo \"           zone \\\"${ZONE}\\\" {             file \\\"\/tmp\/pdns\/zones\/${ZONE}\\\";             type native;           };\" >> \/tmp\/pdns\/zone.conf           cp bind\/zones\/${ZONE} \/tmp\/pdns\/zones\/${ZONE}           echo \"${ZONE}\"           echo -e \"\\e[1m\\e[34m--------\\e[0m\"           cat \/tmp\/pdns\/zones\/${ZONE}           echo -e \"\\e[1m\\e[34m========\\e[0m\"         done         # run powerdns         pdnsutil create-bind-db \/tmp\/pdns\/dnssec-db         pdns_server --config-dir=\/tmp\/pdns\/ --daemon=no --write-pid=no --disable-syslog &amp;         sleep 5         echo -----------------         find \/tmp\/pdns         echo -----------------         cat \/tmp\/pdns\/pdns.conf         echo -----------------         cat \/tmp\/pdns\/zone.conf         echo -----------------         # reload zones         for ZONE in $(cat ${ZONES_FILE}); do           pdns_control bind-reload-now ${ZONE} | grep 'parsed into memory'         done         pdnsutil --config-dir=\/tmp\/pdns check-all-zones       else          echo -e \"\\e[1m\\e[34mNo zone files found in the commit. Nothing to do. Exit\\e[0m\"         exit 10       fi   artifacts:     paths:       - ${ZONES_FILE}     expire_in: 1 week  # ====== #  DIFF # ======  .diff_zone_script:   image: ${TARGET_IMAGE}   extends: .vault_before_script   script:     - vault_get_secret ${VAULT_PATH}\/${VAULT_SECRET} > ${SSH_PRIVATE_KEY}     - chmod go= ${SSH_PRIVATE_KEY}     - |       for zone in $(cat ${ZONES_FILE}); do         ssh -i ${SSH_PRIVATE_KEY} \\             -o \"StrictHostKeyChecking no\" \\             -o \"VerifyHostKeyDNS no\" \\             deploy@${CI_JOB_NAME#diff } diff-bind-zone ${zone} ${CI_PIPELINE_ID}       done   rules:     - *master_and_changes     - when: never     - allow_failure: true  .diff_staging:   extends: .diff_zone_script   stage: diff staging   tags: [staging, deploy]   environment:     name: staging   needs: [zones check]   resource_group: staging  .diff_production:   extends: .diff_zone_script   stage: diff production   tags: [production, deploy-specific]   environment:     name: production   needs: [zones check]   resource_group: production  diff stgpowerdns1.lan:   extends: .diff_staging diff stgpowerdns2.lan:   extends: .diff_staging  diff prodpowerdns1.lan:   extends: .diff_production diff prodpowerdns2.lan:   extends: .diff_production  # ====== # DEPLOY # ======  .deploy_zone_script:   image: ${TARGET_IMAGE}   extends: .vault_before_script   script:     - vault_get_secret ${VAULT_PATH}\/${VAULT_SECRET} > ${SSH_PRIVATE_KEY}     - chmod go= ${SSH_PRIVATE_KEY}     - |       for zone in $(cat ${ZONES_FILE}); do         ssh -i ${SSH_PRIVATE_KEY} \\             -o \"StrictHostKeyChecking no\" \\             -o \"VerifyHostKeyDNS no\" \\             deploy@${CI_JOB_NAME} deploy-bind-zone ${zone} ${CI_PIPELINE_ID}       done   rules:     - if: $CI_COMMIT_BRANCH == 'master'      # Execute jobs when a new commit is pushed to master branch       changes:         *change_list       when: manual     - when: never     - allow_failure: true  .deploy_staging:   extends: .deploy_zone_script   stage: deploy staging   tags: [staging, deploy]   environment:     name: staging   needs: [zones check, diff stgpowerdns1.lan]   resource_group: staging  .deploy_production:   extends: .deploy_zone_script   stage: deploy production   tags: [production, deploy-specific]   environment:     name: production   needs: [zones check, stgpowerdns1.lan]   resource_group: production  stgpowerdns1.lan:   extends: .deploy_staging stgpowerdns2.lan:   extends: .deploy_staging  prodpowerdns1.lan:   extends: .deploy_production prodpowerdns2.lan:   extends: .deploy_production<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 deploy \u0437\u0430\u0445\u043e\u0434\u0438\u0442 \u043f\u043e SSH \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b PowerDNS, \u0431\u0435\u0440\u0451\u0442 master-\u0432\u0435\u0442\u043a\u0443 \u0438\u0437 Gitlab \u0438 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0432 PDNS Auth \u043d\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u043e\u043d\u044b. \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 reload, \u043f\u0440\u043e\u0441\u0442\u043e\u044f \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438 \u043d\u0435\u0442.<\/p>\n<p>Pull-\u043c\u043e\u0434\u0435\u043b\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0431\u043e\u043b\u0435\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 push, \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0435\u0451. <\/p>\n<pre><code class=\"go\">command=\"\/home\/deploy\/deploy.sh\",from=\"10.0.0.0\/8\",no-agent-forwarding,no-port-forwarding,no-user-rc,no-X11-forwarding,no-pty ssh-ed25519 &lt;PUBLIC KEY> <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\/home\/deploy\/deploy.sh<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"yaml\">#!\/bin\/bash -fue # Managed by Ansible  set -- ${SSH_ORIGINAL_COMMAND}  case ${1} in     deploy-bind-zone)         ZONE=${2}         ZONE_ENC=${ZONE\/\/.\/%2E}         PIPELINE_ID=${3}         mkdir -p ${HOME}\/zones\/${PIPELINE_ID}         mkdir -p ${HOME}\/zones_last         mkdir -p ${HOME}\/zones_backup         echo \"Deploing zone ${ZONE} by gitlab pipeline (id ${PIPELINE_ID})\"         curl --fail --silent\\              --header \"PRIVATE-TOKEN: `cat ${HOME}\/.gitlab_access_token`\" \\              \"https:\/\/gitlab.lan\/api\/v4\/projects\/&lt;project_id>\/repository\/files\/bind%2Fzones%2F${ZONE_ENC}\/raw?ref=master\" \\              > ${HOME}\/zones\/${PIPELINE_ID}\/${ZONE}         sudo -u root \/bin\/cp -a ${HOME}\/zones\/${PIPELINE_ID} \/etc\/powerdns\/deploy\/         echo '###  DIFF  ###'         \/usr\/bin\/diff -u \/etc\/powerdns\/backend_bind\/${ZONE}.zone \/etc\/powerdns\/deploy\/${PIPELINE_ID}\/${ZONE} || true         echo '###  END DIFF  ###'         \/bin\/cp -f \/etc\/powerdns\/backend_bind\/${ZONE}.zone ${HOME}\/zones_backup\/${ZONE}         sudo -u root \/bin\/ln -f -s \/etc\/powerdns\/deploy\/${PIPELINE_ID}\/${ZONE} \/etc\/powerdns\/backend_bind\/${ZONE}.zone         sudo -u root \/usr\/bin\/pdns_control bind-reload-now ${ZONE}         \/bin\/cp -f \/etc\/powerdns\/backend_bind\/${ZONE}.zone ${HOME}\/zones_last\/${ZONE}         ;;     diff-bind-zone)         ZONE=${2}         ZONE_ENC=${ZONE\/\/.\/%2E}         PIPELINE_ID=${3}         mkdir -p \/tmp\/diff-bind-zone\/${PIPELINE_ID}         echo \"Diff zone ${ZONE} by gitlab pipeline (id ${PIPELINE_ID})\"         curl --fail --silent\\              --header \"PRIVATE-TOKEN: `cat ${HOME}\/.gitlab_access_token`\" \\              \"https:\/\/gitlab.ozon.ru\/api\/v4\/projects\/14443\/repository\/files\/bind%2Fzones%2F${ZONE_ENC}\/raw?ref=master\" \\              > \/tmp\/diff-bind-zone\/${PIPELINE_ID}\/${ZONE}         echo '###  DIFF  ###'         \/usr\/bin\/diff -u \/etc\/powerdns\/backend_bind\/${ZONE}.zone \/tmp\/diff-bind-zone\/${PIPELINE_ID}\/${ZONE} || true         echo '###  END DIFF  ###'         rm -rf \/tmp\/diff-bind-zone\/${PIPELINE_ID}         ;;     *)         echo \"Bad command\"         exit 1         ;; esac<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u043e \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438 \u00ab\u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435\u00bb, \u0447\u0442\u043e Gitlab \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d, \u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 DNS \u043d\u0430\u0441 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u0442\u044c \u0432\u044b\u043a\u0430\u0442\u0438\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u0421\u0434\u0435\u043b\u0430\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u0439 \u0432\u044b\u043a\u0430\u0442\u043a\u0438 \u043d\u0443\u0436\u043d\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 Ansible (\u044d\u0442\u043e \u043d\u0430\u0448 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432). \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:\u00a0<\/p>\n<ol>\n<li>\n<p>\u0411\u0435\u0440\u0451\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0437\u043e\u043d.<\/p>\n<\/li>\n<li>\n<p>\u0411\u0435\u0440\u0451\u043c Ansible (\u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430 Ansible \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u0435\u043d).<\/p>\n<\/li>\n<li>\n<p>\u0412\u043d\u043e\u0441\u0438\u043c \u043f\u0440\u0430\u0432\u043a\u0438 \u0432 \u0444\u0430\u0439\u043b\u044b \u0437\u043e\u043d.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u0442\u0438\u043c: playbooks\/powerdns\/disaster_zones_deploy\/main.yml -l powerdns_multidc -v.<\/p>\n<\/li>\n<\/ol>\n<details class=\"spoiler\">\n<summary>playbooks\/powerdns\/disaster_zones_deploy\/readme.md <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"yaml\"># check zones loaded to pdns last time ansible-playbook -i inventory\/production_powerdns_multidc.yml playbooks\/powerdns\/disaster_zones_deploy\/check_loaded_status.yml -l powerdns_multidc -v | grep -e changed -e lan --color=never # specific zone ansible-playbook -i inventory\/production_powerdns_multidc.yml playbooks\/powerdns\/disaster_zones_deploy\/check_loaded_status.yml -l powerdns_multidc -v -e zone=lan | grep -e changed -e lan --color=never  # PREPARE TO DEPLOY cd git git clone git@gitlab.lan:powerdns\/deploy-zones.git git clone git@gitlab.lan:ansible.git cd ansible https:\/\/gitlab.lan\/ansible\/-\/blob\/master\/README.md#prepare-for-local-work https:\/\/gitlab.lan\/ansible\/-\/blob\/master\/README.md#vault vim ..\/powerdns\/deploy-zones\/bind\/zones\/lan  # STAGING DEPLOY # check mode ansible-playbook -i inventory\/staging_powerdns_multidc.yml playbooks\/powerdns\/disaster_zones_deploy\/main.yml -l powerdns_multidc -CD -v # check mode | specific zone ansible-playbook -i inventory\/staging_powerdns_multidc.yml playbooks\/powerdns\/disaster_zones_deploy\/main.yml -l powerdns_multidc -CD -v -e zone=s.lan # fire ansible-playbook -i inventory\/staging_powerdns_multidc.yml playbooks\/powerdns\/disaster_zones_deploy\/main.yml -l powerdns_multidc -D -v # fire | specific zone ansible-playbook -i inventory\/staging_powerdns_multidc.yml playbooks\/powerdns\/disaster_zones_deploy\/main.yml -l powerdns_multidc -D -v -e zone=s.lan  # PRODUCTION DEPLOY # check mode ansible-playbook -i inventory\/production_powerdns_multidc.yml playbooks\/powerdns\/disaster_zones_deploy\/main.yml -l powerdns_multidc -CD -v # check mode | specific zone ansible-playbook -i inventory\/production_powerdns_multidc.yml playbooks\/powerdns\/disaster_zones_deploy\/main.yml -l powerdns_multidc -CD -v -e zone=s.lan # fire ansible-playbook -i inventory\/production_powerdns_multidc.yml playbooks\/powerdns\/disaster_zones_deploy\/main.yml -l powerdns_multidc -D -v # fire | specific zone ansible-playbook -i inventory\/production_powerdns_multidc.yml playbooks\/powerdns\/disaster_zones_deploy\/main.yml -l powerdns_multidc -D -v -e zone=s.lan<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u0430\u043c \u043a\u043e\u0434:<\/p>\n<details class=\"spoiler\">\n<summary>playbooks\/powerdns\/disaster_zones_deploy\/main.yml  <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"yaml\">--- - hosts: powerdns_multidc   gather_facts: false   become: true   vars:     static_zones:     - s.lan     tasks:   - name: include __deploy_zone_tasks.yml     include_tasks: __deploy_zone_tasks.yml     with_items:       - \"{{ zone | default(static_zones) }}\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>playbooks\/powerdns\/disaster_zones_deploy\/__deploy_zone_tasks.yml  <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"yaml\">--- - name: deploy bind zone {{ item }}   copy:     src: ..\/..\/..\/..\/powerdns-deploy-zones\/bind\/zones\/{{ item }}     dest: \/etc\/powerdns\/backend_bind\/{{ item }}.zone     owner: pdns_deploy     group: pdns_deploy     mode: 0664     follow: true     backup: true   register: zone_file  - name: \/usr\/bin\/pdns_control bind-reload-now {{ item }}  # noqa 503   shell: >     [ \"{{ ansible_check_mode }}\" = \"True\" ]     &amp;&amp; echo \"DO NOTHING\"     || \/usr\/bin\/pdns_control bind-reload-now {{ item }}   check_mode: false   ignore_errors: \"{{ ansible_check_mode }}\"   when: zone_file.changed<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>playbooks\/powerdns\/disaster_zones_deploy\/check_loaded_status.yml <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"yaml\">--- - hosts: powerdns_multidc   gather_facts: false   become: true    tasks:   - name: \/usr\/bin\/pdns_control bind-domain-status ZONE  # noqa 301     shell: \/usr\/bin\/pdns_control bind-domain-status {{ zone | default(\"\") }} | sort     check_mode: false     ignore_errors: \"{{ ansible_check_mode }}\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u00ab\u0416\u0435\u043b\u0435\u0437\u043d\u0443\u044e\u00bb \u0437\u043e\u043d\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u0447\u0435\u0440\u0435\u0437 API PowerDNS: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c RR \u043f\u0440\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u0447\u0435\u0440\u0435\u0437 Terraform \u0438\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0436\u0435\u043b\u0435\u0437\u043d\u043e\u0433\u043e \u0445\u043e\u0441\u0442\u0430 \u0447\u0435\u0440\u0435\u0437 MaaS. \u0412\u0440\u0443\u0447\u043d\u0443\u044e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u0435\u0434\u043a\u043e, \u043d\u043e \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e, \u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c pdnsutil edit-zone &lt;zone> \u043d\u0430 \u0443\u0437\u043b\u0435 \u0441 PostgreSQL-\u043c\u0430\u0441\u0442\u0435\u0440\u043e\u043c.\u00a0\u00a0<\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e, \u0430 \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e, \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u043e, \u0438\u043b\u0438 \u043c\u043d\u0435 \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043a\u0430\u0442\u0438\u0442\u044c DNS \u0447\u0435\u0440\u0435\u0437 Gitlab \u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 CI\/CD, \u0434\u0430 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u044f \u0441\u043c\u0435\u043b\u044b\u0439?! \u0411\u0435\u0440\u0438\u0442\u0435 PowerDNS-Admin. \u041e\u0448\u0438\u0431\u043a\u0430 \u0441 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043c\u043e\u0436\u043d\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2a3\/2d6\/bbe\/2a32d6bbe2ef8f2a16c136ed3e94a85f.png\" width=\"1440\" height=\"304\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2a3\/2d6\/bbe\/2a32d6bbe2ef8f2a16c136ed3e94a85f.png\"\/><\/figure>\n<p>\u041a\u0430\u043a\u0438\u0435 \u0435\u0441\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f RR:\u00a0<\/p>\n<ul>\n<li>\n<p>Pdns-gui \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0440\u0435\u043b\u0438\u0437 \u2014 25 \u0430\u043f\u0440\u0435\u043b\u044f 2010).<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.poweradmin.org\/\"><u>Poweradmin<\/u><\/a> (478 \u0437\u0432\u0451\u0437\u0434). \u0418\u043c\u0435\u0435\u0442 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u0443\u044e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c: \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u044f\u0445 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0434\u0432\u043e\u0439\u043d\u044b\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438 (\u201c), \u0447\u0442\u043e \u043d\u0430\u043f\u0440\u043e\u0447\u044c \u043b\u043e\u043c\u0430\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044d\u0442\u0438\u043c \u0437\u0430\u043f\u0438\u0441\u044f\u043c \u0447\u0435\u0440\u0435\u0437 API, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0432\u044b\u0447\u043a\u0430\u043c\u0438 (\u201d) \u0431\u043b\u043e\u043a\u0430. \u0425\u043e\u0442\u044f \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u044d\u0442\u043e \u043d\u0435 \u0432\u043b\u0438\u044f\u0435\u0442. \u0422\u0430\u043a\u0436\u0435 Poweradmin \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0438\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438 \u043f\u043e\u043b\u0435\u0439 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u0411\u0414, \u043d\u0435 \u0432\u0435\u0434\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043b\u043e\u0433\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435.\u00a0<\/p>\n<\/li>\n<li>\n<p> <a href=\"https:\/\/pdnsmanager.org\"><u>PDNS manager<\/u><\/a> (160 \u0437\u0432\u0451\u0437\u0434) \u2014 \u0434\u0432\u0430 \u0433\u043e\u0434\u0430 \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u043b\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p> \u041d\u0443 \u0438 \u0441\u0430\u043c <a href=\"https:\/\/github.com\/ngoduykhanh\/PowerDNS-Admin\"><u>PowerDNS-Admin<\/u><\/a> (1,8 \u0442\u044b\u0441. \u0437\u0432\u0451\u0437\u0434). \u0421\u0430\u043c\u0430\u044f \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u0430\u044f \u0430\u0434\u043c\u0438\u043d\u043a\u0430, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u0438\u0431\u043a\u0430\u044f, \u0435\u0441\u0442\u044c \u0430\u0443\u0434\u0438\u0442, \u0440\u0430\u0437\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432, \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0434\u0432\u0443\u0445\u0444\u0430\u043a\u0442\u043e\u0440\u043a\u0430\u2026 \u043d\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/244\/b00\/23f\/244b0023f47a2d5adef9a09e379853aa.png\" width=\"1918\" height=\"942\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/244\/b00\/23f\/244b0023f47a2d5adef9a09e379853aa.png\"\/><\/figure>\n<h2>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043f\u043e\u0441\u043b\u0435 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f <\/h2>\n<h3>Resolve Lua record<\/h3>\n<p>\u0422\u0443\u0442 \u0432\u0435\u0441\u0435\u043b\u043e. \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, Lua record, \u0442\u0430, \u0447\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0442\u0432\u0435\u0442, \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e <a href=\"https:\/\/github.com\/PowerDNS\/pdns\/issues\/9529\"><u>\u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e<\/u><\/a> \u0441\u043e\u0432\u0435\u0440\u0448\u0451\u043d\u043d\u043e\u0433\u043e \u043a \u043d\u0435\u0439 DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u0430. \u0414\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u043a\u043e\u0441\u0442\u044b\u043b\u044c:\u00a0<\/p>\n<pre><code class=\"lua\">crontab -l  * * * * * dig @localhost smart-record.s.lan &amp;> \/dev\/null<\/code><\/pre>\n<h3>\u0414\u0435\u043f\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0445 \u0437\u043e\u043d \u0447\u0435\u0440\u0435\u0437 Gitlab <\/h3>\n<p>\u041a\u0430\u043a-\u0442\u043e \u0440\u0430\u0437 \u0441\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442, \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0441 PowerDNS, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u0432 \u0438\u0442\u043e\u0433\u0435, \u043f\u0440\u0438\u0432\u0451\u043b \u043a \u0441\u0438\u043b\u044c\u043d\u043e\u043c\u0443 \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u044e \u0437\u0430\u0434\u0430\u0447, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0430 gitlab runners. \u041e\u0434\u043d\u0438\u043c \u0438\u0437 \u0448\u0430\u0433\u043e\u0432 \u043f\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0431\u044b\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e A-\u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0447\u0435\u0440\u0435\u0437 Gitlab \u043d\u0430\u043c \u044d\u0442\u043e\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u0434\u0436\u043e\u0431\u044b \u043c\u043e\u0433\u043b\u0438 \u0432\u0438\u0441\u0435\u0442\u044c \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u043e 10-20 \u043c\u0438\u043d\u0443\u0442. \u0412 \u0438\u0442\u043e\u0433\u0435 \u0437\u043e\u043d\u0443 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0438 \u043f\u043e\u0437\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0440\u0430\u0441\u043a\u0430\u0442\u043a\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0445 \u0437\u043e\u043d \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0444\u043e\u0440\u0441-\u043c\u0430\u0436\u043e\u0440\u0430.<\/p>\n<h3>\u0418\u0437 \u043a\u0435\u0448\u0430 recursor \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u043b\u0430\u0441\u044c \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0430\u044f DNS-\u0437\u0430\u043f\u0438\u0441\u044c <\/h3>\n<p>\u0423 \u043d\u0430\u0441 Kubernetes, \u0438 \u0435\u0433\u043e \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u043c\u0435\u044e\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0430\u043b\u044b\u0439 TTL, \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u043f\u044f\u0442\u0438 \u0441\u0435\u043a\u0443\u043d\u0434. \u0418\u043d\u043e\u0433\u0434\u0430 \u0437\u0430\u043c\u0435\u0447\u0430\u043b\u0438, \u0447\u0442\u043e \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0432\u044b\u043a\u0430\u0442\u043a\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0438\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043d\u044b\u0435 DNS-\u0438\u043c\u0435\u043d\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 service_ip \u0432 Kubernetes, \u0432\u0435\u043b\u0438 \u0432 \u043d\u0438\u043a\u0443\u0434\u0430 (NXDOMAIN). \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043a\u0435\u0448\u0430 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441\u0442\u043e\u044f\u043b\u0430 10 \u0441\u0435\u043a\u0443\u043d\u0434 (max-negative-ttl=10), \u043d\u043e \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043e\u043d\u0438 \u0432\u0438\u0441\u0435\u043b\u0438 \u0432 \u043a\u0435\u0448\u0435 \u043c\u0438\u043d\u0443\u0442\u044b \u0438 \u0447\u0430\u0441\u044b. \u0415\u0441\u043b\u0438 \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043a\u0435\u0448 \u0440\u0435\u043a\u0443\u0440\u0441\u043e\u0440\u0430 \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441\u0430\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u043e\u0440, \u0442\u043e \u0432\u0441\u0451 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e \u0432 \u043d\u043e\u0440\u043c\u0443. \u041c\u043e\u0436\u0435\u0442, \u043e\u0448\u0438\u0431\u043a\u0430 \u0431\u044b\u043b\u0430 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u043e\u0440\u0430 (4.4.<em>), \u0438\u043b\u0438 \u043d\u0435\u0442, \u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 4.5.<\/em> \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u043b\u043e\u0441\u044c.\u00a0<\/p>\n<p>\u0415\u0441\u0442\u044c \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u044f \u0432 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 ECS \u0438\u043b\u0438 DNSSEC, \u043f\u043e\u0442\u043e\u043c\u0443 \u043a\u0430\u043a \u043f\u043e\u0441\u043b\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043e\u043f\u0446\u0438\u0439 edns0 \u0438\/\u0438\u043b\u0438 trust-ad \u0432 \/etc\/resolv.conf \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440 \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u0432\u0438\u0434\u0435\u0442\u044c \u0436\u0435\u043b\u0430\u043d\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441. \u0422\u0430\u043a\u0436\u0435, \u0435\u0441\u043b\u0438 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0440\u0430\u0437\u0440\u0435\u0437\u043e\u043b\u0432\u0438\u0442\u044c \u0438\u043c\u044f \u0447\u0435\u0440\u0435\u0437 nslookup, \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u0438 NXDOMAIN, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a dig \u0432\u0441\u0451 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u0432\u0438\u0434\u0435\u043b. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e dig \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 query \u043e\u043f\u0446\u0438\u0438 +adflag +edns. \u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u043e\u043d\u0438 \u0443\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f: dig +noadflag +noedns == nslookup.\u00a0<\/p>\n<h3>\u0427\u0442\u043e \u043d\u0430\u0441\u0447\u0451\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 bind views?<\/h3>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c PDNS Auth \u0435\u0451 \u043d\u0435\u0442 (<a href=\"https:\/\/github.com\/powerdns\/pdns\/issues\/63\">https:\/\/github.com\/powerdns\/pdns\/issues\/63<\/a>, <a href=\"https:\/\/github.com\/powerdns\/pdns\/issues\/10816\">https:\/\/github.com\/powerdns\/pdns\/issues\/10816<\/a>), \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043a\u043e\u0441\u0442\u044b\u043b\u0438\u0442\u044c:\u00a0\u00a0<\/p>\n<ul>\n<li>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c GeoIP-\u0431\u044d\u043a\u0435\u043d\u0434;<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Lua-\u0437\u0430\u043f\u0438\u0441\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Dnsdist \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e PDNS Auth.<\/p>\n<\/li>\n<\/ul>\n<h3>GeoIP-\u0431\u044d\u043a\u0435\u043d\u0434 <\/h3>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437 https:\/\/doc.powerdns.com\/authoritative\/backends\/geoip.html <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">domains: - domain: geo.example.com   ttl: 30   records:     geo.example.com:       - soa: ns1.example.com hostmaster.example.com 2014090125 7200 3600 1209600 3600       - ns:            content: ns1.example.com            ttl: 600       - ns: ns2.example.com     fin.eu.service.geo.example.com:       - a: 192.0.2.2       - txt: hello world       - aaaa: 2001:DB8::12:34DE:3 # this will result first record being handed out 30% of time     swe.eu.service.geo.example.com:       - a:            content: 192.0.2.3            weight: 50       - a: 192.0.2.4   services: # syntax 1     service.geo.example.com: '%co.%cn.service.geo.example.com' # syntax 2     service.geo.example.com: [ '%co.%cn.service.geo.example.com', '%cn.service.geo.example.com'] # alternative syntax   services:     service.geo.example.com:       default: [ '%co.%cn.service.geo.example.com', '%cn.service.geo.example.com' ]       10.0.0.0\/8: 'internal.service.geo.example.com' mapping_lookup_formats: ['%cc-%re', '%cc'] custom_mapping:   fr: eu-central   be: eu-central   es: eu-south   us-tx: us-south<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421\u0430\u043c\u044b\u0439 \u0433\u0438\u0431\u043a\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f \u0437\u043e\u043d\u0430 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0431\u044d\u043a\u0435, \u0442\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u0435\u0451 \u0432 GeoIP-\u0431\u044d\u043a \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e. <\/p>\n<h3>Lua-\u0437\u0430\u043f\u0438\u0441\u0438<\/h3>\n<p>\u0424\u0430\u0439\u043b bind zone:\u00a0<\/p>\n<pre><code class=\"go\">www IN LUA A \";if countryCode('US') then return {'192.0.2.1','192.0.2.2'} else return '192.0.2.2' end\" <\/code><\/pre>\n<p>\u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0434\u043b\u044f \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442. \u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0432 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u0438, \u043e\u0434\u0438\u043d if \u0438 \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e. \u0415\u0441\u043b\u0438 \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0447\u0442\u043e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e Lua-\u0444\u0443\u043d\u043a\u0446\u0438\u044e. \u0412 SQL-\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u043c \u0431\u044d\u043a\u0435\u043d\u0434\u0435 \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.\u00a0<\/p>\n<h3>Dnsdist \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e PDNS Auth <\/h3>\n<p>\u0414\u0432\u0430 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 PDNS Auth \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c \u0434\u043b\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u0435\u0439. <\/p>\n<pre><code class=\"cpp\">newServer({address=\"10.0.9.1:5301\", pool=\"INTERNAL\"})  newServer({address=\"10.0.9.1:5302\", pool=\"EXTERNAL\"})   addAction({\"10.0.0.0\/8\"}, PoolAction(\"INTERNAL\"))  addAction(AllRule(),PoolAction(\"EXTERNAL\")) <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0441\u044e\u0434\u0430 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0432\u044b\u0431\u043e\u0440\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u043f\u0440\u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u0440\u043e\u043c\u043e\u0437\u0434\u043a\u043e. <\/p>\n<h3>\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 <\/h3>\n<p>\u041d\u0443\u0436\u043d\u043e \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0432 \u0434\u0432\u0443\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445: \u0434\u043b\u044f \u043e\u0442\u0434\u0435\u043b\u0430 \u0418\u0411 \u0438 \u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438.\u00a0<\/p>\n<p>\u0420\u0435\u0448\u0438\u043b\u0438 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u043e\u0440\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0437\u0430\u043f\u0440\u043e\u0441 \u043e\u0431\u044f\u0437\u0430\u043d \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c. Dnsdist \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438, \u0437\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 PowerDNS-\u043c\u0430\u0448\u0438\u043d (\u0437\u0430\u043a\u0440\u044b\u0442\u044c \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430), \u0430 \u043f\u0440\u044f\u043c\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0432 PDNS Auth \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0443 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e PDNS Recursor (\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e).\u00a0<\/p>\n<p>\u041a\u0430\u043a\u0438\u0445-\u0442\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043a \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0435 \u0431\u044b\u043b\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e:\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>\/etc\/powerdns\/recursor.conf <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">quiet=no  trace=fail  loglevel=5<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>journalctl -u pdns-recursor.service<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\"># \u0437\u0430\u043f\u0440\u043e\u0441  pdns_recursor[10861]: 3 [1418626328\/2] question for 'stgpostgres44.lan|A' from 10.1.2.3:55002 (ecs 10.100.1.52\/32)   # \u0438 \u043e\u0442\u0432\u0435\u0442 pdns_recursor[10861]: 3 [1418626328\/2] answer to question 'stgpostgres44.lan|A': 1 answers, 1 additional, took 1 packets, 0.359 netw ms, 0.474 tot ms, 0 throttled, 0 timeouts, 0 tcp connections, rcode=0<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0415\u0441\u043b\u0438 packetcache \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0438 \u043e\u0442\u0432\u0435\u0442 \u0438\u0437 \u043d\u0435\u0433\u043e \u043e\u0442\u0434\u0430\u0451\u0442\u0441\u044f, \u0442\u043e \u0432 \u043b\u043e\u0433\u0435 \u0443\u0432\u0438\u0434\u0438\u043c:\u00a0<\/p>\n<pre><code class=\"cpp\">pdns_recursor[10861]: 3 question answered from packet cache tag=0 from 10.1.2.3:55002 <\/code><\/pre>\n<p>\u041d\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0437\u0440\u0435\u043b\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u2014 DNStap (<a href=\"https:\/\/dnstap.info\/\"><u>https:\/\/dnstap.info<\/u><\/a>). \u042d\u0442\u043e \u0433\u0438\u0431\u043a\u0438\u0439, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u043b\u043e\u0433\u0430 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 protobuf. Dnsdist \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 1.3 (<a href=\"https:\/\/dnsdist.org\/reference\/dnstap.html\">https:\/\/dnsdist.org\/reference\/dnstap.html<\/a>), pdns recursor \u2014 \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 4.2 (<a href=\"https:\/\/docs.powerdns.com\/recursor\/lua-config\/protobuf.html\">https:\/\/docs.powerdns.com\/recursor\/lua-config\/protobuf.html<\/a>)\u00a0<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0435\u0433\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u043e\u0440\u0430 \u0438\/\u0438\u043b\u0438 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430, \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f DNStap-\u043a\u043e\u043b\u043b\u0435\u043a\u0442\u043e\u0440, \u0432\u0435\u0434\u044c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043b\u043e\u0433 \u043d\u0443\u0436\u043d\u043e \u0433\u0434\u0435-\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c (\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e). \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u043e\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/github.com\/dmachard\/go-dns-collector\"><u>go-dns-collector<\/u><\/a>. \u041c\u043d\u043e\u0433\u043e \u0437\u0432\u0451\u0437\u0434, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u042f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0430\u0433\u0440\u0435\u0433\u0430\u0442\u043e\u0440\u043e\u043c, \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c \u0438 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043e\u043c \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041c\u043e\u0436\u0435\u0442 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438 \u0432 Elastic, Fluentd, Syslog \u0438 \u0442.\u0434., \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0438 REST API.<\/p>\n<p>\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u043e\u0440: .\/go-dnscollector -config config.yml\u00a0<\/p>\n<details class=\"spoiler\">\n<summary>config.yaml <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">global:   trace:     verbose: true multiplexer:   collectors:     - name: dnstap       dnstap:         listen-ip: 0.0.0.0         listen-port: 6000   loggers:     - name: console       stdout:         mode: json   routes:     - from: [dnstap]       to: [console]<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0418 \u043d\u0430\u0442\u0440\u0430\u0432\u0438\u043c \u043d\u0430 \u043d\u0435\u0433\u043e \u0440\u0435\u043a\u0443\u0440\u0441\u043e\u0440:<\/p>\n<p>\u200b\u200bcat \/etc\/PowerDNS\/resursor.conf <\/p>\n<pre><code class=\"cpp\">...  lua-config-file=\/etc\/powerdns\/recursor.lua.d\/log.lua <\/code><\/pre>\n<p>cat log.lua\u00a0<\/p>\n<pre><code class=\"cpp\">dnstapFrameStreamServer(\"172.6.0.156:6001\") <\/code><\/pre>\n<p>\u0412\u0430\u0436\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b:\u00a0<\/p>\n<ul>\n<li>\n<p>\u0414\u043b\u044f \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 DNStap \u043f\u043e TCP PDNS Recursor \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c &#8212;enable-dnstap. \u0422\u0430\u043a\u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 libfstrm, \u0438\u043d\u0430\u0447\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u043b\u043e\u0433\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 unix-socket.\u00a0<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 TCP, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u043e\u0440\u0430 \u043d\u0435\u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u043a\u043e\u043f\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d\u0438\u044e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b inputQueueSize \u0438 outputQueueSize, \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u043e\u0434 \u0441\u0435\u0431\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043e\u0447\u0435\u0440\u0435\u0434\u0435\u0439, \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 DNStap \u043b\u043e\u0433\u0438 \u043d\u0430\u0447\u043d\u0443\u0442 \u0442\u0435\u0440\u044f\u0442\u044c\u0441\u044f.\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043b\u043e\u0433\u0438 \u043d\u0443\u0436\u043d\u044b \u043f\u0440\u044f\u043c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0434\u0430 \u0435\u0449\u0451 \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0442\u0435\u0440\u044f\u043b\u0438\u0441\u044c, \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043b\u043b\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 DNStapFrameStreamServer \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0443 \u0438 dnsdist \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u043c. \u0422\u0443\u0442 \u0432\u0441\u0451 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e:\u00a0<\/p>\n<pre><code class=\"cpp\">cat \/etc\/dnsdist\/dnsdist.conf  ...  newFrameStreamTcpLogger(\"172.6.0.156:6001\") <\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043b\u043e\u0433\u0430.<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f &#171;DNSQueryType&#187; <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">{   \"network\": {     \"family\": \"INET\",     \"protocol\": \"UDP\",     \"query-ip\": \"172.6.0.156\",     \"query-port\": \"48408\",     \"response-ip\": \"172.6.0.20\",     \"response-port\": \"53\",     \"as-number\": \"-\",     \"as-owner\": \"-\"   },   \"dns\": {     \"length\": 28,     \"opcode\": 0,     \"rcode\": \"-\",     \"qname\": \"nginx.ozon\",     \"qname-public-suffix\": \"-\",     \"qname-effective-tld-plus-one\": \"-\",     \"qtype\": \"A\",     \"flags\": {       \"qr\": false,       \"tc\": false,       \"aa\": false,       \"ra\": false,       \"ad\": false     },     \"resource-records\": {       \"an\": [],       \"ns\": [],       \"ar\": []     },     \"malformed-packet\": false   },   \"edns\": {     \"udp-size\": 0,     \"rcode\": 0,     \"version\": 0,     \"dnssec-ok\": 0,     \"options\": []   },   \"dnstap\": {     \"operation\": \"DNSQueryType\",     \"identity\": \"d12b46e263cc\",     \"timestamp-rfc3339ns\": \"2022-12-01T07:24:41.000425932Z\",     \"latency\": \"-\"   },   \"geo\": {     \"city\": \"-\",     \"continent\": \"-\",     \"country-isocode\": \"-\"   },   \"pdns\": {     \"tags\": [],     \"original-request-subnet\": \"\",     \"applied-policy\": \"\"   },   \"suspicious\": {     \"score\": 0,     \"malformed-pkt\": false,     \"large-pkt\": false,     \"long-domain\": false,     \"slow-domain\": false,     \"unallowed-chars\": false,     \"uncommon-qtypes\": false,     \"excessive-number-labels\": false   } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u201cDNSResponseType\u201d <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">{   \"network\": {     \"family\": \"INET\",     \"protocol\": \"UDP\",     \"query-ip\": \"172.6.0.156\",     \"query-port\": \"48408\",     \"response-ip\": \"172.6.0.20\",     \"response-port\": \"53\",     \"as-number\": \"-\",     \"as-owner\": \"-\"   },   \"dns\": {     \"length\": 109,     \"opcode\": 0,     \"rcode\": \"NOERROR\",     \"qname\": \"nginx.ozon\",     \"qname-public-suffix\": \"-\",     \"qname-effective-tld-plus-one\": \"-\",     \"qtype\": \"AAAA\",     \"flags\": {       \"qr\": false,       \"tc\": false,       \"aa\": false,       \"ra\": false,       \"ad\": false     },     \"resource-records\": {       \"an\": [],       \"ns\": [],       \"ar\": []     },     \"malformed-packet\": false   },   \"edns\": {     \"udp-size\": 0,     \"rcode\": 0,     \"version\": 0,     \"dnssec-ok\": 0,     \"options\": []   },   \"dnstap\": {     \"operation\": \"DNSResponseType\",     \"identity\": \"d12b46e263cc\",     \"timestamp-rfc3339ns\": \"2022-12-01T07:24:41.000445065Z\",     \"latency\": \"0.021053\"   },   \"geo\": {     \"city\": \"-\",     \"continent\": \"-\",     \"country-isocode\": \"-\"   },   \"pdns\": {     \"tags\": [],     \"original-request-subnet\": \"\",     \"applied-policy\": \"\"   },   \"suspicious\": {     \"score\": 0,     \"malformed-pkt\": false,     \"large-pkt\": false,     \"long-domain\": false,     \"slow-domain\": false,     \"unallowed-chars\": false,     \"uncommon-qtypes\": false,     \"excessive-number-labels\": false   } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u043e\u0442 \u0447\u0442\u043e \u0443\u0432\u0438\u0434\u0438\u043c \u0432 Grafana:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/129\/4e0\/790\/1294e07903a542c3805ba21c832b7016.png\" alt=\"\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u042e\u0440\u0438\u044e \u041c\u0430\u043a\u0430\u0440\u043e\u0432\u0443 \u0437\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0442\u0435\u043c\u0435 DNStap, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 Proxy Protocol \u0438 \u0437\u0430 \u0430\u043d\u0430\u043b\u0438\u0437 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f RR \u0432 PowerDNS. \" title=\"\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u042e\u0440\u0438\u044e \u041c\u0430\u043a\u0430\u0440\u043e\u0432\u0443 \u0437\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0442\u0435\u043c\u0435 DNStap, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 Proxy Protocol \u0438 \u0437\u0430 \u0430\u043d\u0430\u043b\u0438\u0437 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f RR \u0432 PowerDNS. \" width=\"1848\" height=\"876\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/129\/4e0\/790\/1294e07903a542c3805ba21c832b7016.png\"\/><\/p>\n<div><figcaption>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u042e\u0440\u0438\u044e \u041c\u0430\u043a\u0430\u0440\u043e\u0432\u0443 \u0437\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e \u0442\u0435\u043c\u0435 DNStap, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 Proxy Protocol \u0438 \u0437\u0430 \u0430\u043d\u0430\u043b\u0438\u0437 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f RR \u0432 PowerDNS. <\/figcaption><\/div>\n<\/figure>\n<h3>Debug<\/h3>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u044b rec_control \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b trace-regex \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u0440\u0438 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u043a\u0443\u0440\u0441\u043e\u0440.<\/p>\n<details class=\"spoiler\">\n<summary># rec_control trace-regex &#8216;^(b|c).nonexists.domain&#8217;<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"go\">00:32:06 stgpowerdns1 pdns_recursor[10861]: 3 [1801294368\/1] question for 'c.nonexists.domain|A' from 127.0.0.1:39805 00:32:06 stgpowerdns1 pdns_recursor[10861]: [1801294368] : no TA found for 'c.nonexists.domain' among 1 00:32:06 stgpowerdns1 pdns_recursor[10861]: [1801294368] : no TA found for 'nonexists.domain' among 1 00:32:06 stgpowerdns1 pdns_recursor[10861]: [1801294368] c.nonexists.domain: Wants NO DNSSEC processing, auth data in query for A 00:32:06 stgpowerdns1 pdns_recursor[10861]: [1801294368] c.nonexists.domain: No cache hit for 'c.nonexists.domain|A', trying to find an appropriate NS record 00:32:06 stgpowerdns1 pdns_recursor[10861]: [1801294368] c.nonexists.domain: Cache consultations done, have 1 NS to contact 00:32:06 stgpowerdns1 pdns_recursor[10861]: [1801294368] c.nonexists.domain: Domain has hardcoded nameservers 00:32:06 stgpowerdns1 pdns_recursor[10861]: [1801294368] c.nonexists.domain.: Nameservers: +10.2.2.2:53(1.05ms), +10.2.2.1:53(862.82ms) 00:32:06 stgpowerdns1 pdns_recursor[10861]: [1801294368] c.nonexists.domain: Resolved '.' NS (empty) to: 10.2.2.2, 10.2.2.1 00:32:06 stgpowerdns1 pdns_recursor[10861]: [1801294368] c.nonexists.domain: Trying IP 10.2.2.2:53, asking 'c.nonexists.domain|A' 00:32:06 stgpowerdns1 pdns_recursor[10861]: [1801294368] c.nonexists.domain: Got 2 answers from (empty) (10.2.2.2), rcode=3 (Non-Existent domain), aa=0, in 0ms 00:32:06 stgpowerdns1 pdns_recursor[10861]: [1801294368] c.nonexists.domain: accept answer '.|SOA|a.root-servers.net. nstld.verisign-grs.com. 2023010801 1800 900 604800 86400' from '.' nameservers? ttl=537, place=2 YES! - This answer was received from a server we forward to.  00:32:06 stgpowerdns1 pdns_recursor[10861]: [1801294368] c.nonexists.domain: OPT answer '.' from '.' nameservers 00:32:06 stgpowerdns1 pdns_recursor[10861]: [1801294368] c.nonexists.domain: determining status after receiving this packet 00:32:06 stgpowerdns1 pdns_recursor[10861]: [1801294368] c.nonexists.domain: got negative caching indication for name 'c.nonexists.domain' (accept=1), newtarget='(empty)' 00:32:06 stgpowerdns1 pdns_recursor[10861]: [1801294368] c.nonexists.domain: status=NXDOMAIN, we are done (have negative SOA) 00:32:06 stgpowerdns1 pdns_recursor[10861]: [1801294368] c.nonexists.domain: failed (res=3) 00:32:06 stgpowerdns1 pdns_recursor[10861]: 3 [1801294368\/1] answer to question 'c.nonexists.domain|A': 0 answers, 1 additional, took 1 packets, 0.845 netw ms, 0.984 tot ms, 0 throttled, 0 timeouts, 0 tcp connections, rcode=3<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0412\u043e\u0442 \u0441 \u0442\u0430\u043a\u0438\u043c \u043a\u043e\u0434\u043e\u043c \u043d\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u043e\u0440\u0435 \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c txt-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u043d\u0430 \u043a\u0430\u043a\u0438\u0435 \u0431\u044d\u043a\u0435\u043d\u0434\u044b \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u043e\u0433\u0443\u0442 \u0443\u0445\u043e\u0434\u0438\u0442\u044c DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0441 \u0442\u043e\u0433\u043e \u0438\u043b\u0438 \u0438\u043d\u043e\u0433\u043e \u0445\u043e\u0441\u0442\u0430:\u00a0 <\/p>\n<details class=\"spoiler\">\n<summary>somehost# <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">dig +short txt name.backend.powerdns.lan \"stgpowerdns2.lan\" dig +short txt name.backend.powerdns.lan \"stgpowerdns1.lan\"<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>stgpowerdns1.lan#  \/etc\/powerdns\/recursor.lua.d\/dns.lua   <\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">backendname_request = \"name.backend.powerdns.lan\" backendname_response = \"\\\"stgpowerdns1.lan\\\"\"  function preresolve(dq)   if dq.qname:equal(backendname_request) then     dq.variable = true                      -- disable packet cache     dq.rcode=0                              -- make it a normal answer     dq:addAnswer(pdns.TXT, backendname_response, 1)     -- ttl 1s     return true   end   return false; end<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0410 \u0432\u043e\u0442 \u0442\u0430\u043a \u043c\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0433\u0434\u0435 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 PostgreSQL, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d PowerDNS: <\/p>\n<pre><code class=\"cpp\">dig +short powerdns-leader.s.lan.  10.14.0.9 <\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0424\u0430\u0439\u043b bind zone \u0441 Lua-\u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"lua\">config_stg   IN  LUA  LUA (\"settings={stringmatch='replication'} backends={'10.12.0.1','10.13.1.59','10.14.0.9','10.15.0.2','10.16.0.40','10.17.0.5'}\" ) powerdns-leader.s.lan.  30  IN  LUA  A  ( \";include('config_stg') return ifurlup('http:\/\/127.0.0.1:8005\/leader',{backends,{}}, settings)\" )<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430 127.0.0.1:8005 \u0432\u0438\u0441\u0438\u0442 Patroni. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 backends \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u043e\u0432 Patroni-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430.<\/p>\n<h3>\u041d\u0430\u0448\u0430 Grafana<\/h3>\n<p>\u0422\u0443\u0442 \u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0443\u0442 \u043e\u0434\u043d\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/32d\/8cf\/3a7\/32d8cf3a7ad918167662be9f2c1c0ea1.png\" width=\"1800\" height=\"848\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/32d\/8cf\/3a7\/32d8cf3a7ad918167662be9f2c1c0ea1.png\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/432\/9ba\/694\/4329ba694de70f74d081387d69565eaa.png\" width=\"1799\" height=\"769\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/432\/9ba\/694\/4329ba694de70f74d081387d69565eaa.png\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9d9\/5b2\/8dc\/9d95b28dccff5ff8e1f9f3713bb9b1ec.png\" width=\"1800\" height=\"691\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9d9\/5b2\/8dc\/9d95b28dccff5ff8e1f9f3713bb9b1ec.png\"\/><\/figure>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u043b\u0430 \u0432\u044b\u0439\u0442\u0438 \u0433\u043e\u0434 \u043d\u0430\u0437\u0430\u0434. \u041e\u0442\u043b\u0435\u0436\u0430\u043b\u0430\u0441\u044c, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u043b\u0430\u0441\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u043c\u0438. \u041f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0431\u043e\u044e \u0443\u0436\u0435 1,5 \u0433\u043e\u0434\u0430. \u0418\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u043e\u0432, \u043a\u0440\u043e\u043c\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e, \u0437\u0430 \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0435 \u0431\u044b\u043b\u043e.<\/p>\n<p>\u0427\u0442\u043e \u043d\u0430\u0441 \u0436\u0434\u0451\u0442 \u0432\u043f\u0435\u0440\u0435\u0434\u0438? \u041c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f \u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0430\u0434\u043c\u0438\u043d\u043a\u0438: \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u2014 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u043a\u0430\u0442\u043a\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u043d\u044b\u0445 \u0437\u043e\u043d \u0438 \u0443\u0445\u043e\u0434 \u043e\u0442 \u0440\u0438\u0441\u043a\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e \u041f\u041e (\u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c PowerDNS-Admin \u0438 2022 \u0433\u043e\u0434 \u0432 \u0446\u0435\u043b\u043e\u043c (<a href=\"https:\/\/habr.com\/ru\/news\/t\/655929\/\"><u>https:\/\/habr.com\/ru\/news\/t\/655929\/<\/u><\/a>)).\u00a0<\/p>\n<p>\u041a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u043d\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c, \u043f\u043e\u043a\u0430 \u0443\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u0434\u0443\u043c\u0430\u0435\u043c \u043d\u0430\u0434 \u0432\u044b\u0441\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 PostgreSQL \u0441 \u0443\u0437\u043b\u043e\u0432 PowerDNS.<\/p>\n<p>\u0418\u0437 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0439: \u0432 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u0445 \u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430, \u0438\u043b\u0438 \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0430 LB, \u0441\u0430\u043c\u044b\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f VIP \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 CARP\/VRRP. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0430\u0440\u0430 LB \u043c\u0430\u0448\u0438\u043d \u0441 Keepalived \u043d\u0430 \u0431\u043e\u0440\u0442\u0443 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0426\u041e\u0414, \u0430 \u0432 resolv.conf \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0432\u0441\u0435 VIP.\u00a0<\/p>\n<p>\u0412\u0440\u043e\u0434\u0435 \u0432\u0441\u0451. \u0421\u043f\u0430\u0441\u0438\u0431\u043e.\u00a0<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/ozontech\/blog\/722042\/\"> https:\/\/habr.com\/ru\/company\/ozontech\/blog\/722042\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u041c\u0430\u043a\u0441\u0438\u043c, \u044f \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0433\u0440\u0443\u043f\u043f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0432 Ozon. \u041d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0438 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438, \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445, \u043f\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0435\u0440\u0432\u0438\u0441 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043e\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u043c\u0435\u043d (DNS).<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0412 Ozon \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c. \u041e\u043d\u0438 \u043e\u0431\u0449\u0430\u044e\u0442\u0441\u044f \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c \u043f\u043e \u0434\u043e\u043c\u0435\u043d\u043d\u044b\u043c \u0438\u043c\u0435\u043d\u0430\u043c. DNS \u2014 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u0432\u0435\u043d\u043e, \u0431\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435 \u043e\u0431\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u0447\u0442\u0438 \u043d\u0438 \u043e\u0434\u043d\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 DNS \u043e\u0442\u0434\u0430\u0451\u0442 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0442\u043e \u044d\u0442\u043e \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u0438\u0442 \u2014 \u043f\u043b\u043e\u0445\u043e, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u0451\u0433 \u2014 \u043e\u0447\u0435\u043d\u044c \u043f\u043b\u043e\u0445\u043e, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043b\u0451\u0433 \u043d\u0430\u0434\u043e\u043b\u0433\u043e \u2014 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f. \u0417\u043d\u0430\u0447\u0438\u0442, \u043e\u0434\u043d\u0430 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u2014 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u043c \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0435 \u0438, \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043e\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u043c\u0451\u043d. \u041e\u0431 \u044d\u0442\u043e\u043c \u043c\u044b \u0438 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c. \u0422\u0430\u043a\u0436\u0435 \u0437\u0430\u0442\u0440\u043e\u043d\u0435\u043c \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043d\u044b\u043c\u0438 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438, \u0436\u0438\u0437\u043d\u044c \u0432 Multi DC-\u0441\u0440\u0435\u0434\u0435, \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 DNS, \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0436\u0443\u0440\u043d\u0430\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<\/p>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u043c\u0441\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0435\u0439, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043e\u0439 \u0438 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432, \u0434\u0430 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u0430 \u043a\u0430\u043a \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0432 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438.<\/p>\n<blockquote>\n<p><em>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043b\u044f\u043c\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u043e\u0433\u043e DNS \u0431\u0443\u0434\u0443\u0442 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 (\u043b\u044e\u0431\u043e\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u0435\u0442\u0438). \u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u0437\u043e\u043d\u044b \u0443 \u043d\u0430\u0441, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0435\u0441\u0442\u044c, \u043d\u043e, \u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438, \u0438\u043c\u0438 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 NOC (\u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u044b), \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 \u0438\u043d\u0444\u0440\u0443 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0445 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041f\u043e \u044d\u0442\u043e\u0439 \u0436\u0435 \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0442\u044c DNSSEC \u0438 IPv6.<\/em><\/p>\n<\/blockquote>\n<details class=\"spoiler\">\n<summary>Disclaimer<\/summary>\n<div class=\"spoiler__content\">\n<p><em>\u041b\u044e\u0431\u044b\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u043d \u043c\u0430\u0448\u0438\u043d \u0438 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u0438 ip \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b.<\/em><\/p>\n<\/div>\n<\/details>\n<h2>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/h2>\n<p>\u0422\u0430\u043a, \u0430 \u0437\u0430\u0447\u0435\u043c \u043d\u0430\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u0447\u0442\u043e-\u0442\u043e \u043c\u0435\u043d\u044f\u0442\u044c, \u0440\u0430\u0437\u0432\u0435 \u043d\u0430\u0448 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0439 DNS \u043d\u0435\u043d\u0430\u0434\u0451\u0436\u0435\u043d? \u0423 \u043c\u0435\u043d\u044f \u0432\u043e\u0442 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 DNS-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 \u0442\u0440\u0451\u0445 \u0426\u041e\u0414\u0430\u0445, \u0432\u0441\u0435 \u043e\u043d\u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 resolv.conf \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0441\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u0440\u0438\u043b\u0451\u0433, \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440 \u043f\u043e\u0439\u0434\u0451\u0442 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439, \u0430 \u0437\u0430\u0442\u0435\u043c \u0438 \u0432 \u0442\u0440\u0435\u0442\u0438\u0439.<\/p>\n<p>\u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 (\u043a\u043e\u0433\u0434\u0430 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0435\u0442\u0438\u0439 \u0426\u041e\u0414) \u0438 \u043f\u0440\u0438 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u044b\u0445 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440\u0430 (option timeout:5), \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 nameserver \u043e\u0442\u0432\u0435\u0442\u0438\u0442 \u043d\u0430 \u0437\u0430\u043f\u0440\u043e\u0441 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043f\u0440\u043e\u0448\u0435\u0441\u0442\u0432\u0438\u0438 \u0434\u0435\u0441\u044f\u0442\u0438 \u0441\u0435\u043a\u0443\u043d\u0434, \u0447\u0442\u043e \u0432 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435, \u043a\u043e\u0433\u0434\u0430 \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u0441 \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u043c\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0438 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0435\u0442 \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u0441 \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u043d\u044b\u043c \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u043c \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043e\u043f\u0446\u0438\u044f\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u043e\u043b\u0432\u0435\u0440\u0430, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u0443 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e. \u0422\u043e\u0442 \u0436\u0435 options rotate \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u044b \u0438\u0437 nameserver-\u0441\u043f\u0438\u0441\u043a\u0430 \u043f\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 round-robin (\u0442\u043e \u0435\u0441\u0442\u044c \u043f\u043e \u043e\u0447\u0435\u0440\u0435\u0434\u0438), \u0438 33 % \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u0431\u0435\u0437 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u043e\u0432\u2026 \u0422\u041e\u041b\u042c\u041a\u041e 33 %! \u041d\u0430\u043c \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442.<\/p>\n<blockquote>\n<p><em>\u0417\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u041d\u0435 \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 resolver.<\/em><\/strong>      <\/p>\n<\/blockquote>\n<p>\u0418\u0434\u0451\u043c \u0434\u0430\u043b\u044c\u0448\u0435. \u0414\u0443\u043c\u0430\u044e, \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u043b\u044b\u0448\u0430\u043b\u0438 \u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u201csmart DNS resolver\u201d. \u041f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0439 DNS forwarder, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0445\u043e\u0441\u0442. \u0415\u0433\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0441\u0440\u0430\u0437\u0443 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e DNS-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043e\u0442\u0432\u0435\u0442\u0430 \u043e\u0442 \u0441\u0430\u043c\u043e\u0433\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u2014 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c, \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438\u043c\u0451\u043d.<\/p>\n<p><em>(\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043a\u043e\u043c\u0443-\u0442\u043e \u0442\u0440\u0430\u0444\u0438\u043a x2,3,N \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u044d\u0442\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0432 \u0441\u0432\u043e\u0435\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435.)<\/em><\/p>\n<p>\u0414\u043b\u044f \u0433\u043e\u043c\u043e\u0433\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0435\u0437\u0434\u0435 Linux) \u0441 \u0435\u0434\u0438\u043d\u044b\u043c \u0446\u0435\u043d\u0442\u0440\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f (DNS \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442 \u043e\u0434\u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432) \u044d\u0442\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435 \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0438, \u0447\u0442\u043e \u043d\u0435\u043c\u0430\u043b\u043e\u0432\u0430\u0436\u043d\u043e, \u2014 \u043f\u0440\u043e\u0441\u0442\u043e\u0435.<\/p>\n<p>\u041d\u043e, \u0443 \u043d\u0430\u0441 \u043d\u0435 \u0433\u043e\u043c\u043e\u0433\u0435\u043d\u043d\u0430\u044f \u0441\u0440\u0435\u0434\u0430 (\u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f Windows, \u043d\u0435\u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u0435\u0441\u0442\u044c), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434; \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0443\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e\u0433\u043e DNS-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0426\u041e\u0414), \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u00absmart DNS\u00bb \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043a\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u0442\u044b\u0441\u044f\u0447\u0438 \u043c\u0430\u0448\u0438\u043d\u2026 \u0422\u043e\u0436\u0435 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442.<\/p>\n<p>\u0412\u043e\u0431\u0449\u0435\u043c, \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0433\u0438\u0431\u043a\u043e\u0433\u043e \u0438 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u043e\u0435 \u2014 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e IP-\u0430\u0434\u0440\u0435\u0441 DNS-\u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f.<\/p>\n<blockquote>\n<p><em>\u0412\u0442\u043e\u0440\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>DNS-\u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432 \u043d\u0430 \u0441\u0435\u0442\u0435\u0432\u043e\u043c (IP \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f) \u0443\u0440\u043e\u0432\u043d\u0435 (L3 OSI).<\/em><\/strong><\/p>\n<\/blockquote>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0437\u0430 \u043e\u0434\u043d\u0438\u043c IP-\u0430\u0434\u0440\u0435\u0441\u043e\u043c \u043d\u0430\u0448\u0435\u0433\u043e DNS-\u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0432\u0430 \u0438 \u0431\u043e\u043b\u0435\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 DNS-\u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438 \u0442\u0430\u043a\u043e\u0439 IP \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c VIP-\u0430\u0434\u0440\u0435\u0441\u043e\u043c (Virtual IP), \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 DNS-\u0441\u0435\u0440\u0432\u0435\u0440 \u2014 real (\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c), \u0430 \u043f\u0430\u0447\u043a\u0443 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 DNS-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0437\u0430 VIP \u2014 \u043f\u0443\u043b\u043e\u043c (pool)<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432 Ozon \u0435\u0441\u0442\u044c \u043e\u0431\u0449\u0435\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<blockquote>\n<p><strong><em>\u0421\u0435\u0440\u0432\u0438\u0441 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0435\u0440\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u0443\u044e \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u043e\u0433\u043e \u0426\u041e\u0414 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (\u043c\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 DC-1).<\/em><\/strong><\/p>\n<\/blockquote>\n<p>\u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0437\u0430 VIP \u043e\u0434\u0438\u043d \u0438\u0437 real-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u00ab\u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0441\u044f\u00bb \u0438\u043b\u0438 \u00ab\u043f\u0440\u0438\u043a\u0430\u0437\u0430\u043b \u0434\u043e\u043b\u0433\u043e \u0436\u0438\u0442\u044c\u00bb? \u041f\u043e \u0441\u0443\u0442\u0438, \u043c\u044b \u043f\u043e\u043f\u0430\u0434\u0451\u043c \u0432 \u0442\u0443 \u0436\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u0447\u0442\u043e \u0438 \u0441 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c resolver, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u043a\u0430\u044f \u0434\u043e\u043b\u044f DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043d\u0435 \u043e\u0431\u0441\u043b\u0443\u0436\u0435\u043d\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a (healthchecks) real-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0441 \u0432\u044b\u043a\u0438\u0434\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0438\u0437 \u043f\u0443\u043b\u0430 \u00ab\u0431\u043e\u043b\u044c\u043d\u044b\u0445\u00bb \u0438 \u0437\u0430\u043a\u0438\u0434\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u00ab\u0437\u0434\u043e\u0440\u043e\u0432\u044b\u0445\u00bb.<\/p>\n<blockquote>\n<p><em>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 (healthchecks) real-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b VIP.<\/em><\/strong><\/p>\n<\/blockquote>\n<p>\u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0443\u0441\u043f\u0435\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b? \u041d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043d\u0430 \u043d\u0430\u0448 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 DNS \u0441\u0435\u0440\u0432\u0438\u0441 \u0432\u0435\u0441\u044c\u043c\u0430 \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430, \u0432\u0441\u0435\u0433\u043e 15-20 \u0442\u044b\u0441. RPS, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043b\u0435\u0433\u043a\u043e \u0432\u044b\u0432\u043e\u0437\u0438\u0442 \u043e\u0434\u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u044d\u0442\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0441\u0438\u043b\u044c\u043d\u043e \u043d\u0435 \u043a\u043e\u043f\u0430\u0435\u043c. \u0410 \u0441 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0438 \u043f\u043e\u0434\u0430\u0432\u043d\u043e \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u0443\u0441\u043f\u0435\u0432\u0430\u043d\u0438\u044f\u00bb \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0437\u0430\u043a\u0440\u044b\u0442. \u041e\u043d\u043e \u0443 \u043d\u0430\u0441, \u0441\u043a\u043e\u0440\u0435\u0435, \u0434\u043b\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0440\u0430\u0444\u0438\u043a\u0430.<\/p>\n<blockquote>\n<p><em>\u041f\u044f\u0442\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u0423\u043c\u0435\u0442\u044c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f<\/em><\/strong><em>.<\/em><\/p>\n<\/blockquote>\n<p>\u0420\u0430\u0437 \u0443\u0436 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0426\u041e\u0414, \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u0438 \u043e \u0441\u0435\u0442\u0435\u0432\u044b\u0445 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430\u0445. \u0421\u0442\u0440\u0430\u043d\u043d\u043e \u0445\u043e\u0434\u0438\u0442\u044c \u0432 DNS \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0426\u041e\u0414 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0434 \u0431\u043e\u043a\u043e\u043c \u0435\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 DNS. \u041c\u044b \u0445\u043e\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 \u0442\u043e\u043c \u0436\u0435 \u0426\u041e\u0414 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0445\u043e\u0434\u0438\u043b\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0435\u0433\u043e \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u0438 \u043e\u0442\u0432\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435.<\/p>\n<blockquote>\n<p><em>\u0428\u0435\u0441\u0442\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u0423\u043c\u0435\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0426\u041e\u0414<\/em><\/strong><em>.<\/em><\/p>\n<\/blockquote>\n<p>\u0410 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043c\u043d\u0435 \u0437\u0430\u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0435\u0433\u043b\u0430\u043c\u0435\u043d\u0442\u043d\u043e\u0435 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (\u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u041e\u0421, \u0436\u0435\u043b\u0435\u0437\u043e, \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432)? \u042f \u043c\u043e\u0433\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e DNS-\u0441\u043b\u0443\u0436\u0431\u0443, \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 healthchecks, \u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u0437 \u043f\u0443\u043b\u0430 \u0438 \u0437\u0430\u043d\u044f\u0442\u044c\u0441\u044f \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435\u043c. \u041d\u043e \u0442\u043e\u0433\u0434\u0430 \u0432\u0441\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043f\u043e\u0441\u043b\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e DNS \u0438 \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u0437 \u043f\u0443\u043b\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u0441\u044f \u043e\u0448\u0438\u0431\u043a\u043e\u0439. \u0422\u0430\u043a\u043e\u0435 \u0441\u0435\u0431\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443:<\/p>\n<blockquote>\n<p><em>\u0421\u0435\u0434\u044c\u043c\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u041f\u043b\u0430\u0432\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0442\u0440\u0430\u0444\u0438\u043a \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043c \u0440\u0435\u0433\u043b\u0430\u043c\u0435\u043d\u0442\u043d\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u044b<\/em><\/strong><em>.<\/em><\/p>\n<\/blockquote>\n<p>DNS-\u0441\u0435\u0440\u0432\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u043e\u043d \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 DNS \u0438\u043b\u0438 API. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c \u043d\u0430\u043b\u0438\u0432\u043a\u0438 \u0436\u0435\u043b\u0435\u0437\u043d\u044b\u0445 \u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 (Foreman, MaaS, Terraform \u0438 \u0442.\u0434.).<\/p>\n<blockquote>\n<p><em>\u0412\u043e\u0441\u044c\u043c\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u0437\u043e\u043d<\/em><\/strong><em>.<\/em><\/p>\n<\/blockquote>\n<p>\u0414\u0430\u043b\u0435\u0435, \u0447\u0442\u043e \u043d\u0430\u0441\u0447\u0451\u0442 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430?<\/p>\n<p>\u041e\u0447\u0435\u043d\u044c \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u044f \u0431\u044b \u0434\u0430\u0436\u0435 \u0441\u043a\u0430\u0437\u0430\u043b, \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0438 \u0440\u0430\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u043e\u0432. \u0410 \u0435\u0449\u0451 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0430\u043c \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 geo DNS \u043f\u0440\u0438\u043a\u0440\u0443\u0442\u0438\u0442\u044c.<\/p>\n<blockquote>\n<p><em>\u0414\u0435\u0432\u044f\u0442\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u0414\u043e\u043b\u0436\u043d\u044b \u0432\u0438\u0434\u0435\u0442\u044c source IP \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0430<\/em><\/strong><em>.<\/em><\/p>\n<\/blockquote>\n<p>\u041b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432? \u0414\u0430, \u043e\u0442\u0434\u0435\u043b \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0447\u0435\u0442. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0441 \u043b\u043e\u0433\u0430\u043c\u0438 debug \u043a\u0443\u0434\u0430 \u043f\u0440\u043e\u0449\u0435 \u0438 \u043f\u0440\u0438\u044f\u0442\u043d\u0435\u0435.<\/p>\n<blockquote>\n<p><em>\u0414\u0435\u0441\u044f\u0442\u043e\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u0423\u043c\u0435\u0442\u044c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u044b<\/em><\/strong><em>.<\/em><\/p>\n<\/blockquote>\n<p>\u0412 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0431\u0435\u0437 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043d\u0438\u043a\u0443\u0434\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443 DNS-\u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438. \u041f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 Prometheus, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0443 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432 Ozon.<\/p>\n<blockquote>\n<p><em>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435: <\/em><strong><em>\u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0432 DNS-\u0441\u0435\u0440\u0432\u0438\u0441 \u043c\u0435\u0442\u0440\u0438\u043a<\/em><\/strong><em>.<\/em><\/p>\n<\/blockquote>\n<h3>\u041f\u0440\u0438\u043a\u0438\u043d\u0435\u043c \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443<\/h3>\n<p>\u041f\u043e \u0437\u0430\u0434\u0443\u043c\u043a\u0435 \u043f\u0443\u0442\u044c \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<p><strong>Client (DNS-query) \u2192 LoadBalancer \u2192 Caching DNS \u2192 Authoritative DNS\u00a0<\/strong><\/p>\n<p>\u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0432\u0441\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b DNS (LoadBalancer, Caching DNS, Authoritative DNS) \u2014 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u043c \u0441\u0445\u0435\u043c\u0443 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041c\u0430\u0448\u0438\u043d\u044b LoadBalancer (LB) \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u043e\u0447\u043a\u0430\u043c\u0438 \u0432\u0445\u043e\u0434\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0443 \u043d\u0438\u0445 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c VIP \u2014 \u0435\u0434\u0438\u043d\u044b\u0439 IP-\u0430\u0434\u0440\u0435\u0441, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 LB \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u043b\u0438\u043a\u0430\u0442\u044c\u0441\u044f. <\/p>\n<h3>VIP (Virtual IP)<\/h3>\n<p>\u041d\u0430 \u0443\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0434\u0432\u0435 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438: CARP\/VRRP \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u0438\u0437\u0430\u0446\u0438\u044f (BGP). \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u043c:<\/p>\n<figure class=\"full-width\"><\/figure>\n<h3>LoadBalancer <\/h3>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u043e\u0437\u0430\u0431\u043e\u0442\u0438\u043b\u0438\u0441\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c \u043e healthchecks, \u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044d\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442. \u041e\u0431\u044b\u0447\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a (LoadBalancer, \u0438\u043b\u0438 LB). \u0418\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0435\u0433\u043e \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043c\u0435\u0436\u0434\u0443 real-\u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c\u0438. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043e\u043d, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u044d\u0442\u0438\u0445 real-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432, \u0438 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0445 \u0438\u0437 \u043f\u0443\u043b\u0430 (\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438).\u00a0<\/p>\n<p>\u0422\u0443\u0442 \u043c\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u043b\u0438 \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432:<\/p>\n<figure class=\"full-width\"><\/figure>\n<details class=\"spoiler\">\n<summary>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0441\u0435\u0442\u0438 \u0432 Ozon:<\/summary>\n<div class=\"spoiler__content\">\n<p><em>\u0422\u0440\u0438 \u0426\u041e\u0414. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u0435\u0442\u0438, \u0438\u043b\u0438 underlay, \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 Layer 3 Network, \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 overlay\u00a0 \u2014 BGP EVPN VXLAN. VLAN \u043c\u0435\u0436\u0434\u0443 \u0426\u041e\u0414 \u0441\u0442\u0430\u0440\u0430\u0435\u043c\u0441\u044f \u043d\u0435 \u0442\u044f\u043d\u0443\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u0435\u0442\u0438.<\/em><\/p>\n<\/div>\n<\/details>\n<p>IPVS NAT mode \u043e\u0431\u044f\u0436\u0435\u0442 \u043d\u0430\u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0442\u043e\u0442 \u0436\u0435 IPVS-\u0448\u043b\u044e\u0437, \u0447\u0442\u043e \u0443\u0436\u0435 \u043d\u0435\u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043b\u044f real-\u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u0438\u0445 \u0448\u043b\u044e\u0437\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e. \u0423\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442\u0441\u044f debug.<\/p>\n<p>IPVS DR mode \u0437\u0430\u0432\u044f\u0437\u0430\u043d \u043d\u0430 L2-\u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0441\u0435\u0442\u0438. \u0418 \u0435\u0441\u043b\u0438 \u043d\u0435 \u0442\u044f\u043d\u0443\u0442\u044c \u044d\u0442\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0447\u0435\u0440\u0435\u0437 VLAN, \u0442\u043e \u00ab\u043f\u043e\u0448\u0430\u0440\u0438\u0442\u044c\u00bb real-\u0441\u0435\u0440\u0432\u0435\u0440\u044b \u043c\u0435\u0436\u0434\u0443 \u0426\u041e\u0414 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f.<\/p>\n<p>IPVS IPIP \u2014 \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439: \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f GRE-\u0442\u0443\u043d\u043d\u0435\u043b\u044e \u0442\u0440\u0430\u0444\u0438\u043a \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u0440\u043e\u0448\u0435\u043d \u0432 \u043b\u044e\u0431\u0443\u044e L3-\u0441\u0435\u0442\u044c \u0438 \u043e\u0442\u0434\u0430\u043d \u043a\u043b\u0438\u0435\u043d\u0442\u0443 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u043c\u0438\u043d\u0443\u044f IPVS. \u041d\u043e, \u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0435\u0442\u0438, debug \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433.<\/p>\n<p>\u0412\u044b\u0432\u043e\u0434: \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c Userspace Layer7 LB \u043a\u0430\u043a \u0441\u0430\u043c\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c \u0438 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u0435\u0442\u0438.<\/p>\n<h3>\u041f\u0440\u043e source IP \u043a\u043b\u0438\u0435\u043d\u0442\u0430 <\/h3>\n<p>\u041e\u0431\u0441\u0443\u0434\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u0438 IP-\u0430\u0434\u0440\u0435\u0441\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432 \u043b\u043e\u0433\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<h4>EDNS Client Subnet (ECS)<\/h4>\n<p>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b: \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u043c (\u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c, \u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c, \u0435\u0441\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442) \u043f\u043e\u043b\u0435 ECS \u0432 DNS-\u0437\u0430\u043f\u0440\u043e\u0441\u0435, \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044f \u0442\u0430\u043c source IP \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0441\u0435\u0442\u044c, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 IP, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u043c\u0430\u0441\u043a\u0430 \/32 (\u0434\u043b\u044f IPv4). \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u043b\u044f ECS \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f L7 LoadBalancer.<\/p>\n<p>\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0430: \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 DNS-\u0437\u0430\u043f\u0440\u043e\u0441, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442 \u0435\u0433\u043e \u043d\u0430 Layer7 (OSI), \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u044f ECS \u0432 \u0437\u0430\u043f\u0440\u043e\u0441.\u00a0<\/p>\n<h4>X-Proxied-For (XPF)<\/h4>\n<p>\u041f\u043e \u0441\u0443\u0442\u0438, \u043c\u0435\u0442\u0430-RR (resource record), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a \u0437\u0430\u043f\u0440\u043e\u0441\u0443. \u0418\u043c\u0435\u0435\u0442 <a href=\"https:\/\/datatracker.ietf.org\/doc\/draft-bellis-dnsop-xpf\/\"><u>\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441, \u0441 \u0438\u0441\u0442\u0451\u043a\u0448\u0438\u043c \u0434\u0440\u0430\u0444\u0442\u043e\u043c<\/u><\/a>.<\/p>\n<p>\u041d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0435 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c.\u00a0<\/p>\n<h4>Proxy Protocol (PROXYv2)<\/h4>\n<p>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u0430\u0445 \u0438 \u043f\u043e\u0440\u0442\u0430\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 header \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 UDP-\u0434\u0430\u0442\u0430\u0433\u0440\u0430\u043c\u043c\u044b \u0438\u043b\u0438 TCP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f, \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 nginx, <a href=\"https:\/\/www.haproxy.org\/download\/2.2\/doc\/proxy-protocol.txt\"><u>Haprox<\/u><\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-346778","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/346778","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=346778"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/346778\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=346778"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=346778"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=346778"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}