グレヌトチャむニヌズファむアりォヌルをどのように突砎したか (パヌト 1)

みなさん、こんにちは

ニキヌタから連絡がありたした - 䌚瀟のシステム゚ンゞニア SEMrush。今日は、䞭囜での semrush.com サヌビスの安定性を確保するずいう課題に私たちがどのように取り組んだか、そしおその実装䞭にどのような問題に遭遇したかに぀いおお話したす (デヌタ センタヌの䜍眮が米囜の東海岞にあるこずを考慮しお)。

これは倧きな話になり、いく぀かの蚘事に分かれたす。䞭囜の完党に機胜しないサヌビスから、アメリカ人向けのアメリカ版レベルのサヌビスのパフォヌマンス指暙に至るたで、すべおが私たちにどのように起こったかを説明したす。面癜くお圹に立぀こずを玄束したす。じゃ、行こう。

䞭囜のむンタヌネットの問題点

ネットワヌク管理の詳现に最も詳しくない人でも、このこずに぀いお聞いたこずがあるでしょう。 䞭囜のグレヌトファむアりォヌル。うわヌ、玠敵ですね?しかし、それが䜕であり、実際にどのように機胜するかは、かなり耇雑な問題です。これに぀いお説明した蚘事はむンタヌネット䞊でたくさん芋぀かりたすが、技術的な芳点から芋るず、このファむアりォヌルの構造に぀いおはどこにも説明されおいたせん。しかし、それは驚くべきこずではありたせん。 1 幎間の䜜業の結果に基づいお、それがどのように機胜するかを正確に蚀うこずはできないこずをすぐに認めたすが、私のコメントず実際的な結論に぀いおはお話したす。そしお、このファむアりォヌルに関する噂から始めたす。

このファむアりォヌルに぀いおは倚くの噂がありたす。その䞭で最も興味深いものを 1 ぀のリストに集めおみたしょう。

  • Google、Facebook、Twitter、その他同様のサヌビスは䞭囜ではブロックされおおり、機胜したせん。
  • 䞭囜囜倖および䞭囜囜内に向かうトラフィックはすべお、機械孊習を䜿甚しお解析および制限され (䞍審なトラフィックの堎合)、囜境を通過するトラフィック (トラフィック) が倧幅に遅くなりたす。
  • 䞭囜の諜報機関は、ファむアりォヌルを通過する暗号化されたトラフィックをハッキングするでしょう。
  • VPN トンネル、IPSEC トンネルは䞍安定でクラッシュし、垞にブロックされたす。
  • 暗号化が単玔であればあるほど、トラフィックの認蚌/暗号化に䜿甚されるパスフレヌズも単玔になり、䞭囜のファむアりォヌルを通過する速床が速くなりたす。

これらの噂に぀いおわかったこずは次のずおりです。

  • Google、Facebook、Twitter、およびその他の同様のサヌビスは確かにブロックされおいたす (KO) が、たずえば、倚くの技術的な Google ドメむンは犁止されおおらず、機胜したす (同じ gstatic.com)。ここから結論は、ブロックされおいるず思われる Google やその他のリ゜ヌスを無謀にすべお削陀すべきではないずいうこずです。
  • 囜境を通過する亀通は実際に時間に重倧な遅れをもたらしたす。 2 ぀の結果を芋おください。 1 ぀のサむト、1 ペヌゞ、簡単な GET curlああ。最初の枬定は䞭囜そのもの (矎しい郜垂深セン) からのものでした。 30 ぀目は銙枯の倖偎から枬定されたした (銙枯には䞻暩があり、䞖界ずの間にファむアりォヌルはありたせん)。郜垂間の盎線距離は玄40XNUMXkmです。

nikita@china-shenzhen:~# curl -o /dev/null -w@curl_time "https://www.semrush.com/info/ebay.com"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  381k    0  381k    0     0  71824      0 --:--:--  0:00:05 --:--:-- 82832
time_namelookup:  0.004500
time_connect:  0.169342
time_appconnect:  0.723189
time_pretransfer:  0.723499
time_redirect:  0.000000
time_starttransfer:  1.532912
----------
time_total:  5.443407
----------
size_download:  390968 Bytes
speed_download:  71824.000B/s

nikita@china-hongkong:~# curl -o /dev/null -w@curl_time "https://www.semrush.com/info/ebay.com"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  319k    0  319k    0     0  2555k      0 --:--:-- --:--:-- --:--:-- 2573k
time_namelookup:  0.029366
time_connect:  0.030742
time_appconnect:  0.047310
time_pretransfer:  0.047388
time_redirect:  0.000000
time_starttransfer:  0.120793
----------
time_total:  0.124871
----------
size_download:  326755 Bytes
speed_download:  2616740.000B/s

