本文为某些被拉入Netbird组网但既不知道组网原理也不知道如何操作的小白提供教程,请各位大佬略过此文

Netbird文档:https://docs.netbird.io/get-started/install/windows#running-net-bird-with-a-setup-key


前置知识

建议小白在操作前了解以下知识,只要你稍微懂一些计算机网络,就请折叠以下内容直接跳到操作

前置知识

最简介计算机网络

计算机网络就是计算机间如何通信的技术

举个不恰当但能够让小白略微了解的比喻:假设有两个人,其名称为A和B,A如何向B提交包裹?首先A和B都拥有一个地址,并且在该地址上有开放的邮箱,并且A和B事先了解彼此的地址和在该地址上应该投放至哪个邮箱,我们先假设A和B位于同一个邮递区域,那么A直接将包裹发送至B的地址的邮箱

转换一下:假设有两台主机(电脑设备),其主机名为A和B,A如何向B发送网络包?A和B拥有一个地址(在本例中可以理解为IPv4,一个32位的二进制数字)和开放的端口(可理解为邮箱。每台主机拥有数万个端口,当需要接受网络时,将监听其中的一个端口),假设A和B位于同一个网络(它们之间没有被路由器、防火墙、运营商网络隔开。例如同一个路由器下的局域网),那么A直接将网络包发送至B的地址的对应端口

以上的例子省略了所有的底层流程,只关注网络层级的表面

另外引出一些概念,以便下文理解:

  • 互联网:一个所有人都能访问的公共网络(通常使用公网 IP),可以不严谨的称作公网
  • 防火墙:控制端口的开关(开放的端口会带来风险)
  • 加密:我通过其他人(即网络上的除了你和我之外的其他设备,如路由器,以下简称中间人)向你传纸条(明文),该明文消息会被所有中间人查看或修改。但我们事先商量好加密方法和解密密钥,中间人就不能查看,如果中间人修改了内容(密文),你就不能解密

在计算机网络和互联网发展的早期,人们认为32位的网络地址(可以表达232个不同的地址)足够世界上的设备使用了。然而随着网络设备接入量的巨大增加,全球 IPv4 地址早已耗尽,新设备因为拿不到地址,就没法上网了。人们发明了 NAT(网络地址转换)来缓解这个问题

NAT

NAT的核心工作其实就是“在 IP 包经过路由器或防火墙的时候,修改其源和/或目的地址”

NAT允许将网络划分为多个私有网络,其中的机器机器使用私有IP地址,如果它们需要访问公网服务,那么,

  • 出向流量:需要经过一台 NAT 设备,它会对流量进行 SNAT,将私有IP(源ip)+ 端口转换成 NAT 设备的公网IP + 端口(这样应答包才能回来),然后再将包发出去;

  • 应答流量(入向):到达 NAT 设备后进行相反的转换,然后再转发给客户端

以上的例子假设设备到公网之间只有一层NAT

一般的NAT设备就是家用路由器,这种由路由器隔开的私有网络,通常也被称为一个子网

显而易见的是,网络连接只能由位于子网的设备主动发出出向流量,才能在NAT设备上留下处理应答流量的转换规则。子网外的设备无法主动访问子网内的设备,因为它不知道子网内设备的私有地址,也无法主动穿透子网的NAT层。对于一般的上网流程不会有影响,但是假如你需要进行语音通信(WebRTC&VoiP)或者在子网中架设服务器提供服务(希望外部设备能够主动的连接子网上的设备),就不得不涉及子网间设备的互联

最简单的方法是找一个公网上的设备当作中继路由层,让子网设备维持和公网设备的连接,并将发送至公网的流量导航至子网设备,反向流量亦同

或者,尝试让两个设备穿透NAT层直接连接

NAT穿透

推荐阅读How NAT traversal works(感谢@arthurchiao),简单了解可以只看到1.3,后续是NAT穿透的细节

NAT穿透的核心作用,是在不修改路由器配置、不暴露公网端口的前提下,让位于不同子网中的设备尝试建立直接连接

什么是VPN

VPN(虚拟网络)可以理解为:在互联网中人为创建的一条“虚拟的局域网连接”。

加入同一个VPN的设备,即使位于不同的地方、不同的网络中,看起来也像是连在同一个局域网下,可以直接互相访问。

