Aloha Habr, ʻo Ilya koʻu inoa, hana wau i ka hui kahua ma Exness. Hoʻomohala a hoʻokō mākou i nā ʻāpana ʻōnaehana kumu e hoʻohana ai kā mākou hui hoʻomohala huahana.
Ma kēia ʻatikala, makemake wau e kaʻana like i koʻu ʻike no ka hoʻokō ʻana i ka ʻenehana SNI (ESNI) i hoʻopili ʻia i ka ʻenehana o nā pūnaewele lehulehu.
ʻO ka hoʻohana ʻana i kēia ʻenehana e hoʻonui i ke kiʻekiʻe o ka palekana i ka wā e hana ai me kahi pūnaewele lehulehu a hoʻokō i nā kūlana palekana kūloko i hāpai ʻia e ka Hui.
ʻO ka mea mua, makemake wau e kuhikuhi ʻaʻole i hoʻohālikelike ʻia ka ʻenehana a aia nō i loko o ka draft, akā ua kākoʻo ʻo CloudFlare a me Mozilla iā ia (i ka
Keʻano o ka manaʻo
ESNI he hoʻonui i ka protocol TLS 1.3 e hiki ai ke hoʻopili ʻia ʻo SNI ma ka leka lima TLS "Client Hello". Eia ke ʻano o ka Client Hello me ke kākoʻo ESNI (ma kahi o ka SNI maʻamau a mākou e ʻike ai iā ESNI):
No ka hoʻohana ʻana iā ESNI, pono ʻoe i ʻekolu ʻāpana:
- DNS;
- Kākoʻo mea kūʻai aku;
- Kākoʻo ʻaoʻao kikowaena.
pākuʻina kau
Pono ʻoe e hoʻohui i ʻelua mau moʻolelo DNS - Aa TXT (Loaʻa i ka moʻolelo TXT ke kī lehulehu e hiki ai i ka mea kūʻai ke hoʻopili i ka SNI) - e ʻike ma lalo. Eia kekahi, pono ke kākoʻo ʻO DoH (DNS ma luna o HTTPS) no ka mea, ʻaʻole hiki i nā mea kūʻai aku (nānā ma lalo) ke kākoʻo ESNI me ka ʻole o DoH. He kūpono kēia, ʻoiai ʻo ESNI e pili ana i ka hoʻopili ʻana i ka inoa o ka kumuwaiwai a mākou e komo ai, ʻo ia hoʻi, ʻaʻole kūpono ke komo i ka DNS ma luna o UDP. Eia kekahi, ka hoʻohana
Loaʻa i kēia manawa
CloudFlare
А komo:
curl 'https://dns.google.com/resolve?name=www.cloudflare.com&type=A'
-s -H 'accept: application/dns+json'
{
"Status": 0,
"TC": false,
"RD": true,
"RA": true,
"AD": true,
"CD": false,
"Question": [
{
"name": "www.cloudflare.com.",
"type": 1
}
],
"Answer": [
{
"name": "www.cloudflare.com.",
"type": 1,
"TTL": 257,
"data": "104.17.210.9"
},
{
"name": "www.cloudflare.com.",
"type": 1,
"TTL": 257,
"data": "104.17.209.9"
}
]
}
TXT hoʻopaʻa moʻolelo, hana ʻia ke noi e like me ke ʻano hoʻohālike _esni.FQDN:
curl 'https://dns.google.com/resolve?name=_esni.www.cloudflare.com&type=TXT'
-s -H 'accept: application/dns+json'
{
"Status": 0,
"TC": false,
"RD": true,
"RA": true,
"AD": true,
"CD": false,
"Question": [
{
"name": "_esni.www.cloudflare.com.",
"type": 16
}
],
"Answer": [
{
"name": "_esni.www.cloudflare.com.",
"type": 16,
"TTL": 1799,
"data": ""/wEUgUKlACQAHQAg9SiAYQ9aUseUZr47HYHvF5jkt3aZ5802eAMJPhRz1QgAAhMBAQQAAAAAXtUmAAAAAABe3Q8AAAA=""
}
],
"Comment": "Response from 2400:cb00:2049:1::a29f:209."
}
No laila, mai kahi hiʻohiʻona DNS, pono mākou e hoʻohana i ka DoH (ʻoi aku ka maikaʻi me DNSSEC) a hoʻohui i ʻelua mau helu.
Kākoʻo mea kūʻai aku
Inā mākou e kamaʻilio e pili ana i nā polokalamu kele pūnaewele, a laila i kēia manawa
ʻOiaʻiʻo, pono e hoʻohana ʻia ʻo TLS 1.3 e kākoʻo iā ESNI, no ka mea, he hoʻonui ʻia ʻo ESNI i TLS 1.3.
No ka hoʻāʻo ʻana i ka hope me ke kākoʻo ESNI, ua hoʻokō mākou i ka mea kūʻai aku ma go, Akā, ʻoi aku ma hope.
Kākoʻo ʻaoʻao kikowaena
I kēia manawa, ʻaʻole kākoʻo ʻia ʻo ESNI e nā kikowaena pūnaewele e like me nginx/apache, a me nā mea ʻē aʻe, no ka mea, hana pū lākou me TLS ma o OpenSSL/BoringSSL, ʻaʻole i kākoʻo i ka ESNI.
No laila, ua hoʻoholo mākou e hana i kā mākou mea ponoʻī mua (ESNI reverse proxy), e kākoʻo ana i ka hoʻopau ʻana o TLS 1.3 me ka ESNI a me ka proxy HTTP(S) traffic i ka upstream, ʻaʻole ia e kākoʻo iā ESNI. ʻAe kēia i ka ʻenehana e hoʻohana ʻia i loko o kahi ʻenehana i loaʻa, me ka hoʻololi ʻole i nā mea nui - ʻo ia hoʻi, me ka hoʻohana ʻana i nā kikowaena pūnaewele o kēia manawa i kākoʻo ʻole iā ESNI.
No ka akaka, eia kahi kiʻi:
Hoʻomaopopo wau ua hoʻolālā ʻia ka mea koho me ka hiki ke hoʻopau i kahi pilina TLS me ka ʻole o ESNI, e kākoʻo i nā mea kūʻai aku me ka ʻole o ESNI. Eia kekahi, ʻo ka protocol kamaʻilio me ka upstream hiki ke HTTP a i ʻole HTTPS me kahi mana TLS haʻahaʻa ma mua o 1.3 (inā ʻaʻole kākoʻo i ka upstream 1.3). Hāʻawi kēia papahana i ka hiki ke maʻalahi.
Hoʻokō i ke kākoʻo ESNI ma go aie mai makou
No ka hana ʻana i nā kī ESNI ua hoʻohana mākou
Ua hoʻāʻo mākou i ke kūkulu me ka hoʻohana ʻana i ka go 1.13 ma Linux (Debian, Alpine) a me MacOS.
He mau huaʻōlelo e pili ana i nā hiʻohiʻona hana
Hāʻawi ka ESNI reverse proxy i nā ana ma ke ʻano Prometheus, e like me rps, upstream latency a me nā code pane, hāʻule/kūpono nā lima lima TLS a me ka lōʻihi o ka lulu lima TLS. I ka nānā mua ʻana, ua lawa kēia e loiloi i ke ʻano o ka lawelawe ʻana o ka proxy i nā kaʻa.
Ua hana pū mākou i ka hoʻāʻo ukana ma mua o ka hoʻohana ʻana. Nā hualoaʻa ma lalo nei:
wrk -t50 -c1000 -d360s 'https://esni-rev-proxy.npw:443' --timeout 15s
Running 6m test @ https://esni-rev-proxy.npw:443
50 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.77s 1.21s 7.20s 65.43%
Req/Sec 13.78 8.84 140.00 83.70%
206357 requests in 6.00m, 6.08GB read
Requests/sec: 573.07
Transfer/sec: 17.28MB
Ua hana mākou i ka hoʻāʻo ʻana i ka ukana qualitative e hoʻohālikelike i ka hoʻolālā me ka hoʻohana ʻana i ka proxy reverse ESNI a me ka ʻole. Ua "ninini" mākou i nā kaʻa ma ka ʻāina i mea e hoʻopau ai i ka "interference" i nā ʻāpana waena.
No laila, me ke kākoʻo ESNI a me ke koho ʻana i ka upstream mai HTTP, ua loaʻa iā mākou ma kahi o ~ 550 rps mai hoʻokahi manawa, me ka awelika CPU / RAM o ka ESNI reverse proxy:
- 80% Hoʻohana CPU (4 vCPU, 4 GB RAM pūʻali, Linux)
- 130 MB Mem RSS
No ka hoʻohālikelike ʻana, ʻo RPS no ka nginx like i luna me ka ʻole o ka TLS (HTTP protocol) hoʻopau ʻo ~ 1100:
wrk -t50 -c1000 -d360s 'http://lb.npw:80' –-timeout 15s
Running 6m test @ http://lb.npw:80
50 threads and 1000 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.11s 2.30s 15.00s 90.94%
Req/Sec 23.25 13.55 282.00 79.25%
393093 requests in 6.00m, 11.35GB read
Socket errors: connect 0, read 0, write 0, timeout 9555
Non-2xx or 3xx responses: 8111
Requests/sec: 1091.62
Transfer/sec: 32.27MB
Hōʻike ka hele ʻana o nā manawa i ka nele o nā kumuwaiwai (ua hoʻohana mākou i 4 vCPUs, 4 GB RAM hosts, Linux), a ʻoiaʻiʻo, ʻoi aku ka kiʻekiʻe o ka RPS (ua loaʻa iā mākou nā helu a hiki i 2700 RPS ma nā kumuwaiwai ʻoi aku ka ikaika).
I ka hopena, ʻike wau ʻIke maikaʻi loa kēlā ʻenehana ESNI. Nui nā nīnau hāmama, no ka laʻana, nā pilikia o ka mālama ʻana i ka kī ESNI lehulehu i ka DNS a me ka hoʻololi ʻana i nā kī ESNI - ke kūkākūkā ikaika ʻia nei kēia mau pilikia, a ʻo ka mana hou loa o ka ESNI draft (i ka manawa kākau)
Source: www.habr.com