<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://blog.mintraspberry.cool/feed.xml" rel="self" type="application/atom+xml" /><link href="https://blog.mintraspberry.cool/" rel="alternate" type="text/html" /><updated>2025-05-06T19:21:51+00:00</updated><id>https://blog.mintraspberry.cool/feed.xml</id><title type="html">Mint’s Blog</title><subtitle>(o゜▽゜)o☆</subtitle><author><name>Mintraspberry Cool</name><email>sunny@20percent.cool</email></author><entry><title type="html">在 OpenWrt 上配置 NAT66 并通过端口转发实现被访问</title><link href="https://blog.mintraspberry.cool/openwrt/nat66forwarding/" rel="alternate" type="text/html" title="在 OpenWrt 上配置 NAT66 并通过端口转发实现被访问" /><published>2025-04-30T00:00:00+00:00</published><updated>2025-04-30T00:00:00+00:00</updated><id>https://blog.mintraspberry.cool/openwrt/nat66forwarding</id><content type="html" xml:base="https://blog.mintraspberry.cool/openwrt/nat66forwarding/"><![CDATA[<p>在 OpenWrt 上配置 NAT66 并通过端口转发实现被访问</p>

<h2 id="为什么要使用-nat66">为什么要使用 NAT66?</h2>
<p>在中国大陆，ISP 通常都不会给用户分配固定的 IPv6-PD 前缀，<br />
有些地区只要不重新连接 PD 前缀就不会变，但至少我的 ISP 会在连接时间到 20 天时强制重连，会导致我内网的某些设备不能及时获取到最新前缀的DHCPv6地址。<br />
NAT66 + ULA 前缀就可以解决上述问题</p>

<h2 id="ipv6-上网方式">IPv6 上网方式</h2>
<p>我使用 PPPoE 拨号的方式上网，<br />
在 OpenWrt 的默认配置下拨号成功后会自动创建一个 DHCPv6 接口。<br />
但我并不推荐直接使用默认配置来使用。<br />
我更推荐以下方式</p>

<h4 id="手动配置-ipv6-接口">手动配置 IPv6 接口</h4>
<ol>
  <li>编辑 PPPoE 接口，<u>高级设置/获取 IPv6 地址</u>，<br />
将方式<strong>从自动设置为手动</strong><br />
<img src="/assets/posts/openwrtnat66/interface_setting1.png" alt="接口设置" /></li>
  <li>新建接口，<br />
接口名称为 (PPPoE接口名称)_6，<br />
设备选择@(PPPoE接口名称)<br />
<img src="/assets/posts/openwrtnat66/interface_setting2.png" alt="接口设置" /></li>
  <li>取消勾选 <u>高级设置/IPv6 源路由</u>，<br />
为稍后 NAT66 的配置做准备<br />
<img src="/assets/posts/openwrtnat66/interface_setting3.png" alt="接口设置" /></li>
</ol>

<p><strong>配置完成后你应该可以获取 IPv6 地址和 PD 前缀并且正常上网</strong></p>

<h2 id="配置-nat66-和端口转发">配置 NAT66 和端口转发</h2>
<p>设置完 IPv6 接口后就可以开始配置NAT66了<br />
以下方法参考了<a href="https://openwrt.org/docs/guide-user/network/ipv6/ipv6.nat6">OpenWrt官方指导</a></p>

<h4 id="配置-nat66">配置 NAT66</h4>
<ol>
  <li>在<u>网络/全局网络选项</u>中设置 IPv6 ULA 前缀，<br />
你可以使用默认随机生成的前缀也可以按照要求自行手动修改<br />
<img src="/assets/posts/openwrtnat66/ipv6_ula_prefix.png" alt="IPv6 ULA 前缀设置" /></li>
  <li>编辑 LAN 接口，<u>高级设置/IPv6 前缀过滤</u>，<br />