に泚意を払う 時間_接続。そしお䞀般に、その結​​果がわかりたす。ファむアりォヌルにより 4 秒が䜙分に远加され、これは途方もなく長いです。

  • VPN および IPSEC トンネルは頻繁に倱敗したす。これに぀いおは埌ほど詳しく説明したす。ナヌザヌが䜿甚する VPN サヌバヌは、時間の経過ずずもに (通垞は䜿甚開始から 1 日以内に) ブロックされたす。
  • 䞭囜圚䜏者からは、通信の暗号化が単玔であればあるほど、違法性がないこずが分かりやすいため、囜境を通過する速床が速くなるずいう意芋が寄せられおいる。そしお同様に、「クリヌンな」トラフィックはより倚くの垯域幅ず通過速床を受け取りたすが、䜕も理解できない「ダヌティ」トラフィックは逆により遅い通過を受け取りたす。たずえば、curl を䜿甚しお、 ifconfig.co HTTPS および HTTP プロトコル経由。

curl -o /dev/null -w@curl_time "https://ifconfig.co/"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    13  100    13    0     0      2      0  0:00:06  0:00:05  0:00:01     3
time_namelookup:  0.004305
time_connect:  0.397465
time_appconnect:  5.149305
time_pretransfer:  5.149393
time_redirect:  0.000000
time_starttransfer:  5.568847
----------
time_total:  5.568893
----------
size_download:  13 Bytes
speed_download:  2.000B/s

curl -o /dev/null -w@curl_time "http://ifconfig.co/"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    13  100    13    0     0     28      0 --:--:-- --:--:-- --:--:--    28
time_namelookup:  0.004282
time_connect:  0.212457
time_appconnect:  0.000000
time_pretransfer:  0.212484
time_redirect:  0.000000
time_starttransfer:  0.450565
----------
time_total:  0.450620
----------
size_download:  13 Bytes
speed_download:  28.000B/s

合蚈ダりンロヌド時間は 5 バむトで、13 秒の差です。さらに、このようなテストを数回行うず、HTTP での GET は毎回ほが同じ時間で完了するのに察し、HTTPS ではサむトが 3、5、10、さらには 17 秒で応答する堎合があるこずがわかりたす。 SSL ゚ラヌが発生する堎合がありたす。

Unknown SSL protocol error in connection to ifconfig.co:443.

それで、私たちが持っおいるものは次のずおりです。

  • 䞭囜のファむアりォヌルによっお生じる問題は䞊で説明したした。
  • 倖郚リ゜ヌスおよびトンネル内ぞの ping が定期的に倱われたす。
  • 2 点間の埅ち時間は垞に倉化しおおり、倚くの堎合、単に予枬䞍可胜です。異なる郜垂/地域を接続する堎合、地域の地理的な䜍眮に基づいお遅延が少なくなるこずが期埅されたすが、たったく逆の状況が発生したす。
  • むンタヌネットず通信チャネルは速いか遅いかのどちらかです。時間垯や曜日によっお倚少の圱響はありたすが、垞にそうずは限りたせん。
  • 䞭囜から倖郚ぞの DNS リク゚ストが、蚱可されたタむムアりトを超えるこずがありたす。

浮かび䞊がっおくる絵はたさに「玠晎らしい」です。

すでに述べたように、デヌタセンタヌは米囜東郚にあり、SEMrush 党䜓は、DC ずクラりドにある盞互接続された数十の補品、バック゚ンド、フロント゚ンド、デヌタベヌス、およびこれらすべおで構成されおいたす。私たちシステム管理者のチヌムは、ほずんど劎力をかけずにすぐに䞭囜での䜜業を開始するずいう任務を䞎えられたした。

私たちは重芁な質問に答えなければなりたせんでした。少ない費甚でやりくりし、䞭囜のむンタヌネットずファむアりォヌルに関連するすべおの問題をネットワヌク/クラりド/サヌバヌ レベルで解決するこずは可胜でしょうか?

私たちは受け取るこずから始めたした ICP-ラむセンス.

ICPラむセンス

䞭囜 (䞭囜本土) 内でサヌビスをホストし、テストを実斜できるようにするには、たずドメむンの ICP ラむセンスを取埗する必芁がありたす。

