рд╣рдо рдЕрдкрдирд╛ DNS-рдУрд╡рд░-HTTPS рд╕рд░реНрд╡рд░ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ

DNS рдСрдкрд░реЗрд╢рди рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдкрд╣рд▓реБрдУрдВ рдкрд░ рд▓реЗрдЦрдХ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╣реА рдХрдИ рдмрд╛рд░ рдмрд╛рд░-рдмрд╛рд░ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛ рдЪреБрдХреА рд╣реИ рд╕рд╛рдордЧреНрд░реА рдмреНрд▓реЙрдЧ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рддред рд╕рд╛рде рд╣реА, рдЗрд╕ рдкреНрд░рдореБрдЦ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗрд╡рд╛ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдкрд░ рд╣рдореЗрд╢рд╛ рдореБрдЦреНрдп рдЬреЛрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╣рдо рдЕрдкрдирд╛ DNS-рдУрд╡рд░-HTTPS рд╕рд░реНрд╡рд░ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ

рд╣рд╛рд▓ рддрдХ, DNS рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреА рд╕реНрдкрд╖реНрдЯ рднреЗрджреНрдпрддрд╛ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдЬреЛ рдЕрднреА рднреА, рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдордЧреНрд░реА, рд╕рд░рдХрд╛рд░реА рд╕реБрд░рдХреНрд╖рд╛ рдПрдЬреЗрдВрд╕рд┐рдпреЛрдВ рдФрд░ рд╕реЗрдВрд╕рд░рд╢рд┐рдк рдореЗрдВ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдПрдореНрдмреЗрдб рдХрд░рдХреЗ рдЕрдкрдиреА рдЖрдп рдмрдврд╝рд╛рдиреЗ рдХреА рдорд╛рдВрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЗ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдХреЗрд╡рд▓ рдЕрдкрд░рд╛рдзрд┐рдпреЛрдВ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдордЬрдмреВрдд рдХрд░рдирд╛DNSSEC/DANE, DNScrypt, DNS-over-TLS рдФрд░ DNS-over-HTTPS рдЬреИрд╕реА рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд░реБрдХрд╛ рд╣реБрдЖ рд╣реИред рдФрд░ рдпрджрд┐ рд╕рд░реНрд╡рд░ рд╕рдорд╛рдзрд╛рди, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛рдлреА рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдореМрдЬреВрдж рд╣реИрдВ, рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдд рдФрд░ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рддреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕реЗ рдЙрдирдХрд╛ рд╕рдорд░реНрдерди рд╡рд╛рдВрдЫрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рд░рд╣реА рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд▓реЛрдХрдкреНрд░рд┐рдп рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерди рдореЛрдб рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ DNS-рдУрд╡рд░-HTTPS (рдбреАрдУрдПрдЪ) рдЬрд▓реНрдж рд╣реАред рдЗрд╕рд╕реЗ WWW рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ DNS рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдЙрдкрд░реЛрдХреНрдд рдЦрддрд░реЛрдВ рд╕реЗ рдмрдЪрд╛рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА, рд▓реЗрдХрд┐рди рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдирдП рдЦрддрд░реЗ рднреА рдЖ рд╕рдХрддреЗ рд╣реИрдВред

1. рдбреАрдПрдирдПрд╕-рдУрд╡рд░-рдПрдЪрдЯреАрдЯреАрдкреАрдПрд╕ рд╕рдорд╕реНрдпрд╛рдПрдВ

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдореЗрдВ DNS-over-HTTPS рдХрд╛ рдЖрд░рдВрднрд┐рдХ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдкрд░рд┐рдЪрдп рдХреЗрд╡рд▓ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╢реИрддрд╛рди, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╣реИред

рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдЬреЛ DoH рдХреЗ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рджрд╛рдпрд░реЗ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рддреА рд╣реИ, рд╡рд╣ рдЗрд╕рдХрд╛ рдХреЗрд╡рд▓ рд╡реЗрдм рдЯреНрд░реИрдлрд╝рд┐рдХ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рд╣реИред рджрд░рдЕрд╕рд▓, HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдФрд░ рдЗрд╕рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг HTTP/2, рдЬрд┐рд╕ рдкрд░ DoH рдЖрдзрд╛рд░рд┐рдд рд╣реИ, WWW рдХрд╛ рдЖрдзрд╛рд░ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдиреЗрдЯ рд╕рд┐рд░реНрдл рд╡реЗрдм рдирд╣реАрдВ рд╣реИ. рдмрд╣реБрдд рд╕рд╛рд░реА рд▓реЛрдХрдкреНрд░рд┐рдп рд╕реЗрд╡рд╛рдПрдБ рд╣реИрдВ, рдЬреИрд╕реЗ рдИрдореЗрд▓, рд╡рд┐рднрд┐рдиреНрди рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдореИрд╕реЗрдВрдЬрд░, рдлрд╝рд╛рдЗрд▓ рдЯреНрд░рд╛рдВрд╕рдлрд╝рд░ рд╕рд┐рд╕реНрдЯрдо, рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ, рдЖрджрд┐, рдЬреЛ HTTP рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрдИ рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ DoH рдХреЛ рд░рд╛рдордмрд╛рдг рдорд╛рдирдиреЗ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рддрдХрдиреАрдХреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд (рдФрд░ рдЕрдирд╛рд╡рд╢реНрдпрдХ) рдкреНрд░рдпрд╛рд╕ рдХреЗ рдмрд┐рдирд╛ рдЕрдиреБрдкрдпреБрдХреНрдд рд╕рд╛рдмрд┐рдд рд╣реЛрддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдбреАрдПрдирдПрд╕-рдУрд╡рд░-рдЯреАрдПрд▓рдПрд╕ рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдпреЛрдЧреНрдп рдЙрдореНрдореАрджрд╡рд╛рд░ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ, рдЬреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рдорд╛рдирдХ рдЯреАрдПрд▓рдПрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдорд╛рдирдХ рдбреАрдПрдирдПрд╕ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЗ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛, рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрдХрд▓ DoH рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ DNS рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╡рд┐рдХреЗрдВрджреНрд░реАрдХрд░рдг рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкрд░рд┐рддреНрдпрд╛рдЧ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореЛрдЬрд╝рд┐рд▓рд╛ рдХреНрд▓рд╛рдЙрдбрдлрд╝реЗрдпрд░ рдХреА рдПрдХ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣ рдХреА рд╕реЗрд╡рд╛ рдЕрдиреНрдп рдкреНрд░рдореБрдЦ рдЗрдВрдЯрд░рдиреЗрдЯ рд╣рд╕реНрддрд┐рдпреЛрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ Google рджреНрд╡рд╛рд░рд╛ рднреА рд╢реБрд░реВ рдХреА рдЧрдИ рдереАред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдбреАрдПрдирдПрд╕-рдУрд╡рд░-рдПрдЪрдЯреАрдЯреАрдкреАрдПрд╕ рдХрд╛ рдЙрд╕ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИ, рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕реЗрд╡рд╛рдУрдВ рдкрд░ рдЕрдВрддрд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдмрдврд╝рд╛рддрд╛ рд╣реИред рдпрд╣ рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ DNS рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЬреЛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╡рд╣ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рднреА рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЗрд╕рдХреА рд╕рдЯреАрдХрддрд╛ рдФрд░ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рднреА рдмрдврд╝рд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рд▓реЗрдЦрдХ рдбреАрдПрдирдПрд╕-рдУрд╡рд░-рдПрдЪрдЯреАрдЯреАрдкреАрдПрд╕ рдХреЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдбреАрдПрдирдПрд╕-рдУрд╡рд░-рдЯреАрдПрд▓рдПрд╕ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдбреАрдПрдирдПрд╕рдПрд╕рдИрд╕реА/рдбреАрдПрдПрдирдИ рдХреЛ рдПрдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ, рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рдЖрдЧреЗ рдХреЗрдВрджреНрд░реАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓ рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреЗ рд╡реНрдпрд╛рдкрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдорд░реНрдердХ рдерд╛ рдФрд░ рд░рд╣реЗрдЧрд╛ред DNS рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдХреЛрдИ рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдореЗрдВ DoH рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд╕рдорд░реНрдерди рдХреА рддреАрд╡реНрд░ рд╢реБрд░реВрдЖрдд рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдЕрднреА рднреА рд╕реБрд░рдХреНрд╖рд╛ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдЙрддреНрд╕рд╛рд╣реА рд▓реЛрдЧреЛрдВ рдХрд╛ рдбреЛрдореЗрди рд╣реИред

