docker自托管安装配置netbird(auth0+nignx反代)

  本教程测试环境Ubuntu 24.04  X64。

  Netbird 是一个基于 WireGuard® 构建的开源网络平台,它可以帮助你轻松创建安全、私密的虚拟网络。它专注于简化配置,实现了零配置(Zero-config)的网络连接,非常适合团队协作、远程访问服务器、物联网设备管理等场景。是tailscale之外的另一个选择。

    核心优势:

简单易用:自动化的密钥管理和对等点(Peer)发现,无需手动配置 WireGuard。

高性能:底层使用 WireGuard,速度快,延迟低。

点对点(P2P)连接:设备之间尽可能建立直接连接,而不是通过中心服务器转发流量,以获得最佳性能。

集中式管理:通过一个统一的管理面板(UI)来管理所有网络成员、访问策略和DNS。

安全性:支持 SSO(如 Google, Microsoft, GitHub)登录,并提供基于角色的访问控制(ACL)。

说明:其实官方提供的免费方案对一般场景下的应用足矣,在此注册。但此域名在墙内实际上无法直接访问,所以自托管部署就有必要了,而且速度也有保证。

准备工作:用于netbird管理的域名nb.mydomain.com(不要套CDN),确保域名正确解析到了你VPS的IP,docker环境安装参考这里 。

一、服务器端部署

    1、通过官方提供的一键安装脚本部署

export NETBIRD_DOMAIN=nb.mydomain.com; curl -fsSL https://github.com/netbirdio/netbird/releases/latest/download/getting-started-with-zitadel.sh | bash
     说明:官方脚本将会通过caddy自动为nb.mydomain.com申请证书,所以确保80,443端口不被占用(不能修改)。安装成功后脚本会生成管理账号及默认密码,浏览器登录 https://nb.mydomain.com修改密码并进行配置。
     自定义端口一键脚本安装参考这里

    2、全手动安装
      2.1、认证服务配置
             部署NetBird的最重要一步就是决定采用哪种安全认证方法,NetBird采用单点登录领域的OIDC协议,官方支持以下的选项:自建单点登录服务:Zitadel、Keycloak、Authentik。单点登录云服务:Azure AD、Google Workspace、Okta、Auth0。这里选择的是Auth0 ,参考文档在这里这里
      (1)、注册Auth0,地址在此
      (2)、创建NetBird的基础应用,请参考下图的步骤,选择Native类型

   如下图,Client ID的值将配置到环境变量。
向下翻页,在Application URIs处填写对应的内容,https://nb.mydomain.com 和http://localhost:53000 及http://localhost
多个域名用英文逗号,分隔。启用Cross-Origin Authentication



向下翻页,展开Advanced Settings,OpenID Configuration需配置到环境变量



     (3)、创建NetBird API

     Identifier填写域名即可,Identifier的值同样要被配置到环境变量

    (4)、创建交互式SSO认证应用


   Client ID需配置到环境变量
下翻到Advanced Settings,启用Device Code并保存

   (5)、创建Machine to Machine认证应用

    选择Auth0 Management API,然后选中以下权限并继续:read:users, update:users, create:users, read:users_app_metadata, update:users_app_metadata, create:users_app_metadata


     转到settings,如下图,相应的值要配置到环境变量

    其中domain的值需要拼装成https://xxxxxx.us.auth0.com/api/v2/格式的字符串,不是nb.mydomian.com域名


   至此,身份认证部分的配置全部结束,为了确保配置的正确性,务必仔细核对配置内容。

   2.2、安装需要的软件包,下载最新版本
apt install -y jq curl
git clone --depth 1 --branch v0.54.1 https://github.com/netbirdio/netbird.git
cd netbird/infrastructure_files/
 准备环境变量配置文件