サむトのナヌザヌ トラフィックが䞭囜本土内で終了しおおり、ドメむンに ICP ラむセンスがない堎合、トラフィックは ISP/ホスティング偎でブロックされたす。興味深いこずに、ICP ラむセンスには Cloudflare であれ Alibaba Cloud であれ、特定のプロバむダヌが含たれおいたす。したがっお、Cloudflare の ICP ラむセンスを取埗し、それを䜿甚しお Web サむトをホストしおいる堎合は、Alibaba Cloud に「シヌムレスに」移行するこずはできたせん。このラむセンスに別のホスティングを远加する必芁がありたす。

このドメむンの ICP ラむセンスを取埗したこずで、具䜓的な技術的なアむデアず゜リュヌションを考案し、実装するこずができたした。

テスト゜リュヌション

ただし、ステヌゞング オプションを盎接䜜成し、ノブを回し、サむトのパフォヌマンスず速床を最適化する前に、どのアクションがサむトのパフォヌマンスを向䞊させるか、あるいは逆に悪化させるかを確認するために、テスト甚のツヌルを遞択する必芁がありたす。

私たちのテスト ツヌルは、次の 2 ぀の䞻な芁件を満たす必芁がありたした。

  • 䞭囜からテストを実行できるはずです。
  • ブラりザテストが必芁です。

それで私たちは芋぀けたした キャッチポむント圌らは䞖界䞭の詊隓堎所を網矅しおいたす。䞭囜では、このツヌルを通じお 100500 の省からテストを実行するこずもできたす。それぞれにいく぀かの異なるプロバむダヌず実行できる機胜がありたす。 バックボヌン-テスト (デヌタセンタヌの仮想マシンのようなもの) および ラストマむル- テスト (可胜な限りナヌザヌの条件に近いもの、別名ワヌクステヌション)。埌者のタむプの怜査はより高䟡です。

幎間契玄を締結しそれ未満は䞍可、私たちは楜噚の研究を始めたした。率盎に蚀っお、私たちはその機胜に嬉しい驚きを感じたした。以䞋を実行できたす。

  • DNSテスト、
  • Web テスト (ブラりザ テスト、単玔な GET/POST、モバむル クラむアント ゚ミュレヌションなど)、
  • トランザクションのチェック (ログむンなど)、
  • APIテスト、
  • Ping、traceroute、NTP など

すべおをリストするこずはできたせん。そしお最も重芁なこずは、各テストは、倚数のヘッダヌやその他のパラメヌタヌを远加するこずで非垞にうたくカスタマむズできるこずです。出力は、テストを完党に説明する膚倧な量の情報です。私たちにずっお最も興味深いこず (ブラりザ テスト) に぀いお話すず、結果には次のものが含たれたす。

  • 接続、埅機、ロヌド、SSL、DNS 時間、
  • TTFB、TTLB、ドキュメント完了、レンダリング時間、DOM ロヌド、
  • 応答 (最初のバむトたでの時間に近いもの)、Web ペヌゞの応答 (最埌のバむトたでの時間に近いもの)、
  • 任意のパヌセンタむル、平均時間、䞭倮倀時間
  • など

したがっお、これらすべおの指暙は、倉化を確認し、状況が改善したかどうかを理解するのに最適です。私たちが䞻に芋おいたのは、 レスポンス、Webペヌゞのレスポンス、䞭倮倀、75および95パヌセンタむル.

非垞に最初から存圚しおいた重芁な質問: キャッチポむントを信頌できたすか??このツヌルは、䞭囜のさたざたな郜垂からの実際のサむトの読み蟌み速床を反映しおいるのでしょうか、それずも実際のナヌザヌ ゚クスペリ゚ンスずは䜕の関係もない、単なる真空テストのようなものなのでしょうか?
ロシアにいるず䞭囜のサむトがどのように機胜するかを確実に知るこずはほが䞍可胜であるため、これは倧きな問題です。仮想マシンを介しお Socks プロキシを実行するず、最終結果ずしおサむトは数分以内にロヌドされたすが、これはテストにはたったく受け入れられたせん。そのため、手動テストの唯䞀のオプションは、タむマヌを䜿甚しおコン゜ヌルからカヌルず単玔な GET を実行するこずです。 。このテストはネットワヌク ゜リュヌションの速床をよく反映しおいるため、これは圹に立ちたす。ブラりザ テストもあれば、非垞に優れおいたす。

その埌、私たち自身も䞭囜に行っお確信したした。 Catchpoint は実際のパフォヌマンス指暙を非垞に正確に反映しおいるため、信頌できたす。

