<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>网络 | Easton Man's Blog</title>
	<atom:link href="https://blog.eastonman.com/blog/category/tech/%E7%BD%91%E7%BB%9C/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.eastonman.com</link>
	<description>临渊羡鱼，不如退而结网</description>
	<lastBuildDate>Mon, 06 Dec 2021 03:32:53 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>

<image>
	<url>https://blog.eastonman.com/wp-content/uploads/2021/02/cropped-Logo-e1613298891313-32x32.png</url>
	<title>网络 | Easton Man's Blog</title>
	<link>https://blog.eastonman.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>全球大内网与Zerotier</title>
		<link>https://blog.eastonman.com/blog/2021/12/zerotier/</link>
					<comments>https://blog.eastonman.com/blog/2021/12/zerotier/#comments</comments>
		
		<dc:creator><![CDATA[Easton Man]]></dc:creator>
		<pubDate>Mon, 06 Dec 2021 03:32:53 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[网络]]></category>
		<category><![CDATA[Zerotier]]></category>
		<guid isPermaLink="false">https://blog.eastonman.com/?p=910</guid>

					<description><![CDATA[<p>预计阅读时间： 6 分钟前段时间把笔记本换成了MacBook Pro（真香），为了数据安全，自然是需要把Tim [&#8230;]</p>
The post <a href="https://blog.eastonman.com/blog/2021/12/zerotier/">全球大内网与Zerotier</a> first appeared on <a href="https://blog.eastonman.com">Easton Man's Blog</a>.]]></description>
										<content:encoded><![CDATA[<p class="wpwc-reading-time">预计阅读时间： 6 分钟</p>
<p>前段时间把笔记本换成了MacBook Pro（<s>真香</s>），为了数据安全，自然是需要把Time Machine利用起来。而Time Machine只能备份到本地的硬盘或者AFP或者SMB或者Time Capsule。显然我没有多余的硬盘，也没有rich到来一个Time Capsule，但是我手头上恰好有一个2T HDD的大盘鸡（<s>远在天边</s>），所以想把Time Machine的备份放到这个大盘鸡里。</p>



<p>那么现在问题来了，SMB这个玩意儿的安全问题相信大家也都有所耳闻，我实在是不想把它暴露在公网上，这就需要一个VPN。正好我前几天黑五搞了一些BGP Player友好的鸡，甚至还有公网的ASN号，因此就想干脆组一个全球大内网吧。</p>



<h2 class="wp-block-heading">为什么选择Zerotier</h2>



<p>其实我一开始的想法是Wireguard，因为这玩意儿大家都在吹，也在内核主线里，可以说相当的轻量，也很flexible。但是Wireguard的问题在于它是点对点的，也就是如果没有一个管理的途径的话，每条边都需要手动操作一次，非常麻烦。有的大佬用ansible解决，<s>然而我并不会这么复杂的ansible</s>。</p>



<p>我总结了一下我对于全球大内网最主要的需求：</p>



<ul class="wp-block-list"><li><strong>无中心节点</strong>，或者说流量不能由中心节点转发</li><li><strong>轻量高效</strong>（OpenVPN什么的就免了），因为有的节点之间可以跑到千兆，如果不够轻量的话会有CPU瓶颈。</li><li><strong>配置简易</strong>，超过Wireguard的就免了</li><li><strong>确保安全</strong>，必须加密传输，稍弱一些如aes128的也可以，但是不能接受明文传输，所以VXLAN和GRE等也不满足了。</li></ul>



<p>除此之外还有一些加分项：</p>



<ul class="wp-block-list"><li>multipath，我们的VPS服务商提供的网络接入质量不尽相同，如果有一种方式可以让两个线路较差的VPS通过一个线路较好的VPS进行转发其实可以得到更好的质量。不过目前除了iBGP+自定义cost似乎没有别的方式可以达到这样的效果。</li><li>中心化的路由配置，这一项Zerotier恰好可以满足，如果我们需要桥接别的“真正的”内网，这个功能还是很实用的。</li><li>跨平台客户端，虽然目前的方案并不需要这个功能，但是如果我们以后希望将大内网进一步扩大，可能会需要这个功能。</li></ul>



<h2 class="wp-block-heading">自建VS官方</h2>



<p><s>有这么多鸡不自建也是浪费</s></p>



<p>zerotier有network controller，planet，moon等很多概念/角色，我也没搞懂，有懂的可以指点一下。自建network controller的好处在于可以避免官方的同一个网络50个客户端限制。自建moon的好处在于对称nat的情况下可以有较好的转发质量。</p>



<p>由于我们不需要考虑nat，所以就只自建network controller。</p>



<h2 class="wp-block-heading">自建方案选型</h2>



<p>由于<s>好看是第一生产力</s>手动添加网络和批准加入十分繁琐，所以需要一个GUI在网络控制器上，而不是按照官方的API使用curl来管理网络。</p>



<p>ztncui（<a href="https://github.com/key-networks/ztncui" target="_blank" rel="noreferrer noopener" title="https://github.com/key-networks/ztncui">Github</a>和<a href="https://key-networks.com/ztncui/" target="_blank" rel="noreferrer noopener" title="https://key-networks.com/ztncui/">官网</a>）是一个基于zerotier-one API的前端，提供类似于官方my.zerotier.com的管理操作，可以添加网络，管理网络和路由等。</p>



<p>其他服务器自然是使用正常的zerotier-one作为节点加入。zerotier还提供有各个嵌入式平台和路由器平台的支持，可以说十分的跨平台了。</p>



<p>还有一点，这次我希望安装的服务器是一台buyvm/frantech的512MB内存的服务器，计划之后还要在上面跑<s>鸟</s>bird，如果要收全表的话，512MB的内存可谓是捉襟见肘，所以首先排除使用docker的安装方式，尽量使用overhead比较小的安装。</p>



<h2 class="wp-block-heading">安装过程</h2>



<h3 class="wp-block-heading">Zerotier</h3>



<p>zerotier在我使用的Debian系发行版上只需要一行命令，注意需要gpg已安装，未安装的话会提示需要安装。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="shell" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">curl -s https://install.zerotier.com | sudo bash</pre>



<p>如果你是安全nerd，也可以使用gpg验证脚本以后再执行，仍然是一行。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">curl -s 'https://raw.githubusercontent.com/zerotier/ZeroTierOne/master/doc/contact%40zerotier.com.gpg' | gpg --import &amp;&amp; \
if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | sudo bash; fi</pre>



<p>安装完成以后zerotier的源就会被加入apt中，以后只需要使用apt来管理和升级即可。</p>



<h3 class="wp-block-heading">Ztncui</h3>



<p>根据其<meta charset="utf-8"><a href="https://key-networks.com/ztncui/" target="_blank" rel="noreferrer noopener" title="https://key-networks.com/ztncui/">官网</a>的说明，是采用deb打包的方式安装，需要首先下载deb的安装包，然后再安装。</p>



<p>注意！此处具有实效性，建议按照官网安装最新的包！</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">curl -O https://s3-us-west-1.amazonaws.com/key-networks/deb/ztncui/1/x86_64/ztncui_0.7.1_amd64.deb
sudo apt-get install ./ztncui_0.7.1_amd64.deb</pre>



<p>由于ztncui是使用nodejs开发的，因此还需设置一下production mode</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">sudo sh -c "echo 'NODE_ENV=production' >> /opt/key-networks/ztncui/.env"</pre>



<p>ztncui默认监听127.0.0.1:3000，可以使用以下命令转发到本地访问</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">ssh -f user@network.controller.machine -L 3333:localhost:3000 -N</pre>



<p>也可以使用以下命令打开一个https端口，没有配置的话使用的是self-signed证书，如果需要配置证书的话可以参考<a href="https://key-networks.com/ztncui/#installation" target="_blank" rel="noreferrer noopener" title="https://key-networks.com/ztncui/#installation">官方教程</a>。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">sudo sh -c "echo 'HTTPS_PORT=3443' > /opt/key-networks/ztncui/.env"</pre>



<p>最后重启ztncui是配置生效。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">sudo systemctl restart ztncui</pre>



<h2 class="wp-block-heading">网络配置</h2>



<p>这部分的配置其实比较简单，按照提示来就可以了，此处放一些截图供调研方案和选型的读者参考。</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="529" height="255" src="https://blog.eastonman.com/wp-content/uploads/2021/12/Screen-Shot-2021-12-06-at-11.21.12-AM.png" alt="" class="wp-image-926" srcset="https://blog.eastonman.com/wp-content/uploads/2021/12/Screen-Shot-2021-12-06-at-11.21.12-AM.png 529w, https://blog.eastonman.com/wp-content/uploads/2021/12/Screen-Shot-2021-12-06-at-11.21.12-AM-300x145.png 300w" sizes="(max-width: 529px) 100vw, 529px" /><figcaption>创建网络</figcaption></figure></div>



<div class="wp-block-image"><figure class="aligncenter size-full"><img decoding="async" width="763" height="311" src="https://blog.eastonman.com/wp-content/uploads/2021/12/Screen-Shot-2021-12-06-at-11.21.29-AM.png" alt="" class="wp-image-927" srcset="https://blog.eastonman.com/wp-content/uploads/2021/12/Screen-Shot-2021-12-06-at-11.21.29-AM.png 763w, https://blog.eastonman.com/wp-content/uploads/2021/12/Screen-Shot-2021-12-06-at-11.21.29-AM-300x122.png 300w" sizes="(max-width: 763px) 100vw, 763px" /><figcaption>创建后结果</figcaption></figure></div>



<div class="wp-block-image"><figure class="aligncenter size-full"><img decoding="async" width="428" height="500" src="https://blog.eastonman.com/wp-content/uploads/2021/12/Screen-Shot-2021-12-06-at-11.21.45-AM.png" alt="" class="wp-image-928" srcset="https://blog.eastonman.com/wp-content/uploads/2021/12/Screen-Shot-2021-12-06-at-11.21.45-AM.png 428w, https://blog.eastonman.com/wp-content/uploads/2021/12/Screen-Shot-2021-12-06-at-11.21.45-AM-257x300.png 257w" sizes="(max-width: 428px) 100vw, 428px" /><figcaption>Easy setup中添加cidr</figcaption></figure></div>



<h2 class="wp-block-heading">最终效果</h2>



<p><s>辣鸡nodejs果然占内存</s> 安装完成以后大概内存占用是111MB，ztncui自己占了60MB，相对来说还可以接受。</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="940" height="139" src="https://blog.eastonman.com/wp-content/uploads/2021/12/Screen-Shot-2021-12-06-at-10.35.04-AM.png" alt="" class="wp-image-917" srcset="https://blog.eastonman.com/wp-content/uploads/2021/12/Screen-Shot-2021-12-06-at-10.35.04-AM.png 940w, https://blog.eastonman.com/wp-content/uploads/2021/12/Screen-Shot-2021-12-06-at-10.35.04-AM-300x44.png 300w, https://blog.eastonman.com/wp-content/uploads/2021/12/Screen-Shot-2021-12-06-at-10.35.04-AM-768x114.png 768w" sizes="(max-width: 940px) 100vw, 940px" /><figcaption>mtr</figcaption></figure></div>



<p>可以看到，一天的丢包率只有0.1%，我认为是可以接受的。</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="653" height="263" src="https://blog.eastonman.com/wp-content/uploads/2021/12/Screen-Shot-2021-12-06-at-10.36.31-AM.png" alt="" class="wp-image-918" srcset="https://blog.eastonman.com/wp-content/uploads/2021/12/Screen-Shot-2021-12-06-at-10.36.31-AM.png 653w, https://blog.eastonman.com/wp-content/uploads/2021/12/Screen-Shot-2021-12-06-at-10.36.31-AM-300x121.png 300w" sizes="(max-width: 653px) 100vw, 653px" /><figcaption>iperf3</figcaption></figure></div>



<p>我的两台vps之间也能跑到比较高的速率。</p>The post <a href="https://blog.eastonman.com/blog/2021/12/zerotier/">全球大内网与Zerotier</a> first appeared on <a href="https://blog.eastonman.com">Easton Man's Blog</a>.]]></content:encoded>
					
					<wfw:commentRss>https://blog.eastonman.com/blog/2021/12/zerotier/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
	</channel>
</rss>