рд▓реЗрдХрд┐рди рдЪреВрдБрдХрд┐ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ DoH рд╣реИ, рддреЛ рдирд┐рдЧрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрднрд╛рд╡рд┐рдд рдирд┐рдЧрд░рд╛рдиреА рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рдмрд╛рдж рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ DNS-рдУрд╡рд░-HTTPS рд╕рд░реНрд╡рд░ рдкрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ?

2. рдбреАрдПрдирдПрд╕-рдУрд╡рд░-рдПрдЪрдЯреАрдЯреАрдкреАрдПрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓

рдпрджрд┐ рдЖрдк рдорд╛рдирдХ рдХреЛ рджреЗрдЦреЗрдВ RFC8484 DNS-over-HTTPS рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рд╡реЗрдм рдПрдкреАрдЖрдИ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ HTTP/2 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдПрдХ рдорд╛рдирдХ DNS рдкреИрдХреЗрдЬ рдХреЛ рдЗрдирдХреИрдкреНрд╕реБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕реЗ рд╡рд┐рд╢реЗрд╖ HTTP рд╣реЗрдбрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдкреНрд░реЗрд╖рд┐рдд DNS рдбреЗрдЯрд╛ рдХреЗ рдмрд╛рдЗрдирд░реА рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рджреЗрдЦреЗрдВ)ред RFC1035 рдФрд░ рдмрд╛рдж рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝) рдХреЛ рдПрдХ рдРрд╕реЗ рд░реВрдк рдореЗрдВ рд░рдЦреЗрдВ рдЬреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЖрд╡рд╢реНрдпрдХ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдорд╛рдирдХ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХреЗрд╡рд▓ HTTP/2 рдФрд░ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд TLS рдХрдиреЗрдХреНрд╢рди рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред

DNS рдЕрдиреБрд░реЛрдз рднреЗрдЬрдирд╛ рдорд╛рдирдХ GET рдФрд░ POST рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдиреБрд░реЛрдз рдХреЛ рдмреЗрд╕ 64URL-рдПрдиреНрдХреЛрдбреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ, POST рдЕрдиреБрд░реЛрдз рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрд╛рдЗрдирд░реА рд░реВрдк рдореЗрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, DNS рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рдПрдХ рд╡рд┐рд╢реЗрд╖ MIME рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди/рдбреАрдПрдирдПрд╕-рд╕рдВрджреЗрд╢.

root@eprove:~ # curl -H 'accept: application/dns-message' 'https://my.domaint/dns-query?dns=q80BAAABAAAAAAAAB2V4YW1wbGUDY29tAAABAAE' -v
*   Trying 2001:100:200:300::400:443...
* TCP_NODELAY set
* Connected to eprove.net (2001:100:200:300::400) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /usr/local/share/certs/ca-root-nss.crt
  CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: CN=my.domain
*  start date: Jul 22 00:07:13 2019 GMT
*  expire date: Oct 20 00:07:13 2019 GMT
*  subjectAltName: host "my.domain" matched cert's "my.domain"
*  issuer: C=US; O=Let's Encrypt; CN=Let's Encrypt Authority X3
*  SSL certificate verify ok.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x801441000)
> GET /dns-query?dns=q80BAAABAAAAAAAAB2V4YW1wbGUDY29tAAABAAE HTTP/2
> Host: eprove.net
> User-Agent: curl/7.65.3
> accept: application/dns-message
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 200
< server: h2o/2.3.0-beta2
< content-type: application/dns-message
< cache-control: max-age=86274
< date: Thu, 12 Sep 2019 13:07:25 GMT
< strict-transport-security: max-age=15768000; includeSubDomains; preload
< content-length: 45
<
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file.
* Failed writing body (0 != 45)
* stopped the pause stream!
* Connection #0 to host eprove.net left intact

