「Netbird」对自托管部署采用了折衷的中间策略,Nebula 只能自托管部署且官方没有 GUI 支持,Tailscale 不能自托管部署,Netbird 则支持、甚至推荐自托管部署,自托管部署 Netbird 虚拟网络,节点的添加及虚拟专用网络的配置与非自托管方式完全相同,本文不做赘述。Netbird虚拟网络的自托管部署同样体现了其高度易用的特性,可以直接简化理解为准备工作、后台管理网站搭建两个步骤。
1.检查与准备工作
Netbird官网给出了明确的self-hosted指引,这里仅仅搬运并适当结合实践微调如下:
- 拥有公网 IP 的 服务器;
- 服务器确保不低于1c2g配置;
- Docker 与 docker-compose,和节点添加、安装相同,还需要jq、curl;
- 端口开放:TCP-80、443,UDP-3478、49152-65535;
- 域名,指向计划使用的自托管服务器
这里需要强调两点,一是测试性部署使用的是1c1g的Azure B1s,可部署运行,卡顿但未尝试调优。二是80、443端口的开放要求对于国内VM的使用可能存在挑战,可以将内网主机通过IPv6进行暴露作为替代方案,实测可行。
2.搭建自托管netbird后台网站
2.1 安装
直接参照官方指导安装或使用已有镜像Docker安装,需要将nb.example.com替换为计划使用、已配置好解析的域名。
#apt install curl -y apt install jq -y export NETBIRD_DOMAIN=nb.example.com; curl -fsSL https://github.com/netbirdio/netbird/releases/latest/download/getting-started-with-zitadel.sh | bash
整个安装、部署过程应该会持续5-10分钟,取决于服务器性能和Internet网络状况。
安装完成,会给出类似以下内容的后台管理员初始化用户名和密码:
Username: admin@nb.example.com
Password: NYDFetrxcDF86IN4LwpVgq0BZd86tR86d9TM@
如因迁移等原因需要卸载,可使用以下命令。
docker compose down --volumes rm -f docker-compose.yml Caddyfile zitadel.env dashboard.env machinekey/zitadel-admin-sa.token turnserver.conf management.json
2.2 登录与验证
首次打开部署的管理面板,输入安装完成后输出的初始用户名、密码。
Zitadel验证服务要求首次登录及密码修改后均需要执行一次两步验证,后续登录不会再对设备进行验证。这里选取软件应用,后续需要用到google验证器等app。
两步验证过程中,使用google验证器(IOS、Android均有)等app扫描二维码,输入验证其显示的验证码,点击【继续】即可。
之后,因为首次登录,还需要对初始密码进行修改,密码要求包含大小写、特殊字符和数字,修改后再进行一次两步验证。后续,在有效期内登录不需要输入密码或两步验证。
3. 省略的部分
netbird自托管部署默认使用zitadel的第三方验证,而zitadel也是完全开源的应用。
Netbird支持自托管用户采用的IdP(第三方验证服务提供商)包括Azure AD、Google Workspace、Okta等,与Zitadel也可以子托管部署不同,Azure AD、Google Workspace无法自托管,只能使用Micosoft或Google的服务。
考虑到Ondrive的流行和Azure API使用广泛,可获取的资料、参考很多,建议使用Azure AD。
最后,可以总结一点小小的遗憾和期望,那就Netbird自托管部署需要使用TCP 80/443两个端口供后台WebUI使用,这对于不喜欢折腾的用户而言有点不够人性化,毕竟国内环境较难满足这一要求。
文章评论
分享很不错啊!
博客开了RSS订阅吗?
分享很不错啊!
博客开了RSS订阅吗?
@ǝɔ∀ǝdʎz∀ɹɔ ? 没开 你blog怎么这么慢
@老E 哦, 我的博客就是google的blogspot标准模式, 没有弄自己的域名, 也没搞什么CDN之类的.
做内容的, 不是追风口的, 速度影响没那么大吧. 呵呵.
你开个RSS, 方便用户订阅呀. 不是八卦新闻站, 谁会天天来打卡?
只能80/443,那是不是就不能和宝塔用存了?
@饭饭 80 443是管理后台caddy用的 应该可以配置的
我运行起来之后打开页面是 `Login Error: User state: Unauthenticated`,不知道什么情况。也搜不到相关办法...
@Kaiyuan Unauthenticated 未验证 默认的私有化IdP超卡超慢 应该和连接有关 猜测是没连上IdP导致的
非常棒,但是我的80,443被nginx占用,如何修改?
@灰太狼大叔 我抽空看下它脚本 应该能找到答案 大家可以一块看看啊
@老E 好的,非常感谢,时刻关注
你好,倘若开放内网中的IPV6主机,还需要80和443端口吗?很多地方V6 也是屏蔽这两个端口的。
@bottle 是的啊 默认的80、443端口是caddy webui和idp使用,可以尝试修改下caddy配置
@老E 大佬能不能结合国内环境,出一期修改配置来自定义端口的教程,想把服务搭建到自己家里。我也用过很多组网工具,对比其他的这个确实不错。
@bottle 看这里:https://www.bilibili.com/read/cv27338555/?spm_id_from=333.999.0.0
有小伙伴搞定了,直接复制的链接
@老E 并没有吖,这个贴子里也没解决80和443的问题。
@饭饭 抱歉 我没细看 等好了联通azure ad一块发一期
@老E 大佬我的443跟80都给宝塔用作总反代了 我有没有办法透过反代的方式来把它的UI弄出来呢?(其他端口我是NAT对应过去的)我现在反代会提示从定向次数过多
nb用的是caddy 你用nginx反代的话 我不清楚会是什么样 单纯从nginx看 重定向次数过多一般是由路径引起的来回重定向 检查下location和proxy_pass的/ 浏览器里观察下 看有无location的url被滤除 你需要很清楚地址栏里应该是什么url才是正确的才能找到症结 还有就是proxy_redirect进行重定向映射与绝对重定向的开关
安装完成后,默认的https://域名:443打开失败,页面显示“HTTP ERROR 502”;改为https://域名/ui/console/后,页面内容为zitadel后台,请问怎么能访问到netbird自托管管理页面。
@taozi 不需要443 502是超时重启下服务器试试 确保你443 80是开放的
#1267 issue 可以自定义80、443、8080端口号了
https://github.com/netbirdio/netbird/issues/1267#issuecomment-1865947618
怎么样可以将组网后的期中一台机器改成代理模式?
比如已经将100.1/110.1/120.1三台机器组网成功,但是我想讲期中一台变成像WG一样的代理模式。
可以实现吗?
@keung 可以 需要你自己手动配置
@keung 修正:0.27+ 还是0.26.5+ 已经可以设定出口端点了 按照官方指导即可