<strong>只选择local (Local ULA)</strong><br />
<img src="/assets/posts/openwrtnat66/interface_setting4.png" alt="接口设置" /></li>
  <li>编辑 LAN 接口，<u>DHCP 服务器/IPv6 RA 设置</u>，<br />
<strong>设置默认路由器为 <u>在可用的前缀上</u> 或 <u>强制的</u></strong> (推荐前者)<br />
<img src="/assets/posts/openwrtnat66/interface_setting5.png" alt="接口设置" /></li>
  <li>在<u>防火墙/常规设置</u>中找到并编辑<u>区域/wan</u><br />
<strong>勾选 IPv6 伪装</strong><br />
<img src="/assets/posts/openwrtnat66/zone_setting1.png" alt="区域设置" /></li>
</ol>

<p>配置完成后可以发现出口 IPv6 地址变成路由器上 IPv6 接口的地址</p>

<p>配置完NAT66之后，如果还需要外网访问内网的设备，可以跟随以下方法</p>

<h4 id="配置端口转发">配置端口转发</h4>
<ol>
  <li>在<u>防火墙/端口转发</u>中添加转发<br />
<strong>地址族限制设为 <u>仅 IPv6</u></strong><br />
<strong>协议设为 <u>任何</u></strong><br />
<strong>内部地址设为 ULA 前缀的 IPv6 地址</strong> (推荐选择 DHCPv6 地址)<br />
<img src="/assets/posts/openwrtnat66/forward_setting1.png" alt="转发设置" /></li>
  <li>在<u>高级设置</u>中设置外部 IP 地址<br />
<img src="/assets/posts/openwrtnat66/forward_setting2.png" alt="转发设置" /><br />
格式使用反向掩码，首先你需要知道 ISP 分配的 IPv6-PD 前缀长度有多少位是应该固定的<br />
<a href="https://www.ipaddressguide.com/ipv6-cidr">IPv6 CIDR解析工具</a><br />
例如我的 ISP 分配给我的前缀长度为 /60，自定后缀为4ce，那么就应该写为
    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>::4ce/::000f:ffff:ffff:ffff:ffff
</code></pre></div>    </div>
    <p>如果你的运营商给你的前缀长度为/64，外部地址应写为</p>
    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>::4ce/::ffff:ffff:ffff:ffff
</code></pre></div>    </div>
    <p>以此类推，如果前缀长度为/56，应写为</p>
    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>::4ce/::00ff:ffff:ffff:ffff:ffff
</code></pre></div>    </div>
    <p>假设我的 PD 前缀为 240e:3a1:468:c1f0::/60<br />
在设置完转发后访问 240e:3a1:468:c1f0::4ce 即可到达目标设备</p>
  </li>
</ol>