рд╢реАрд░реНрд╖рдХ рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХреИрд╢-рдирд┐рдпрдВрддреНрд░рдг: рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ. рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдЙрдореНрд░ рдЗрд╕рдореЗрдВ рд▓реМрдЯрд╛рдП рдЬрд╛ рд░рд╣реЗ DNS рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП рдЯреАрдЯреАрдПрд▓ рдорд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИ (рдпрд╛ рдпрджрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗрдЯ рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рддреЛ рдиреНрдпреВрдирддрдо рдорд╛рди)ред

рдЙрдкрд░реЛрдХреНрдд рдХреЗ рдЖрдзрд╛рд░ рдкрд░, DoH рд╕рд░реНрд╡рд░ рдХреА рдХрд╛рд░реНрдпрдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдХрдИ рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВред

  • рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ. рдпрджрд┐ рдпрд╣ GET рд╣реИ рддреЛ рдкреИрдХреЗрдЯ рдХреЛ рдмреЗрд╕64URL рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╕реЗ рдбреАрдХреЛрдб рдХрд░реЗрдВред
  • рдЗрд╕ рдкреИрдХреЗрдЯ рдХреЛ DNS рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬреЗрдВред
  • DNS рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  • рдкреНрд░рд╛рдкреНрдд рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдиреНрдпреВрдирддрдо рдЯреАрдЯреАрдПрд▓ рдорд╛рди рдЬреНрдЮрд╛рдд рдХрд░реЗрдВред
  • HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд▓реМрдЯрд╛рдПрдБред

3. рдЖрдкрдХрд╛ рдЕрдкрдирд╛ DNS-рдУрд╡рд░-HTTPS рд╕рд░реНрд╡рд░

рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ DNS-рдУрд╡рд░-HTTPS рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд░рд▓, рддреЗрдЬрд╝ рдФрд░ рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рддрд░реАрдХрд╛ HTTP/2 рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ H2O, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦрдХ рдкрд╣рд▓реЗ рд╣реА рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд▓рд┐рдЦ рдЪреБрдХрд╛ рд╣реИ (рджреЗрдЦреЗрдВ "рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди H2O рд╡реЗрдм рд╕рд░реНрд╡рд░┬л)ред

рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ DoH рд╕рд░реНрд╡рд░ рдХреЗ рд╕рднреА рдХреЛрдб рдХреЛ H2O рдореЗрдВ рдПрдХреАрдХреГрдд рджреБрднрд╛рд╖рд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореГрдмреА. рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, DNS рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ (mrbgem) рд╕реЙрдХреЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, H2O 2.3.0-рдмреАрдЯрд╛2 рдХреЗ рд╡рд░реНрддрдорд╛рди рд╡рд┐рдХрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢рд╛рдорд┐рд▓ рд╣реИред рдЙрдкрд╕реНрдерд┐рдд рдлреНрд░реАрдмреАрдПрд╕рдбреА рдкреЛрд░реНрдЯ рдореЗрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░рдХреЗ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ рд╕реЙрдХреЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП /рдбрд┐рдкреНрд╕ рд╕рдВрдХрд▓рди рд╕реЗ рдкрд╣рд▓реЗ.

root@beta:~ # uname -v
FreeBSD 12.0-RELEASE-p10 GENERIC
root@beta:~ # cd /usr/ports/www/h2o
root@beta:/usr/ports/www/h2o # make extract
===>  License MIT BSD2CLAUSE accepted by the user
===>   h2o-2.2.6 depends on file: /usr/local/sbin/pkg - found
===> Fetching all distfiles required by h2o-2.2.6 for building
===>  Extracting for h2o-2.2.6.
=> SHA256 Checksum OK for h2o-h2o-v2.2.6_GH0.tar.gz.
===>   h2o-2.2.6 depends on file: /usr/local/bin/ruby26 - found
root@beta:/usr/ports/www/h2o # cd work/h2o-2.2.6/deps/
root@beta:/usr/ports/www/h2o/work/h2o-2.2.6/deps # git clone https://github.com/iij/mruby-socket.git
╨Ъ╨╗╨╛╨╜╨╕╤А╨╛╨▓╨░╨╜╨╕╨╡ ╨▓ ┬лmruby-socket┬╗тАж
remote: Enumerating objects: 385, done.
remote: Total 385 (delta 0), reused 0 (delta 0), pack-reused 385
╨Я╨╛╨╗╤Г╤З╨╡╨╜╨╕╨╡ ╨╛╨▒╤К╨╡╨║╤В╨╛╨▓: 100% (385/385), 98.02 KiB | 647.00 KiB/s, ╨│╨╛╤В╨╛╨▓╨╛.
╨Ю╨┐╤А╨╡╨┤╨╡╨╗╨╡╨╜╨╕╨╡ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╨╣: 100% (208/208), ╨│╨╛╤В╨╛╨▓╨╛.
root@beta:/usr/ports/www/h2o/work/h2o-2.2.6/deps # ll
total 181
drwxr-xr-x   9 root  wheel  18 12 ╨░╨▓╨│.  16:09 brotli/
drwxr-xr-x   2 root  wheel   4 12 ╨░╨▓╨│.  16:09 cloexec/
drwxr-xr-x   2 root  wheel   5 12 ╨░╨▓╨│.  16:09 golombset/
drwxr-xr-x   4 root  wheel  35 12 ╨░╨▓╨│.  16:09 klib/
drwxr-xr-x   2 root  wheel   5 12 ╨░╨▓╨│.  16:09 libgkc/
drwxr-xr-x   4 root  wheel  26 12 ╨░╨▓╨│.  16:09 libyrmcds/
drwxr-xr-x  13 root  wheel  32 12 ╨░╨▓╨│.  16:09 mruby/
drwxr-xr-x   5 root  wheel  11 12 ╨░╨▓╨│.  16:09 mruby-digest/
drwxr-xr-x   5 root  wheel  10 12 ╨░╨▓╨│.  16:09 mruby-dir/
drwxr-xr-x   5 root  wheel  10 12 ╨░╨▓╨│.  16:09 mruby-env/
drwxr-xr-x   4 root  wheel   9 12 ╨░╨▓╨│.  16:09 mruby-errno/
drwxr-xr-x   5 root  wheel  14 12 ╨░╨▓╨│.  16:09 mruby-file-stat/
drwxr-xr-x   5 root  wheel  10 12 ╨░╨▓╨│.  16:09 mruby-iijson/
drwxr-xr-x   5 root  wheel  11 12 ╨░╨▓╨│.  16:09 mruby-input-stream/
drwxr-xr-x   6 root  wheel  11 12 ╨░╨▓╨│.  16:09 mruby-io/
drwxr-xr-x   5 root  wheel  10 12 ╨░╨▓╨│.  16:09 mruby-onig-regexp/
drwxr-xr-x   4 root  wheel  10 12 ╨░╨▓╨│.  16:09 mruby-pack/
drwxr-xr-x   5 root  wheel  10 12 ╨░╨▓╨│.  16:09 mruby-require/
drwxr-xr-x   6 root  wheel  10 12 ╤Б╨╡╨╜╤В. 16:10 mruby-socket/
drwxr-xr-x   2 root  wheel   9 12 ╨░╨▓╨│.  16:09 neverbleed/
drwxr-xr-x   2 root  wheel  13 12 ╨░╨▓╨│.  16:09 picohttpparser/
drwxr-xr-x   2 root  wheel   4 12 ╨░╨▓╨│.  16:09 picotest/
drwxr-xr-x   9 root  wheel  16 12 ╨░╨▓╨│.  16:09 picotls/
drwxr-xr-x   4 root  wheel   8 12 ╨░╨▓╨│.  16:09 ssl-conservatory/
drwxr-xr-x   8 root  wheel  18 12 ╨░╨▓╨│.  16:09 yaml/
drwxr-xr-x   2 root  wheel   8 12 ╨░╨▓╨│.  16:09 yoml/
root@beta:/usr/ports/www/h2o/work/h2o-2.2.6/deps # cd ../../..
root@beta:/usr/ports/www/h2o # make install clean
...

рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЖрдо рддреМрд░ рдкрд░ рдорд╛рдирдХ рд╣реИ.

root@beta:/usr/ports/www/h2o #  cd /usr/local/etc/h2o/
root@beta:/usr/local/etc/h2o # cat h2o.conf
# this sample config gives you a feel for how h2o can be used
# and a high-security configuration for TLS and HTTP headers
# see https://h2o.examp1e.net/ for detailed documentation
# and h2o --help for command-line options and settings

# v.20180207 (c)2018 by Max Kostikov http://kostikov.co e-mail: [email protected]

user: www
pid-file: /var/run/h2o.pid
access-log:
    path: /var/log/h2o/h2o-access.log
    format: "%h %v %l %u %t "%r" %s %b "%{Referer}i" "%{User-agent}i""
error-log: /var/log/h2o/h2o-error.log

expires: off
compress: on
file.dirlisting: off
file.send-compressed: on

file.index: [ 'index.html', 'index.php' ]

listen:
    port: 80
listen:
    port: 443
    ssl:
        cipher-suite: ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
        cipher-preference: server
        dh-file: /etc/ssl/dhparams.pem
        certificate-file: /usr/local/etc/letsencrypt/live/eprove.net/fullchain.pem
        key-file: /usr/local/etc/letsencrypt/live/my.domain/privkey.pem

hosts:
    "*.my.domain":
        paths: &go_tls
            "/":
                redirect:
                    status: 301
                    url: https://my.domain/
    "my.domain:80":
        paths: *go_tls
    "my.domain:443":
        header.add: "Strict-Transport-Security: max-age=15768000; includeSubDomains; preload"
        paths:
            "/dns-query":
               mruby.handler-file: /usr/local/etc/h2o/h2odoh.rb

рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж рдпреВрдЖрд░рдПрд▓ рд╣реИрдВрдбрд▓рд░ рд╣реИ /dns-рдХреНрд╡реЗрд░реА рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░рд╛ DNS-over-HTTPS рд╕рд░реНрд╡рд░, рдЬрд┐рд╕реЗ mruby рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд╣реИрдВрдбрд▓рд░ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ mruby.рд╣реИрдВрдбрд▓рд░-рдлрд╝рд╛рдЗрд▓.

root@beta:/usr/local/etc/h2o # cat h2odoh.rb
# H2O HTTP/2 web server as DNS-over-HTTP service
# v.20190908 (c)2018-2019 Max Kostikov https://kostikov.co e-mail: [email protected]

proc {|env|
    if env['HTTP_ACCEPT'] == "application/dns-message"
        case env['REQUEST_METHOD']
            when "GET"
                req = env['QUERY_STRING'].gsub(/^dns=/,'')
                # base64URL decode
                req = req.tr("-_", "+/")
                if !req.end_with?("=") && req.length % 4 != 0
                    req = req.ljust((req.length + 3) & ~3, "=")
                end
                req = req.unpack1("m")
            when "POST"
                req = env['rack.input'].read
            else
                req = ""
        end
        if req.empty?
            [400, { 'content-type' => 'text/plain' }, [ "Bad Request" ]]
        else
            # --- ask DNS server
            sock = UDPSocket.new
            sock.connect("localhost", 53)
            sock.send(req, 0)
            str = sock.recv(4096)
            sock.close
            # --- find lowest TTL in response
            nans = str[6, 2].unpack1('n') # number of answers
            if nans > 0 # no DNS failure
                shift = 12
                ttl = 0
                while nans > 0
                    # process domain name compression
                    if str[shift].unpack1("C") < 192
                        shift = str.index("x00", shift) + 5
                        if ttl == 0 # skip question section
                            next
                        end
                    end
                    shift += 6
                    curttl = str[shift, 4].unpack1('N')
                    shift += str[shift + 4, 2].unpack1('n') + 6 # responce data size
                    if ttl == 0 or ttl > curttl
                        ttl = curttl
                    end
                    nans -= 1
                 end
                 cc = 'max-age=' + ttl.to_s
            else
                 cc = 'no-cache'
            end
            [200, { 'content-type' => 'application/dns-message', 'content-length' => str.size, 'cache-control' => cc }, [ str ] ]
        end
    else
        [415, { 'content-type' => 'text/plain' }, [ "Unsupported Media Type" ]]
    end
}

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕реНрдерд╛рдиреАрдп рдХреИрд╢рд┐рдВрдЧ рд╕рд░реНрд╡рд░ DNS рдкреИрдХреЗрдЯ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ рдЕрдмрд╛рдз рдорд╛рдирдХ рдлреНрд░реАрдмреАрдПрд╕рдбреА рд╡рд┐рддрд░рдг рд╕реЗред рд╕реБрд░рдХреНрд╖рд╛ рдХреА рджреГрд╖реНрдЯрд┐ рд╕реЗ рдпрд╣ рд╕рд░реНрд╡реЛрддреНрддрдо рд╕рдорд╛рдзрд╛рди рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреБрдЫ рднреА рдЖрдкрдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ рд╕реНрдерд╛рдиреАрдп рд╣реЛрд╕реНрдЯ рдХрд┐рд╕реА рднрд┐рдиреНрди DNS рдкрддреЗ рдкрд░ рдЬрд┐рд╕рдХрд╛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

root@beta:/usr/local/etc/h2o # local-unbound verison
usage:  local-unbound [options]
        start unbound daemon DNS resolver.
-h      this help
-c file config file to read instead of /var/unbound/unbound.conf
        file format is described in unbound.conf(5).
-d      do not fork into the background.
-p      do not create a pidfile.
-v      verbose (more times to increase verbosity)
Version 1.8.1
linked libs: mini-event internal (it uses select), OpenSSL 1.1.1a-freebsd  20 Nov 2018
linked modules: dns64 respip validator iterator
BSD licensed, see LICENSE in source package for details.
Report bugs to [email protected]
root@eprove:/usr/local/etc/h2o # sockstat -46 | grep unbound
unbound  local-unbo 69749 3  udp6   ::1:53                *:*
unbound  local-unbo 69749 4  tcp6   ::1:53                *:*
unbound  local-unbo 69749 5  udp4   127.0.0.1:53          *:*
unbound  local-unbo 69749 6  tcp4   127.0.0.1:53          *:*

рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рд╣реИ рд╡рд╣ H2O рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдирд╛ рд╣реИ рдФрд░ рджреЗрдЦрдирд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрддрд╛ рд╣реИред

root@beta:/usr/local/etc/h2o # service h2o restart
Stopping h2o.
Waiting for PIDS: 69871.
Starting h2o.
start_server (pid:70532) starting now...

4. рдкрд░реАрдХреНрд╖рдг

рддреЛ, рдЖрдЗрдП рджреЛрдмрд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдЕрдиреБрд░реЛрдз рднреЗрдЬрдХрд░ рдФрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рджреЗрдЦрдХрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдЯреАрд╕реАрдкреАрдбрдореНрдк.

root@beta/usr/local/etc/h2o # curl -H 'accept: application/dns-message' 'https://my.domain/dns-query?dns=q80BAAABAAAAAAAAB2V4YW1wbGUDY29tAAABAAE'
Warning: Binary output can mess up your terminal. Use "--output -" to tell
Warning: curl to output it to your terminal anyway, or consider "--output
Warning: <FILE>" to save to a file.
...
root@beta:~ # tcpdump -n -i lo0 udp port 53 -xx -XX -vv
tcpdump: listening on lo0, link-type NULL (BSD loopback), capture size 262144 bytes
16:32:40.420831 IP (tos 0x0, ttl 64, id 37575, offset 0, flags [none], proto UDP (17), length 57, bad cksum 0 (->e9ea)!)
    127.0.0.1.21070 > 127.0.0.1.53: [bad udp cksum 0xfe38 -> 0x33e3!] 43981+ A? example.com. (29)
        0x0000:  0200 0000 4500 0039 92c7 0000 4011 0000  ....E..9....@...
        0x0010:  7f00 0001 7f00 0001 524e 0035 0025 fe38  ........RN.5.%.8
        0x0020:  abcd 0100 0001 0000 0000 0000 0765 7861  .............exa
        0x0030:  6d70 6c65 0363 6f6d 0000 0100 01         mple.com.....
16:32:40.796507 IP (tos 0x0, ttl 64, id 37590, offset 0, flags [none], proto UDP (17), length 73, bad cksum 0 (->e9cb)!)
    127.0.0.1.53 > 127.0.0.1.21070: [bad udp cksum 0xfe48 -> 0x43fa!] 43981 q: A? example.com. 1/0/0 example.com. A 93.184.216.34 (45)
        0x0000:  0200 0000 4500 0049 92d6 0000 4011 0000  ....E..I....@...
        0x0010:  7f00 0001 7f00 0001 0035 524e 0035 fe48  .........5RN.5.H
        0x0020:  abcd 8180 0001 0001 0000 0000 0765 7861  .............exa
        0x0030:  6d70 6c65 0363 6f6d 0000 0100 01c0 0c00  mple.com........
        0x0040:  0100 0100 0151 8000 045d b8d8 22         .....Q...].."