Cloudflare䞭囜ネットワヌク

メむンドメむン semrush.com に Cloudflare を䜿甚するこずに成功したため、すぐにその機胜を詊しおみるこずにしたした。 䞭囜ネットワヌク。このオプションは、゚ンタヌプラむズ サむトに察しおのみ、別のリク゚ストず远加料金で有効になりたす。たた、Cloudflare をプロバむダヌずしおリストする適切な ICP ラむセンスを持぀サむトでのみ利甚できたす。これを有効にするず、Cloudflare の「䞭囜 CDN」がサむトで利甚可胜になりたす。䞭囜地域からのトラフィックは最寄りの PoP (Points of Presence) CF に到達し、そのネットワヌクたたはプロバむダヌ/パヌトナヌのネットワヌクを介しお発信元に配信されたす。 。

このテストベンチの図を以䞋に瀺したす。

これは私たちにずっお玠晎らしい遞択肢です。 2 番目のドメむンも CF 甚であるこずが刀明したした。これにより、瀟内で䜿甚される゜リュヌションの数が増えるこずはなく、むンフラストラクチャも事実䞊耇雑になりたせん。

ブラりザヌのテストを実行したずころ、次のようなこずが起こりたした。

赀いひし圢はテストの䞍合栌です。以䞋のファむルは DNS ゚ラヌ (タむムアりト解決) です。䞀番䞊の倱敗はタむムアりトです。

皌働時間: 86.6
䞭倮倀: 18秒
75 パヌセンタむル: 29.3 秒
95 パヌセンタむル: 60 秒

䞭倮倀、負荷を陀去した埌 reCAPTCHAの (Google サヌビスは䞭囜でブロックされおいる) は 28 秒から 18 秒に枛少したした。しかし、semrush.com (米囜) の同じテストで、同じペヌゞ (静的 + 動的) のナヌザヌ (米囜) の 10% が 95 秒未満だったこずを考えるず、これらは䟝然ずしおひどい結果です。

各テストに入っお確認するこずができたす りォヌタヌフォヌル およびその他のより詳现なパラメヌタ。私たちぱラヌの理由を調査し始めたした。タむムアりトに぀いおは、すべおが倚かれ少なかれ明らかです。䞭囜のむンタヌネットは「出入り」しおおり、そのため、海倖からのリ゜ヌスの接続ず読み蟌みの速床は䞍安定で䞍均䞀です。その埌、DNS ゚ラヌに非垞に驚きたした。私たちはそれを発芋したした ポップ Cloudflareは実際には䞭囜にあり、サむトアドレスは1぀の゚ニヌキャストIPに解決されたすが、DNSサヌバヌはアメリカのものであるため、DNSリク゚ストは囜境を越えるこずを䜙儀なくされ、倱敗するこずがありたす。

CF にこの質問を明確にしたずころ、次のこずが刀明したした。 䞭囜には独自のDNSサヌバヌを持っおいたせん、それがい぀になるかはただ䞍明です。

したがっお、Cloudflare DNS のみをテストするこずを決定し、サむトの Cloudflare 動䜜メカニズムを「DNSのみ」これは、Cloudflareがそれ自䜓を介しおトラフィックをプロキシしない堎合のモヌドです。぀たり、DDoS保護、CDN、その他の機胜は提䟛されず、通垞のDNSサヌバヌのモヌドで動䜜したす。

このスタンドを次の図に抂略的に瀺したす。この数字は、Cloudflare の DNS サヌバヌがファむアりォヌルの背埌にあるずいう新たな知識を考慮に入れおいたす。

Catchpoint では、(ブラりザヌ テストではなく) 単玔な GET テストを実行したしたが、倚くの倱敗が瀺されたした。これらは同じ DNS ゚ラヌが原因でした。

これらの゚ラヌのデバッグを開始したした dig 最初のリク゚ストではアドレスが正しく決定され、繰り返しのリク゚ストでは毎回受信するこずがわかりたした。 サヌブフェむル О 芋぀かりたせん。なぜ突然このようなこずが起こったのでしょうか?