nano setup.env
根据文件setup.env.example配置说明,更改setup.env文件内的环境变量为你自己的,setup.env最终配置如下:
NETBIRD_AUTH_OIDC_CONFIGURATION_ENDPOINT="https://xxxxxx.us.auth0.com/.well-known/openid-configuration"
NETBIRD_USE_AUTH0=true
NETBIRD_AUTH_CLIENT_ID="kWDpnrJyMZRVhoVGdGW3RC3a6xh63Fi4o2"
NETBIRD_AUTH_SUPPORTED_SCOPES="openid profile email offline_access api email_verified"
NETBIRD_AUTH_AUDIENCE="https://nb.mydomain.com"
NETBIRD_AUTH_DEVICE_AUTH_CLIENT_ID="i2DCxQFAZnUNzvi78VdNHk6hI6PSi8icyS"
NETBIRD_MGMT_IDP="auth0"
NETBIRD_IDP_MGMT_CLIENT_ID="1e6FuHIJh41IhKBge0inAnbAUp2HRtJQG"
NETBIRD_IDP_MGMT_CLIENT_SECRET="-JOgfc_GMrHcLGXQ2uE_Q4DO6hsfEnFBEiUckzc3eimKzCKmktRqwjU7mn9kCoc4l0"
NETBIRD_IDP_MGMT_EXTRA_AUDIENCE="https://xxxxxx.us.auth0.com/api/v2/"
NETBIRD_DISABLE_LETSENCRYPT=true
NETBIRD_DOMAIN=nb.mydomain.com

NETBIRD_MGMT_API_PORT=443
NETBIRD_SIGNAL_PORT=443
NETBIRD_RELAY_PORT=443
   2.3、根据setup.env配置生成docker-compose.yml文件,文件被放在artifacts文件夹
./configure.sh
cd artifacts
     2.4、修改 docker-compose.yml 文件中的服务端口(其他无需修改),与下面nginx配置文件中的保持一致
services:
  dashboard:
    <<: *default
    image: netbirdio/dashboard:latest
    ports:
       - 8010:80
      # - 443:443
.......
  signal:
    <<: *default
    image: netbirdio/signal:latest
    volumes:
      - netbird-signal:/var/lib/netbird
    ports:
      - 8011:80
......
  management:
    <<: *default
    image: netbirdio/management:latest
    depends_on:
      - dashboard
    volumes:
      - netbird-mgmt:/var/lib/netbird
 ......
    ports:
      - 8012:443
......
  relay:
    <<: *default
    image: netbirdio/relay:latest
    environment:
    - NB_LOG_LEVEL=info
......
    ports:
      - 8013:443
 ......

   最后
docker compose up -d
   查看容器工作状态
docker ps -a
      2.5、申请证书参考这里 第5点,编译Nginx,参考这里 第四点。在已经配置好的文件  /usr/local/nginx/conf/nginx.conf 里加入一个sever 字段,注意相关端口与前述docker-compose.yml 文件中一致 。nginx基本配置参考这里 或这里
    server {
    # netbird HTTPS server config
    listen  443  ssl;
     http2   on  ;
    server_name nb.mydomain.com;
    ssl_certificate      /etc/cert/cert.crt;
    ssl_certificate_key  /etc/cert/private.key;

    # This is necessary so that grpc connections do not get closed early
    # see https://stackoverflow.com/a/67805465
    client_header_timeout 1d;
    client_body_timeout 1d;

    proxy_set_header        X-Real-IP $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header        X-Scheme $scheme;
    proxy_set_header        X-Forwarded-Proto https;
    proxy_set_header        X-Forwarded-Host $host;
    grpc_set_header         X-Forwarded-For $proxy_add_x_forwarded_for;

    # Proxy dashboard
    location / {
        proxy_pass http://127.0.0.1:8010;
    }
    # Proxy Signal
    location /signalexchange.SignalExchange/ {
        grpc_pass grpc://127.0.0.1:8011;
        #grpc_ssl_verify off;
        grpc_read_timeout 1d;
        grpc_send_timeout 1d;
        grpc_socket_keepalive on;
    }
    # Proxy Management http endpoint
    location /api {
        proxy_pass http://127.0.0.1:8012;
    }
    # Proxy Management grpc endpoint
    location /management.ManagementService/ {
        grpc_pass grpc://127.0.0.1:8012;
        #grpc_ssl_verify off;
        grpc_read_timeout 1d;
        grpc_send_timeout 1d;
        grpc_socket_keepalive on;
    }
    # Proxy relay
    location /relay {
        proxy_pass http://127.0.0.1:8013;
        # WebSocket support
        proxy_http_version 1.1;
        proxy_set_header Host $http_host;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }

}

  重新加载nginx配置文件使之生效