组建VPN时,VPN内的各个设备必须能够相互连接。因此VPN往往伴随着上文提到的中继和NAT穿透技术共同使用

什么是WireGuard

WireGuard 是一种现代VPN技术。它的特点是:

  • 速度快
  • 默认使用强加密
  • 只关心“设备和设备之间如何安全通信”

WireGuard不负责NAT穿透等外围功能,因此我们需要额外的NAT穿透工具

什么是Netbird

Netbird 是一个基于WireGuard的组网工具。它能够:

  • 自动处理 NAT、NAT穿透和防火墙问题
  • 让分散在各地的设备加入同一个虚拟网络

对使用者来说,效果就是:装好Netbird → 登录 → 接入VPN → 可以直接访问VPN内的设备

为什么已经有了公网IP,仍搭建VPN?

因为有公网IP≠所有服务都适合在公网上访问。公网服务必须对外开放端口,而一旦端口开放,就会持续暴露在互联网上,面临扫描、攻击和误操作的风险。并且需要额外配置加密

对于游戏服务器场景,用VPN能够使服务器对公网完全不可见,能加入VPN的人,天然就是“被允许的玩家”,只需要在VPN中进行简单的安全配置就能轻松做到访问控制

总之,如果有人想拉你进VPN来打游戏,建议先相信再质疑

操作

下载Netbird客户端

https://docs.netbird.io/get-started/install/windows#windows-installation

在上述连接下载安装程序

安装完毕后,按Windows+R,输入cmd,点击运行,然后在终端中输入netbird并回车运行,如果有显示netbird命令行用法就是安装成功了

Netbird的相关操作主要依赖于CLI(命令行界面),Windows客户端提供的用户界面只能够进行一些简单的上下线和配置操作

安装Netbird客户端将在你的设备上添加WireGuard虚拟网卡并配置用于VPN内部连接的DNS服务,从而允许设备加入VPN,对日常上网不会有影响

使用Setup Key和对应的Management URL连接至VPN

在终端中输入以下命令(将其中的Setup Key和URL替换为发给你的)

netbird up --setup-key <SETUP KEY> --management-url <URL>
如何输入命令?

输入命令时请直接粘贴复制,不知道如何复制进cmd请百度。命令中的每一个参数间都有空格,不要省略空格。<>代表替换项,直接输入key和url即可,不要在命令中带上<>,但是要带上空格。

例如SETUP KEY为example-setup-key,url为nb.example.com,你输入的命令应该是这样的:

netbird up --setup-key example-setup-key --management-url nb.example.com

命令输入后按回车来提交,一小段时间内不显示内容是正常的

随后你将与管理服务器建立连接、验证你的密钥、注册你的设备并登陆进VPN,当命令行回显Connected即登录成功

Setup Key和Management URL是能够允许注册新设备的密钥,一定不要泄露,并保证阅后即焚

若你只是希望连接到目标主机,可以在图形化界面中关闭入站连接和VPN内流量经过设备,此处不再赘述

可以通过图形化界面或netbird down命令来断开连接

验证

接下来就可以验证是否可以连接目标主机了。在终端输入以下命令

netbird status -d

终端将打印一系列状态,不要害怕。在Peers detail:下面找到目标主机的域名(如果不知道就问你的管理员)并检查Status:Connection type:。如果Status:Connected就是已经建立了目标主机的连接,此时Connection type:会有以下两种情况

  • P2P: 你与目标主机间的NAT穿透成功,可以建立直接连接
  • Relay:你与目标主机间的NAT穿透失败或仍在进行,因此处于中继服务器中转流量的状态,此时也可以连接但延迟会比P2P

现在你可以在终端中尝试ping目标主机的域名,例如目标主机域名为target.nb.example.com,在终端中输入

ping target.nb.example.com

如果可以连接,此时就会显示你连接目标主机的延迟。你可以询问管理员具体如何使用他想提供给你的服务了

常见问题

  • 我在Peers detail:中找不到我想连接的主机
    • 让Netbird管理员开放你连接目标主机的权限
  • Connection type:一直是Connecting
    • 联系管理员
  • Connection type:Connected但ping不通
    • 联系管理员,这大概率是某一方连接管理服务器或中继服务器不通,或者目标主机关闭ICMP导致的