<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Shreyash Rai — #networking</title><description>Everything tagged “networking”.</description><link>https://shreyashrai.com</link><item><title>My College Blocked the Genshin Launcher, So I Split My Network in Two</title><link>https://shreyashrai.com/blog/how-i-fixed-genshin-on-college-wifi</link><guid isPermaLink="true">https://shreyashrai.com/blog/how-i-fixed-genshin-on-college-wifi</guid><description>The firewall blocked a few KB of launcher traffic but not the GB of updates, so I sent just the blocked part through my phone.</description><pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;My college network blocks games, most VPNs, Cloudflare, and half the Chinese internet. So you&apos;d expect Genshin to be dead on campus. It isn&apos;t. The game itself runs fine. What doesn&apos;t run is the HoYoPlay launcher, which means no updates, and Genshin won&apos;t let you in on an old version.&lt;/p&gt;
&lt;p&gt;Normally my backup would be mobile data. Except where I live, mobile data is more of a rumour than a network, and a Genshin update is several gigabytes. That wasn&apos;t happening.&lt;/p&gt;
&lt;p&gt;So today I sat down, with Claude as my rubber duck, to see if I could get updates through college Wi-Fi anyway. Spoiler: I could. But the fix was &lt;em&gt;nothing&lt;/em&gt; like what I expected.&lt;/p&gt;
&lt;h2&gt;It was never about DNS&lt;/h2&gt;
&lt;p&gt;My first instinct was the usual one: switch DNS servers and hope. Instead, I wrote a small script to find out &lt;em&gt;how&lt;/em&gt; the launcher was being blocked. It asked a dozen different DNS servers where the launcher&apos;s servers live, then actually tried connecting to every address it got back.&lt;/p&gt;
&lt;p&gt;The results split cleanly in two. The servers that hold the actual update files, &lt;code&gt;autopatchhk.yuanshen.com&lt;/code&gt;, were completely fine. Every address connected. But the launcher&apos;s API servers on &lt;code&gt;hoyoverse.com&lt;/code&gt;, the ones that tell it &lt;em&gt;what&lt;/em&gt; to download, failed every single time.&lt;/p&gt;
&lt;p&gt;And they failed in a strange way. Whichever address I tried, the server came back with the wrong security certificate. Real servers don&apos;t all do that at once. What was really going on: the firewall was reading the site&apos;s name as I connected, and swapping in its own certificate to block it.&lt;/p&gt;
&lt;p&gt;So no DNS trick was ever going to work. The firewall didn&apos;t care &lt;em&gt;where&lt;/em&gt; I was connecting. It cared about the name.&lt;/p&gt;
&lt;h2&gt;The blocked part was tiny&lt;/h2&gt;
&lt;p&gt;This is where it clicked. The launcher does two very different things. First it asks a couple of questions: &lt;em&gt;is there an update? which files do I need?&lt;/em&gt; That&apos;s a few kilobytes. Then it downloads the files themselves, which is gigabytes.&lt;/p&gt;
&lt;p&gt;The firewall was blocking the questions, not the downloads.&lt;/p&gt;
&lt;p&gt;So my phone didn&apos;t need to carry the whole update. It only needed to carry the questions. Even my awful mobile signal can manage a few kilobytes, and the gigabytes could stay on college Wi-Fi, where they were already allowed.&lt;/p&gt;
&lt;h2&gt;One laptop, two networks&lt;/h2&gt;
&lt;p&gt;So that&apos;s what I set up. The laptop stays on college Wi-Fi, and my phone plugs in over USB tethering as a second connection. Then a Python script tells Windows which traffic goes where.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;PS C:\Users\shrey\Downloads&amp;gt; python hoyo_split.py adapters

  Index  Guess    IP               Gateway          Name                   Description
  46     phone    [Redacted]    [Redacted]     Ethernet 2             Remote NDIS based Internet Sharing Device
  7      college  [Redacted]    [Redacted]      Wi-Fi                  Intel(R) Wi-Fi 7 BE201 320MHz
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The first thing it does is keep Wi-Fi in charge. Windows loves a wired connection, so the moment you plug in a phone it quietly starts sending &lt;em&gt;everything&lt;/em&gt; through it. The script pushes the phone back to backup duty. Then it checks each launcher server on Wi-Fi, and only the blocked ones get sent through the phone. For each of those it picks one address, adds a route for just that address through the phone, and pins it in the hosts file so the launcher always uses it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;PS C:\Users\shrey\Downloads&amp;gt; python hoyo_split.py discover
[.] Open the launcher NOW and click update / check for updates.
    Watching the DNS cache for 90s (Ctrl+C to stop early)...
    + sentry.eks.hoyoverse.com
    + sg-public-data-api.hoyoverse.com
    + sg-hyp-api.hoyoverse.com
    + minor-api-os.hoyoverse.com
    + apm-api.hoyoverse.com
    + autopatchhk.yuanshen.com

