<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>DNS on 華鳥風月</title>
    <link>https://blog.9-ch.com/tags/dns/</link>
    <description>Recent content in DNS on 華鳥風月</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>zh-cn</language>
    <lastBuildDate>Thu, 09 Mar 2023 15:31:19 +0800</lastBuildDate><atom:link href="https://blog.9-ch.com/tags/dns/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>本站域名已迁移至9-ch.com</title>
      <link>https://blog.9-ch.com/post/base-domain-update/</link>
      <pubDate>Thu, 09 Mar 2023 15:31:19 +0800</pubDate>
      
      <guid>https://blog.9-ch.com/post/base-domain-update/</guid>
      <description>站点维护日志</description>
      <content:encoded><![CDATA[<h3 id="站点维护日志">站点维护日志</h3>
<p>考虑到 IDN 域名对非中文用户不友好、部分搜索引擎收录异常等诸多问题，本站已经迁移至新域名 <a href="https://9-ch.com">9-ch.com</a></p>
<p>原域名 <a href="https://xn--7ovq92diups1e.com">花鸟风月.com</a> 将继续提供 api 服务至 <strong>2023-04-07</strong> ，请尽快迁移使用 <code>api.xn--7ovq92diups1e.com</code> 的服务至新域名 <code>api.9-ch.com</code></p>
]]></content:encoded>
    </item>
    
    <item>
      <title>通过DNS与Nginx锁定并加速Steam下载(CDN)</title>
      <link>https://blog.9-ch.com/post/homelab-steam-cdn/</link>
      <pubDate>Sat, 28 Jan 2023 17:08:11 +0800</pubDate>
      
      <guid>https://blog.9-ch.com/post/homelab-steam-cdn/</guid>
      <description>通过DNS与Nginx锁定并加速Steam下载(CDN)</description>
      <content:encoded><![CDATA[<h3 id="更新记录">更新记录</h3>
<ul>
<li>2024-09-24: 简化配置, 通过lancache机制直接实现对CDN的控制</li>
</ul>
<h3 id="为什么要手动锁定">为什么要手动锁定</h3>
<p>当使用透明网关对内网进行加速时(包括部分游戏加速器的特定工作模式), 会因为Steam根据当前ip判断自动切换到ip对应地区的下载CDN, 造成隧道流量的浪费甚至产生反效果导致下载缓慢</p>
<h3 id="如何判断是否需要使用该方案">如何判断是否需要使用该方案</h3>
<p>最简单的办法就是不做任何其他配置的情况下(若使用加速器需要先打开加速器), 打开 <code>Steam--设置--下载</code> 检查下载地区, 若显示为任意大陆地区城市则大概率不需要本方案修改(这个选项城市其实是假的, 只要是任意大陆城市本质都一样)</p>
<p>若显示为透明网关对应隧道/加速器ip地区, 则可以考虑使用本方案</p>
<p>另外也可以通过 <code>Win+R</code> 执行 <code>steam://open/console</code> 调出Steam控制台来查看信息判断</p>
<ol>
<li>执行 <code>user_info</code> 查看IPCountry是否为CN</li>
<li>执行 <code>download_sources</code> 直接查看当前下载服务器是否为国内CDN</li>
</ol>
<p>常见国内服务器域名可以在 <a href="https://github.com/v2fly/domain-list-community/blob/master/data/steam">CDN清单</a> 查到</p>
<h3 id="相关配置">相关配置</h3>
<p>本方案由两部分组成</p>
<ul>
<li>DNS</li>
<li>Nginx</li>
</ul>
<h4 id="dns">DNS</h4>
<p>下面以ROS为例, 假设Nginx服务所在IP为内网192.168.1.100, 需要劫持的域名见如下配置</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">/ip dns static
</span></span><span class="line"><span class="cl">add address=192.168.1.100 name=lancache.steamcontent.com
</span></span></code></pre></td></tr></table>
</div>
</div><p>配置完毕后将PC的DNS指向ROS后即可, 另外也可以通过dstnat将dst port 53的udp流量直接劫持给ROS</p>
<p>以ROS ip 192.168.1.1, PC网段192.168.1.0/24为例, 解析劫持配置如下</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">/ip firewall nat
</span></span><span class="line"><span class="cl">add action=dst-nat chain=dstnat comment=&#34;Hijacking for DNS&#34; dst-port=53 protocol=udp src-address=192.168.1.0/24 to-addresses=192.168.1.1 to-ports=53
</span></span></code></pre></td></tr></table>
</div>
</div><p>也可以直接在Steam运行机器通过Hosts文件配置</p>
<h4 id="nginx转发配置">Nginx转发配置</h4>
<p>可选的CDN很多, 这里以阿里云 <code>xz.pphimalayanrt.com</code> 为例, 若使用其他CDN修改配置中对应 <code>server</code> 与 <code>Host</code> 即可</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">upstream steam-upstream {
</span></span><span class="line"><span class="cl">    server xz.pphimalayanrt.com;
</span></span><span class="line"><span class="cl">}
</span></span><span class="line"><span class="cl">server {
</span></span><span class="line"><span class="cl">    listen 80;
</span></span><span class="line"><span class="cl">    server_name lancache.steamcontent.com *.steamcontent.com;
</span></span><span class="line"><span class="cl">    slice 8m;
</span></span><span class="line"><span class="cl">    proxy_set_header Range $slice_range;
</span></span><span class="line"><span class="cl">    location / {
</span></span><span class="line"><span class="cl">        proxy_pass http://steam-upstream;
</span></span><span class="line"><span class="cl">        proxy_set_header Host &#34;xz.pphimalayanrt.com&#34;;
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">}
</span></span></code></pre></td></tr></table>
</div>
</div><p>若阿里云速度不理想可以参考 <a href="https://www.dogfight360.com/blog/knowledge-base/%E5%A6%82%E4%BD%95%E6%8F%90%E9%AB%98steam%E7%9A%84%E4%B8%8B%E8%BD%BD%E9%80%9F%E5%BA%A6%E4%B8%AD%E5%9B%BD%E5%A4%A7%E9%99%86%E5%9C%B0%E5%8C%BA/">dogfight360 的这篇 blog</a> 自行逐个测试, 根据自身网络选出最佳CDN</p>
<h3 id="检查是否生效">检查是否生效</h3>
<p>随便下载个游戏, 检查Nginx日志, 会发现有大量的 <code>Valve/Steam HTTP Client 1.0</code> 访问记录, 即说明当前运行正常</p>
<h3 id="其他方案">其他方案</h3>
<p>Dogfight360的 <a href="https://www.dogfight360.com/blog/1531/">Steam下载CDN重定向</a> 非常好用的锁定工具 <del>除了每次要手动启动</del></p>
]]></content:encoded>
    </item>
    
  </channel>
</rss>