/usr/local/nginx/sbin/nginx -s reload

2.6、通过浏览器能够访问你的nb.mydomain.com域名

     创建用于登录NetBird的用户(这个用户不是Auth0的用户,而是Auth0提供的身份认证服务的子用户),创建完成后,会提示验证邮箱等,按照提示操作即可。

      说明:第一次创建的netbird账号Role是Owner,具有最高管理权限。以后创建的账号Role是user,权限很低,需要用Owner登录netbird,在菜单team-users-user role修改成admin即可。

二、客户端安装,官方文档在此

       登录后,界面如下


    点击 Add peer,会出现各种平台下的netbird客户端安装方法,基本上所有的平台都支持,包括群晖等。


     如Linux下,运行命令
curl -fsSL https://pkgs.netbird.io/install.sh | sh

    也可直接安装二进制文件,最新版本在此

wget --no-check-certificate  https://github.com/netbirdio/netbird/releases/download/v0.54.1/netbird_0.54.1_linux_amd64.tar.gz
tar xzf  netbird_0.54.1_linux_amd64.tar.gz
sudo mv netbird /usr/bin/netbird
sudo chmod +x /usr/bin/netbird
   
sudo netbird service install
sudo netbird service start

   客户端连入netbird组网

netbird up --management-url https://nb.mydomain.com:443 

   根据提示,打开相应的链接验证即可。

   更新的话,使用的是脚本安装的话,逐行执行下面命令

netbird down
curl -fsSLO https://pkgs.netbird.io/install.sh
chmod +x install.sh
./install.sh --update
netbird up

   登录netbird后台管理,peers菜单下可以看到已经安装的客户端。点击相应客户端右侧的三点,disable session expiration


三、子网路由配置

      netbird 的子网路由的配置,相比与 Tailscale 真的是简单。两个内网只要分别在一台设备上安装 Netbird,这两个内网的所有设备其实都可以互访

       
         落地机就是网段192.168.1.0/24中且安装了netbird客户端的机器,通过落地机可以访问上述网段中任何没有安装netbird的设备。落地机可选择多个,只需其中一个在线,子网路由功能就可正常工作。




     客户端不需要任何设置

  四、一些常用命令,官方文档在此

    netbird up    登录并启动NetBird 客户端。此命令会检查客户端是否已登录,并尝试连接到管理服务。如果尚未登录,它将启动单点登录流程。

   netbird status   查看NetBird 客户端的状态。

   netbird status --detail    可以获取更详细的信息,如连接的对等端、NetBird IP 地址、公钥、连接状态和连接类型。

   netbird down   停止并退出NetBird 客户端。

   netbird version   显示NetBird 客户端的版本信息。

   netbird help   显示所有可用的NetBird 命令。

   备份或升级参考这里

    说明:开放端口,在服务器上开启相关端口如80、443,UDP端口3478等。

评论

热门博文

Xray安装配置VLESS-XTLS-Vision及VLESS-XTLS-uTLS-REALITY

V2Ray安装配置VMESS-TLS及VMESS-TLS-WS

在VPS上轻松搭建L2TP/IPSec图文教程(通吃各种架构的VPS,包括KVM,OpenVZ等)