[+] Saw 40 domains total, 6 HoYo-related.
[.] Testing each HoYo domain on your current network...
    ok       apm-api.hoyoverse.com
    ok       autopatchhk.yuanshen.com
    ok       minor-api-os.hoyoverse.com
    BLOCKED  sentry.eks.hoyoverse.com  (HTTP failed (TimeoutError))
    ok       sg-hyp-api.hoyoverse.com
    ok       sg-public-data-api.hoyoverse.com

[+] Saved 1 blocked domain(s) to hoyo_domains.txt. Now run: python hoyo_split.py setup
PS C:\Users\shrey\Downloads&amp;gt;    Add-Content hoyo_domains.txt &quot;minor-api-os.hoyoverse.com&quot;,&quot;apm-api.hoyoverse.com&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Before trusting any of it, the script connects to each address through the phone and makes sure the certificate is the real one. And when I&apos;m done updating, one command puts everything back the way it was.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;flowchart LR
    L[HoYoPlay launcher] --&amp;gt;|API calls, few KB| P[Phone&amp;lt;br/&amp;gt;USB tethering]
    L --&amp;gt;|Update files, GBs| W[College Wi-Fi]
    P --&amp;gt; H[hoyoverse.com APIs]
    W --&amp;gt; C[autopatchhk CDN]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The launcher never knows anything changed. It just sees its requests succeed.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;PS C:\Users\shrey\Downloads&amp;gt;    python hoyo_split.py setup --phone-if 46 --college-if 7
[+] Phone:   Ethernet 2 (Remote NDIS based Internet Sharing Device), gateway [redacted]
[+] College: Wi-Fi (Intel(R) Wi-Fi 7 BE201 320MHz), gateway [redacted]
[+] College Wi-Fi is the default route; phone is backup only.

[.] Checking 8 domain(s) on college Wi-Fi...
    BLOCKED sg-hyp-api.hoyoverse.com  (certificate swapped (firewall interception))
    BLOCKED sg-public-api.hoyoverse.com  (certificate swapped (firewall interception))
    BLOCKED hyp-webstatic.hoyoverse.com  (certificate swapped (firewall interception))
    BLOCKED sg-downloader-api.hoyoverse.com  (certificate swapped (firewall interception))
    BLOCKED sg-public-data-api.hoyoverse.com  (certificate swapped (firewall interception))
    BLOCKED sentry.eks.hoyoverse.com  (certificate swapped (firewall interception))
    BLOCKED minor-api-os.hoyoverse.com  (certificate swapped (firewall interception))
    BLOCKED apm-api.hoyoverse.com  (certificate swapped (firewall interception))

[.] Routing 8 domain(s) through the phone (this can be slow)...
    OK      sg-hyp-api.hoyoverse.com -&amp;gt; 18.161.125.100 via phone
    OK      sg-public-api.hoyoverse.com -&amp;gt; 108.159.46.10 via phone
    OK      hyp-webstatic.hoyoverse.com -&amp;gt; 108.159.28.25 via phone
    OK      sg-downloader-api.hoyoverse.com -&amp;gt; 108.159.46.100 via phone
    OK      sg-public-data-api.hoyoverse.com -&amp;gt; 108.159.28.124 via phone
    OK      sentry.eks.hoyoverse.com -&amp;gt; 13.215.164.238 via phone
    OK      minor-api-os.hoyoverse.com -&amp;gt; 108.159.46.113 via phone
    OK      apm-api.hoyoverse.com -&amp;gt; 108.159.91.106 via phone

[+] Done. 8 domain(s) go through your phone; everything else (including downloads) stays on college Wi-Fi.
    Now fully quit the launcher (also from the system tray), reopen it, and update.
    When you&apos;re done: python hoyo_split.py undo
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;90 Mbps on Wi-Fi, zero on the phone&lt;/h2&gt;
&lt;p&gt;I reopened the launcher and watched Task Manager. The update was pulling around 90 Mbps over college Wi-Fi, while the phone connection sat at 0 Kbps. The launcher&apos;s questions are so small they don&apos;t even show up on the graph.&lt;/p&gt;
&lt;p&gt;What stays with me is how wrong my first guess was. I thought &quot;Genshin is blocked.&quot; It wasn&apos;t. Eight small servers were blocked, and everything heavy was fine. If I&apos;d spent the evening trying random DNS servers, I&apos;d still be stuck. Finding out exactly &lt;em&gt;what&lt;/em&gt; was blocked, and &lt;em&gt;how&lt;/em&gt;, is what made the fix obvious.&lt;/p&gt;
&lt;p&gt;Also, my useless mobile data finally has a job. Terrible for gigabytes, perfect for kilobytes.
&amp;lt;figure&amp;gt;
&amp;lt;img src=&quot;/images/genshin wifi fix/Pasted image 20260925121258.png&quot; alt=&quot;&quot; width=&quot;&quot; height=&quot;&quot;&amp;gt;
&amp;lt;figcaption&amp;gt;Task Manager Network tab&amp;lt;/figcaption&amp;gt;
&amp;lt;/figure&amp;gt;&lt;/p&gt;
</content:encoded><category>networking</category><category>python</category><category>windows</category></item></channel></rss>