<p>完成后手动拼接 IPv6 PD 前缀和自定义的后缀就能实现访问内部设备</p>]]></content><author><name>Mintraspberry Cool</name><email>sunny@20percent.cool</email></author><category term="openwrt" /><category term="network" /><category term="nat" /><category term="nat66" /><summary type="html"><![CDATA[在 OpenWrt 上配置 NAT66 并通过端口转发实现被访问 为什么要使用 NAT66? 在中国大陆，ISP 通常都不会给用户分配固定的 IPv6-PD 前缀， 有些地区只要不重新连接 PD 前缀就不会变，但至少我的 ISP 会在连接时间到 20 天时强制重连，会导致我内网的某些设备不能及时获取到最新前缀的DHCPv6地址。 NAT66 + ULA 前缀就可以解决上述问题 IPv6 上网方式 我使用 PPPoE 拨号的方式上网， 在 OpenWrt 的默认配置下拨号成功后会自动创建一个 DHCPv6 接口。 但我并不推荐直接使用默认配置来使用。 我更推荐以下方式 手动配置 IPv6 接口 编辑 PPPoE 接口，高级设置/获取 IPv6 地址， 将方式从自动设置为手动 新建接口， 接口名称为 (PPPoE接口名称)_6， 设备选择@(PPPoE接口名称) 取消勾选 高级设置/IPv6 源路由， 为稍后 NAT66 的配置做准备 配置完成后你应该可以获取 IPv6 地址和 PD 前缀并且正常上网 配置 NAT66 和端口转发 设置完 IPv6 接口后就可以开始配置NAT66了 以下方法参考了OpenWrt官方指导 配置 NAT66 在网络/全局网络选项中设置 IPv6 ULA 前缀， 你可以使用默认随机生成的前缀也可以按照要求自行手动修改 编辑 LAN 接口，高级设置/IPv6 前缀过滤， 只选择local (Local ULA) 编辑 LAN 接口，DHCP 服务器/IPv6 RA 设置， 设置默认路由器为 在可用的前缀上 或 强制的 (推荐前者) 在防火墙/常规设置中找到并编辑区域/wan 勾选 IPv6 伪装 配置完成后可以发现出口 IPv6 地址变成路由器上 IPv6 接口的地址 配置完NAT66之后，如果还需要外网访问内网的设备，可以跟随以下方法 配置端口转发 在防火墙/端口转发中添加转发 地址族限制设为 仅 IPv6 协议设为 任何 内部地址设为 ULA 前缀的 IPv6 地址 (推荐选择 DHCPv6 地址) 在高级设置中设置外部 IP 地址 格式使用反向掩码，首先你需要知道 ISP 分配的 IPv6-PD 前缀长度有多少位是应该固定的 IPv6 CIDR解析工具 例如我的 ISP 分配给我的前缀长度为 /60，自定后缀为4ce，那么就应该写为 ::4ce/::000f:ffff:ffff:ffff:ffff 如果你的运营商给你的前缀长度为/64，外部地址应写为 ::4ce/::ffff:ffff:ffff:ffff 以此类推，如果前缀长度为/56，应写为 ::4ce/::00ff:ffff:ffff:ffff:ffff 假设我的 PD 前缀为 240e:3a1:468:c1f0::/60 在设置完转发后访问 240e:3a1:468:c1f0::4ce 即可到达目标设备 完成后手动拼接 IPv6 PD 前缀和自定义的后缀就能实现访问内部设备]]></summary></entry><entry><title type="html">使用NatTypeTester和PortMapper进行NAT打洞</title><link href="https://blog.mintraspberry.cool/broadband/nattypetesterdadong/" rel="alternate" type="text/html" title="使用NatTypeTester和PortMapper进行NAT打洞" /><published>2024-07-02T00:00:00+00:00</published><updated>2024-07-02T00:00:00+00:00</updated><id>https://blog.mintraspberry.cool/broadband/nattypetesterdadong</id><content type="html" xml:base="https://blog.mintraspberry.cool/broadband/nattypetesterdadong/"><![CDATA[<p>使用NatTypeTester和PortMapper在有UPnP的路由器下NAT打洞</p>

<p>如果你使用OpenWrt路由器可以考虑使用<a href="https://openwrt.org/packages/pkgdata/natmap">NATMap</a></p>

<p>平台: Windows</p>

<p>需要用到的工具:<br />
<a href="https://github.com/HMBSbige/NatTypeTester/releases">NatTypeTester</a><br />
<a href="https://github.com/kaklakariada/portmapper/releases">PortMapper</a><br />
<a href="https://learn.microsoft.com/en-us/sysinternals/downloads/psping">PsPing</a></p>

<p>先使用NatTypeTester确定当前NAT类型为FullCone</p>
<ol>
  <li>打开NatTypeTester选择 RFC 3489</li>
  <li>STUN服务器写入 stun.isp.net.au</li>
  <li>点击测试，如果NAT类型为FullCone就可以继续操作</li>
</ol>