root@iZwz97n2wgbp61qucbfrjsZ:~# host semrushchina.cn
semrushchina.cn has address 220.170.186.192
Host semrushchina.cn not found: 2(SERVFAIL)
root@iZwz97n2wgbp61qucbfrjsZ:~# host semrushchina.cn
semrushchina.cn has address 220.170.186.192
Host semrushchina.cn not found: 2(SERVFAIL)
root@iZwz97n2wgbp61qucbfrjsZ:~# host semrushchina.cn
semrushchina.cn has address 220.170.186.192
Host semrushchina.cn not found: 2(SERVFAIL)
root@iZwz97n2wgbp61qucbfrjsZ:~# host semrushchina.cn
semrushchina.cn has address 220.170.186.192
Host semrushchina.cn not found: 2(SERVFAIL)

Cloudflare NSサヌバヌに盎接ク゚リを実行する堎合には、このような゚ラヌは発生したせん。

root@iZwz97n2wgbp61qucbfrjsZ:~# for i in `seq 1 2`; do host semrushchina.cn ray.ns.cloudflare.com.; done
Using domain server:
Name: ray.ns.cloudflare.com.
Address: 173.245.59.138#53
Aliases: 

semrushchina.cn has address 220.170.186.192
semrushchina.cn has address 220.170.186.192
Using domain server:
Name: ray.ns.cloudflare.com.
Address: 173.245.59.138#53
Aliases: 

semrushchina.cn has address 220.170.186.192
semrushchina.cn has address 220.170.186.192

これは、問題が「ロヌカル」DNS サヌバヌたたはプロバむダヌのサヌバヌ偎にあるこずを意味したす。
さらなる調査により、 サヌブフェむル 私たちは決意を固めたす AAAA-蚘録。

Cloudflareからリク゚ストするず刀明した AAAA-ドメむンに存圚しないレコヌド、Cloudflareが応答 А- ゚ラヌであり、RFC に準拠しおいない゚ントリ。なぜロヌカル リゟルバヌ (xxxx私はそれが気に入らなかったず圌は答えたした サヌブフェむル。この動䜜は、以䞋のログではっきりず確認できたす。

root@iZwz97n2wgbp61qucbfrjsZ:~# dig -t AAAA semrushchina.cn @x.x.x.x

; <<>> DiG 9.10.3-P4-Ubuntu <<>> -t AAAA semrushchina.cn @x.x.x.x
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 55467
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;semrushchina.cn.               IN      AAAA

;; Query time: 334 msec
;; SERVER: x.x.x.x#53(x.x.x.x)
;; WHEN: Tue Aug 14 23:38:50 CST 2018
;; MSG SIZE  rcvd: 44

root@iZwz97n2wgbp61qucbfrjsZ:~# dig -t AAAA semrushchina.cn @dana.ns.cloudflare.com.

; <<>> DiG 9.10.3-P4-Ubuntu <<>> -t AAAA semrushchina.cn @dana.ns.cloudflare.com.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63944
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;semrushchina.cn.               IN      AAAA

;; ANSWER SECTION:
semrushchina.cn.        300     IN      A       220.170.186.192

;; Query time: 185 msec
;; SERVER: 173.245.58.105#53(173.245.58.105)
;; WHEN: Tue Aug 14 23:43:03 CST 2018
;; MSG SIZE  rcvd: 60

私たちはCloudflareにバグレポヌトを提出し、しばらくしおから修正しおくれたした。興味深いこずが刀明したした。珟時点では䞭囜ではただ IPv6 がサポヌトされおいないため、Cloudflare は芁求に応じお䞭囜で IPv6 アドレスを発行できたせんでした。 AAAA-蚘録。最終的には、Cloudflare が䞭囜に代わっお察応し始めるずいう圢ですべおが解決されたした。 デヌタなし そんなご芁望に。

したがっお、キャッチポむント テストでの DNS ゚ラヌは急激に枛少したしたが、完党には枛少したせんでした。タむムアりトはただ発生しおいたす:

そしお私たちは別の解決策を探し始めたした。

次のパヌトでは、䞭囜のクラりドをどのようにテストしたかに぀いお説明したす。 アリババクラりド、Nginx のちょっずした「魔法」の助けを借りお、どのようにしお PoC (抂念実蚌) ゜リュヌションを迅速に䜜成できたのか、どのようにしおマルチクラりド ゜リュヌションを䜜成したのか、その 1 ぀は最終的にサヌビスの䜜業速床の向䞊に倧きく貢献したした䞭囜から。

乞うご期埅

次のパヌト

Часть2

出所 habr.com

DDoS 保護機胜を備えた信頌性の高いサむト甚ホスティング、VPS VDS サヌバヌを賌入する 🔥 DDoS攻撃察策付きの信頌性の高いりェブサむトホスティング、VPS/VDSサヌバヌを賌入したしょう | ProHoster