NetBird 新一代基于 WireGuard 组网神器

项目地址: https://github.com/netbirdio/netbird

项目文档:https://docs.netbird.io/

简介

NetBird 是一个构建于 WireGuard 之上的开源网络管理平台,它允许计算机、设备和服务器通过快速加密隧道实现直接连接,无需进行任何配置或依赖中央 VPN 服务器。它为专用网络提供了卓越的安全性,创建出一个安全可靠的专用网络,即使在没有手动配置和专业人员协助的情况下,也能够实施安全措施。NetBird 网络广泛适用于云、本地、边缘以及容器环境,能够避免打开端口、设置复杂防火墙规则和使用 VPN 网关等繁琐操作,为用户带来极大的便利。

它与 Tailscale 很像,但是区别也比较明显。Tailscale 是在用户态实现了 WireGuard 协议,无法使用 WireGuard 原生的命令行工具来进行管理。而 NetBird 直接使用了内核态的 WireGuard,可以使用命令行工具 wg 来查看和管理。

如果你是 WireGuard 原生党,墙裂建议使用 NetBird。

netbird_2

NetBird 不依赖集中式的 VPN 服务器,您的计算机、设备、机器以及服务器可直接通过快速加密隧道实现相互连接。只需简单点击几下,NetBird 就能将位于任何地方的机器连接起来。利用 NetBird 来部署安全的点对点 VPN 时,整个过程耗时不到 5 分钟,为您提供高效便捷的网络连接体验。

  • Connect NetBird 创建了一个基于 WireGuard 的覆盖网络,该网络通过加密隧道自动连接您的机器,省去了打开端口、设置复杂防火墙规则、使用 VPN 网关等麻烦事。
  • Secure NetBird 通过应用细粒度的访问策略实现安全的远程访问,同时允许您从一个单一的位置直观地对其进行管理。可普遍适用于任何基础设施。

NetBird 架构图

从官方发布的网络结构示意图来看,Netbird分为Management、Signal、STUN、Relay四个组件,优先P2P直接连接,这一点在自托管部署时(组件的Create、Ready)也会得到验证。官方How works对各组件进行了详细描述。

NetBird架构

主要特性