<h2 id="进行内外网端口绑定">进行内外网端口绑定</h2>
<p>使用NatTypeTester的RFC 5780测试的TCP模式可以创建临时的绑定<br />
以下的操作可以持续让运营商建立绑定</p>
<h3 id="准备工作">准备工作</h3>
<ol>
  <li>下载并解压PsPing</li>
  <li>在解压出来的文件夹中打开cmd</li>
  <li>在cmd中输入(结尾有一个空格)
    <div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>psping64 <span class="nt">-t</span> 
</code></pre></div>    </div>
  </li>
  <li>输入后不要按回车，进行下一步</li>
</ol>

<h3 id="让nattypetester建立绑定">让NatTypeTester建立绑定</h3>
<ol>
  <li>打开NatTypeTester选择 RFC 5780</li>
  <li>STUN服务器写入 stun.isp.net.au</li>
  <li>选择TCP并且点击测试</li>
  <li>快速复制下方的公网IP和端口粘贴到早些时候打开的cmd中并回车</li>
  <li>如果出现连接拒绝说明成功</li>
</ol>

<h2 id="创建upnp端口转发">创建UPnP端口转发</h2>
<p>使用PortMapper创建端口转发，使用方法不过多介绍</p>
<ol>
  <li>打开PortMapper并连接</li>
  <li>连接成功后创建端口映射预设</li>
  <li>添加一个TCP协议的映射</li>
  <li>外部端口写入NatTypeTester中Local end的端口，回车保存</li>
  <li>内部端口写入本地服务的监听端口，比如8080</li>
  <li>点击保存，选择并使用</li>
</ol>

<h2 id="完成后测试">完成后测试</h2>
<p>如果你开的是HTTP服务器可以直接把Public end中的IP和端口输入到浏览器，如果可以打开就是成功</p>

<p>如果你不关闭psping的cmd窗口那么这个公网IP和端口你可以一直使用</p>

<h2 id="补充">补充</h2>
<p>如果你想打洞UDP协议，可以使用<a href="https://raw.githubusercontent.com/wangyu-/UDPping/master/udpping.py">这个Python脚本</a>来进行udping</p>]]></content><author><name>Mintraspberry Cool</name><email>sunny@20percent.cool</email></author><category term="broadband" /><category term="network" /><category term="nat" /><summary type="html"><![CDATA[使用NatTypeTester和PortMapper在有UPnP的路由器下NAT打洞 如果你使用OpenWrt路由器可以考虑使用NATMap 平台: Windows 需要用到的工具: NatTypeTester PortMapper PsPing 先使用NatTypeTester确定当前NAT类型为FullCone 打开NatTypeTester选择 RFC 3489 STUN服务器写入 stun.isp.net.au 点击测试，如果NAT类型为FullCone就可以继续操作 进行内外网端口绑定 使用NatTypeTester的RFC 5780测试的TCP模式可以创建临时的绑定 以下的操作可以持续让运营商建立绑定 准备工作 下载并解压PsPing 在解压出来的文件夹中打开cmd 在cmd中输入(结尾有一个空格) psping64 -t 输入后不要按回车，进行下一步 让NatTypeTester建立绑定 打开NatTypeTester选择 RFC 5780 STUN服务器写入 stun.isp.net.au 选择TCP并且点击测试 快速复制下方的公网IP和端口粘贴到早些时候打开的cmd中并回车 如果出现连接拒绝说明成功 创建UPnP端口转发 使用PortMapper创建端口转发，使用方法不过多介绍 打开PortMapper并连接 连接成功后创建端口映射预设 添加一个TCP协议的映射 外部端口写入NatTypeTester中Local end的端口，回车保存 内部端口写入本地服务的监听端口，比如8080 点击保存，选择并使用 完成后测试 如果你开的是HTTP服务器可以直接把Public end中的IP和端口输入到浏览器，如果可以打开就是成功 如果你不关闭psping的cmd窗口那么这个公网IP和端口你可以一直使用 补充 如果你想打洞UDP协议，可以使用这个Python脚本来进行udping]]></summary></entry><entry><title type="html">My Projects</title><link href="https://blog.mintraspberry.cool/project/myprojects/" rel="alternate" type="text/html" title="My Projects" /><published>2024-05-17T00:00:00+00:00</published><updated>2024-05-17T00:00:00+00:00</updated><id>https://blog.mintraspberry.cool/project/myprojects</id><content type="html" xml:base="https://blog.mintraspberry.cool/project/myprojects/"><![CDATA[<p>This is a directory of my project</p>