^C
2 packets captured
23 packets received by filter
0 packets dropped by kernel

рдЖрдЙрдЯрдкреБрдЯ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдкрддреЗ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ example.com DNS рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдФрд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдЕрдм рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рд╣реИ рд╡рд╣ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдирд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреГрд╖реНрдареЛрдВ рдкрд░ рдХрдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрджрд▓рдиреА рд╣реЛрдВрдЧреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рд╡рд┐рдиреНрдпрд╛рд╕.

рд╣рдо рдЕрдкрдирд╛ DNS-рдУрд╡рд░-HTTPS рд╕рд░реНрд╡рд░ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рдХрд╛ рдкрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбреАрдПрдирдПрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдЧрд╛ рдиреЗрдЯрд╡рд░реНрдХ.trr.uri. рд╕реБрд░рдХреНрд╖рд┐рдд рдЖрдИрдкреА рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЗ рд▓рд┐рдП рдЗрд╕ рдпреВрдЖрд░рдПрд▓ рд╕реЗ рдбреЛрдореЗрди рдЖрдИрдкреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рднреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рдмрд┐рдирд╛ рдбреАрдПрдирдПрд╕ рддрдХ рдкрд╣реБрдВрдЪреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдиреЗрдЯрд╡рд░реНрдХ.trr.рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдкрддрд╛. рдФрд░ рдЕрдВрдд рдореЗрдВ, рдкреИрд░рд╛рдореАрдЯрд░ рд╣реА рдиреЗрдЯрд╡рд░реНрдХ.trr.рдореЛрдб DoH рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдорд╛рди рдХреЛ "3" рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдирд╛рдо рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ DNS-рдУрд╡рд░-HTTPS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрдмрдХрд┐ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд "2" DoH рдХреЛ рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рджреЗрдЧрд╛, рдорд╛рдирдХ DNS рд▓реБрдХрдЕрдк рдХреЛ рдлрд╝реЙрд▓рдмреИрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред

5. рд▓рд╛рдн!

рдХреНрдпрд╛ рд▓реЗрдЦ рдорджрджрдЧрд╛рд░ рдерд╛? рддреЛ рдХреГрдкрдпрд╛ рд╢рд░реНрдорд╛рдПрдВ рдирд╣реАрдВ рдФрд░ рджрд╛рди рдкреНрд░рдкрддреНрд░ (рдиреАрдЪреЗ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдзрди рдХрд╛ рд╕рд╣рдпреЛрдЧ рдХрд░реЗрдВред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