<?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>NAT on aiken&#39;s blog</title>
    <link>https://aikenh.cn/tags/nat/</link>
    <description>Recent content in NAT on aiken&#39;s blog</description>
    <generator>Hugo -- 0.137.0</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 04 Apr 2023 14:40:12 +0000</lastBuildDate>
    <follow_challenge>
      <feedId>90080597450814464</feedId>
      <userId>72439538841050112</userId>
    </follow_challenge>
    <atom:link href="https://aikenh.cn/tags/nat/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>内网穿透（NAT穿透）</title>
      <link>https://aikenh.cn/posts/nat%E7%A9%BF%E9%80%8F/</link>
      <pubDate>Tue, 04 Apr 2023 14:40:12 +0000</pubDate>
      <guid>https://aikenh.cn/posts/nat%E7%A9%BF%E9%80%8F/</guid>
      <description>理解内网穿透的原理和简单实现</description>
      <content:encoded><![CDATA[<p>本文简要介绍对内网穿透技术、对内网穿透技术的需求以及介绍一些用于&quot;个人&quot;进行内网穿透的工具和使用。</p>
<h2 id="1-什么是内网穿透nat-traversal">1. 什么是内网穿透(NAT traversal）</h2>
<p>在计算机科学中，<strong>NAT穿越</strong>（NAT traversal）涉及TCP/IP中的一个常见问题，即在处于使用了NAT设备的私有TCP/IP网络中的主机之间创建连接的问题。</p>
<p>其中 NAT 即<a href="https://zh.wikipedia.org/wiki/%E7%BD%91%E7%BB%9C%E5%9C%B0%E5%9D%80%E8%BD%AC%E6%8D%A2" target="_blank" rel="noopener">网络地址转换</a>
（Network Address Translation）在计算机网络中是一种在 IP 数据包通过路由器或防火墙时重写来源 IP 地址或目的 IP 地址的技术。<strong>这种技术被普遍使用在有多台主机但只通过一个公有 IP 地址访问互联网的私有网络中</strong>。它是一个方便且得到了广泛应用的技术。当然，NAT 也让主机之间的通信变得复杂，导致了通信效率的降低。</p>
<blockquote>
<p>NAT 是作为一种解决<a href="https://zh.wikipedia.org/wiki/IPv4%E4%BD%8D%E5%9D%80%E6%9E%AF%E7%AB%AD" title="IPv4位址枯竭" target="_blank" rel="noopener">IPv4地址短缺</a>
以避免保留 IP 地址困难的方案而流行起来的。NAT 成了家庭和小型办公室网络连接上的路由器的一个标准特征。</p>
</blockquote>
<p>其中最为常见的 NAT 设备就是家家户户都有的路由器，将所有的设备在<strong>局域网</strong>中统一管理，并基于唯一的公网 ip 对互联网（私有网络）进行访问。</p>
<p>而 NAT 会带来以下的问题，因此会需要内网穿透的技术：</p>
<ul>
<li>外网主动发起的服务无法准确的定位到内网的指定机器，会被 NAT 设备丢弃，因此链接会变成单项的，无法双向交互。</li>
</ul>
<p>因此无法在外网访问内网机器提供给局域网的服务，因此我们的机器，我们部署于 NAS、docker 的服务就只能在局域网中访问，在一定程度上就造成不便。</p>
<h2 id="2如何实现内网穿透">2.如何实现内网穿透</h2>
<p>解决方法也比较直观，在内网中建立一个代理服务器，其暴露在公网中，这样，通过直接访问该代理服务器进行中转，进而直接访问到指定的机器，这样其实就是建立了一个<a href="https://zh.wikipedia.org/wiki/%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86" target="_blank" rel="noopener">反向代理</a>
来实现内网穿透。</p>
<p>
<div class="post-img-view">
  <a data-fancybox="gallery" href="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20230405004156.png">
    <img alt="image.png" loading="lazy" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20230405004156.png"class="responsive-image" src="https://picture-bed-001-1310572365.cos.ap-guangzhou.myqcloud.com/mac/20230405004156.png" style="display: block; margin: 0 auto;"
      alt="image.png"  />
  </a>
</div>


<script>
  document.addEventListener("DOMContentLoaded", function() {
      var images = document.querySelectorAll(".responsive-image");
      var maxHeight = window.innerHeight / 2.5;
      images.forEach(function(image) {
          image.style.maxHeight = maxHeight + "px";
      });
  });
</script>
</p>
<p>反向代理如何理解呢，就正向代理而言，我们要访问的服务器 IP 是已知的，而我们自身是隐藏的，代理服务器是客户端的。</p>
<p>而反向代理则是我们要访问的服务器是隐藏的，我们需要借由代理服务器去访问它。</p>
<h2 id="3内网穿透工具">3.内网穿透工具</h2>
<ol>
<li>Zerotier</li>
<li><a href="https://github.com/ffay/lanproxy-go-client" target="_blank" rel="noopener">https://github.com/ffay/lanproxy-go-client</a>
</li>
<li><a href="https://github.com/jpillora/chisel/" target="_blank" rel="noopener">jpillora/chisel: A fast TCP/UDP tunnel over HTTP (github.com)</a>
</li>
<li>ngrok</li>
<li>tailscale</li>
</ol>
<p>使用 Zerotier 搭建内网穿透的话极其简单，这里就不在赘言，上述还包含了一些其他搭建内网穿透的工具。</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