<p><a href="https://20percent.cool/">20PERCENT.COOL</a><br />
<a href="https://sunny.20percent.cool/">SUNNY.20PERCENT.COOL</a><br />
<a href="https://mintraspberry.cool/rainbowpieui">Minecraft BE - Rainbow Pie UI</a></p>]]></content><author><name>Mintraspberry Cool</name><email>sunny@20percent.cool</email></author><category term="project" /><category term="update" /><summary type="html"><![CDATA[This is a directory of my project 20PERCENT.COOL SUNNY.20PERCENT.COOL Minecraft BE - Rainbow Pie UI]]></summary></entry><entry><title type="html">Welcome to Jekyll!</title><link href="https://blog.mintraspberry.cool/jekyll/welcome-to-jekyll/" rel="alternate" type="text/html" title="Welcome to Jekyll!" /><published>2016-02-24T00:00:00+00:00</published><updated>2016-02-24T00:00:00+00:00</updated><id>https://blog.mintraspberry.cool/jekyll/welcome-to-jekyll</id><content type="html" xml:base="https://blog.mintraspberry.cool/jekyll/welcome-to-jekyll/"><![CDATA[<p>You’ll find this post in your <code class="language-plaintext highlighter-rouge">_posts</code> directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in <a href="https://jekyllrb.com/docs/usage/">many different ways</a>, but the most common way is to run <code class="language-plaintext highlighter-rouge">jekyll serve</code>, which launches a web server and auto-regenerates your site when a file is updated.</p>

<p>To add new posts, simply add a file in the <code class="language-plaintext highlighter-rouge">_posts</code><sup id="fnref:posts"><a href="#fn:posts" class="footnote" rel="footnote" role="doc-noteref">1</a></sup> directory that follows the convention <code class="language-plaintext highlighter-rouge">YYYY-MM-DD-name-of-post.ext</code> and includes the necessary front matter. Take a look at the source for this post to get an idea about how it works.</p>

<p>Jekyll also offers powerful support for code snippets:</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">print_hi</span><span class="p">(</span><span class="nb">name</span><span class="p">)</span>
  <span class="nb">puts</span> <span class="s2">"Hi, </span><span class="si">#{</span><span class="nb">name</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="n">print_hi</span><span class="p">(</span><span class="s1">'Tom'</span><span class="p">)</span>
<span class="c1">#=&gt; prints 'Hi, Tom' to STDOUT.</span>
</code></pre></div></div>

<p>Check out the <a href="http://jekyllrb.com/docs/home">Jekyll docs</a> for more info on how to get the most out of Jekyll. File all bugs/feature requests at <a href="https://github.com/jekyll/jekyll">Jekyll’s GitHub repo</a>. If you have questions, you can ask them on <a href="https://talk.jekyllrb.com/">Jekyll Talk</a>.</p>

<div class="footnotes" role="doc-endnotes">
  <ol>
    <li id="fn:posts">
      <p>Footnote test. <a href="#fnref:posts" class="reversefootnote" role="doc-backlink">&#8617;</a></p>
    </li>
  </ol>
</div>]]></content><author><name>Mintraspberry Cool</name><email>sunny@20percent.cool</email></author><category term="Jekyll" /><category term="update" /><summary type="html"><![CDATA[You’ll find this post in your _posts directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different ways, but the most common way is to run jekyll serve, which launches a web server and auto-regenerates your site when a file is updated.]]></summary></entry></feed>