连接特性 管理 安全 自动化 支持平台
  • - [x] WireGuard 内核
  • - [x] Linux
  • - [x] 点对点连接
  • - [x] Auto peer discovery and configuration
  • - [x] Mac
  • - [x] 备份连接
  • - [x] Windows
  • - [x] IdP groups sync with JWT
  • - [x] Android
  • - [x] 基于 BPF 的 NET 实现
  • - [x] Peer-to-peer encryption
  • - [x] iOS
  • - [x] OpenWRT
  • - [x] Periodic re-authentication
    • - [x] Docker

    NetBird 部署使用

    前置条件:

    • 一个拥有公网 IP 的 Linux 服务器,配置不低于 1CPU和 2G内存;
    • Docker 与 docker-compose;
    • 开放 TCP 端口 80, 443, 33073, 10000(端口不可被占用);
    • 开放 UDP 端口 3478, 49152-65535;
    • 配置好了 DNS 解析

    使用脚本安装

    官方除了linux下可以直接使用安装脚本。

    Linux 脚本安装:

    curl -fsSL https://pkgs.netbird.io/install.sh | sh
    

    Debian 以及基于 APT 安装

    1. 增加 NetBird 仓库秘钥

      sudo apt-get update
      sudo apt-get install ca-certificates curl gnupg -y
      curl -sSL https://pkgs.netbird.io/debian/public.key | sudo gpg --dearmor --output /usr/share/keyrings/netbird-archive-keyring.gpg
      echo 'deb [signed-by=/usr/share/keyrings/netbird-archive-keyring.gpg] https://pkgs.netbird.io/debian stable main' | sudo tee /etc/apt/sources.list.d/netbird.list
      
      
      
    2. 更新缓存

       sudo apt-get update
      
    3. 安装 NetBird

       # for CLI only
       sudo apt-get install netbird
       # for GUI package
       sudo apt-get install netbird-ui
      
      
      

    Red Hat / Amazon Linux 2 等基于 RPM 安装

    1. 增加仓库秘钥:

      sudo tee /etc/yum.repos.d/netbird.repo <<EOF
      [netbird]
      name=netbird
      baseurl=https://pkgs.netbird.io/yum/
      enabled=1
      gpgcheck=0
      gpgkey=https://pkgs.netbird.io/yum/repodata/repomd.xml.key
      repo_gpgcheck=1
      EOF
      
      
      
    2. 安装 NetBird 程序:

       # for CLI only
       sudo yum install netbird
       # for GUI package
       sudo yum install libappindicator-gtk3 libappindicator netbird-ui
      
      
      

    Fedora/Amazon Linux 2023

    1. 创建仓库源

      sudo tee /etc/yum.repos.d/netbird.repo <<EOF
      [netbird]
      name=netbird
      baseurl=https://pkgs.netbird.io/yum/
      enabled=1
      gpgcheck=0
      gpgkey=https://pkgs.netbird.io/yum/repodata/repomd.xml.key
      repo_gpgcheck=1
      EOF
      
      
      
    2. 导入仓库

       sudo dnf config-manager --add-repo /etc/yum.repos.d/netbird.repo
      
      
      
    3. 安装程序

       # for CLI only
       sudo dnf install netbird
       # for GUI package
       sudo dnf install libappindicator-gtk3 libappindicator netbird-ui
      
      
      

    有些版本的发行版中,libappindicator 的默认行为已经发生了改变,因此我们需要安装 gnome-shell-extension-appindicator 并将其启用。

    sudo dnf install gnome-shell-extension-appindicator`
    sudo gnome-extensions enable [email protected]
    
    

    在 X11 环境下,之后您可能需要重启 GNOME Shell(按 Alt+F2,输入 r,然后按回车键)。在 Wayland 环境下,您需要注销并重新登录。

    openSUSE

    1. 增加仓库

      sudo zypper addrepo https://pkgs.netbird.io/yum/ netbird
      
      
      
    2. 安装程序

      # MicroOS (immutable OS with selinux)
      transactional-update pkg in netbird
      reboot
      
      # Tumbleweed / Leap
      zypper in netbird
      
      
      

    MacOS 安装

    命令行安装

    curl -fsSL https://pkgs.netbird.io/install.sh | sh
    
    

    Homebrew安装

    如果你之前安装过,可以用下面的命令卸载:

    # Stop and uninstall daemon service:
    sudo netbird service stop
    sudo netbird service uninstall
    # unlink the app
    brew unlink netbird
    
    

    再执行下面命令安装:

      # for CLI only
      brew install netbirdio/tap/netbird
      # for GUI package
      brew install --cask netbirdio/tap/netbird-ui
    
    

    如果你需要以服务方式运行,需要执行下面命令:

     sudo netbird service install
     sudo netbird service start
    
    

    Windows 安装

    1. 下载安装文件

    2. 双击安装文件安装引导程序安装完成

    3. 默认情况下会安装在 C:\Program Files\NetBird 目录下,并且会自动安装服务。

    群辉系统安装

    在群辉系统上可以直接执行下面命令安装:

    curl -fsSL https://pkgs.netbird.io/install.sh | sh
    
    

    为了让 NetBird 在重启后的 Synology 设备上正常工作,您需要在每次重启 NAS 时运行此脚本。为了使该过程自动化,您可以在 Synology DSM 中创建一个计划任务。

    #!/bin/sh
    
    # Create the necessary file structure for /dev/net/tun
    if [ ! -c /dev/net/tun ]; then
      if [ ! -d /dev/net ]; then
        mkdir -m 755 /dev/net
      fi
      mknod /dev/net/tun c 10 200
      chmod 0755 /dev/net/tun
    fi
    
    # Load the tun module if not already loaded
    if !(lsmod | grep -q "^tun\s"); then
      insmod /lib/modules/tun.ko
    fi
    
    

    安装完成后,使用netbird up命令即可连接进入虚拟专网。

    如因网络变化需对节点进行调整,可卸载netbird。

    apt remove netbird netbird-ui -y
    

    docker方式安装

    官方指引给定的Docker加载运行命令默认采用的容器名称不便于记忆,可以通过–name指定,同时,NB_SETUP_KEY需要指定在管理面板生成的有效setup key。

    #apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
    docker pull netbirdio/netbird
    docker run --rm -d --net=host --name="nb-xxx"\
    --cap-add=NET_ADMIN \
    -e NB_SETUP_KEY=6E1EC378-6059-48B7-B9A8-E09B4809793A \
    -v netbird-client:/etc/netbird \
    netbirdio/netbird:latest
    

    docker安装的netbird peer如需卸载,可使用如下命令。

    docker rm -f nb-xxx
    docker rmi -f netbirdio/netbird:latest
    

    常用命令

    netbird up #启动 NetBird 服务
    netbird down #停止 NetBird 服务
    netbird status --detail #查看 NetBird 状态
    

    在云上,确保安全组端口开放TCP端口:80, 443, 33073, 10000; 和UDP端口: 3478, 49152-65535。