Describe the problem
When trying to run the signal service as standalone, netbird status reports it’s connected to the signal service but peers cannot ping each other and are stuck “connecting”.
To Reproduce
Run signal on signal.netbird.domain.com like this:
services:
signal:
image: 'netbirdio/signal:latest'
command: "--log-level debug --letsencrypt-domain signal.netbird.domain.com --ssl-dir=/etc"
ports:
- '443:443'
- '10000:10000'
volumes:
- './data/signal/letsencrypt:/etc/letsencrypt'
- './data/signal/logs:/var/log/netbird'
Configure management.json like this
"Signal": {
"Proto": "https",
"URI": "signal.netbird.domain.com:443",
"Username": "",
"Password": null
},
Expected behavior
Peers connect as usual.
Are you using NetBird Cloud?
Self hosted.
NetBird version
0.48.0
Is any other VPN software installed?
No
Debug output
netbird status -d from a peer:
cam1.netbird.selfhosted:
NetBird IP: 100.70.205.198
Public key: oWxONSNjVcitGblH6DA5OGDTh6PEIM6m4UwU37CODUE=
Status: Connecting
-- detail --
Connection type:
ICE candidate (Local/Remote): -/-
ICE candidate endpoints (Local/Remote): -/-
Relay server address:
Last connection update: 1 minute, 45 seconds ago
Last WireGuard handshake: -
Transfer status (received/sent) 0 B/0 B
Quantum resistance: false
Networks: -
Latency: 0s
rut241.netbird.selfhosted:
NetBird IP: 100.70.214.129
Public key: 3JJDdMyn0VRXgaf7j7fVAgduInFMiuo5Vl69oe1MDh4=
Status: Connecting
-- detail --
Connection type:
ICE candidate (Local/Remote): -/-
ICE candidate endpoints (Local/Remote): -/-
Relay server address:
Last connection update: 1 minute, 45 seconds ago
Last WireGuard handshake: -
Transfer status (received/sent) 0 B/0 B
Quantum resistance: false
Networks: -
Latency: 0s
Events:
[INFO] SYSTEM (04e29ca9-2eb8-4b25-8fee-7ba50191af4a)
Message: Network map updated
Time: 1 second ago
OS: windows/amd64
Daemon version: 0.46.0
CLI version: 0.46.0
Management: Connected to https://netbird.domain.com:443
Signal: Connected to https://signal.netbird.domain.com:443
Relays:
[stun:netbird.domain.com:3478] is Available
[turn:netbird.domain.com:3478?transport=udp] is Available
[rels://de1.relay.netbird.domain.com:443] is Available
Nameservers:
[8.8.8.8:53, 8.8.4.4:53] for [.] is Available
FQDN: stvs-pv-laptop1.netbird.selfhosted
NetBird IP: 100.70.63.243/16
Interface type: Userspace
Quantum resistance: false
Lazy connection: false
Networks: -
Forwarding rules: 0
Peers count: 1/34 Connected
The only peer connected is a LAN device.
Signal logs:
2025-06-25T13:30:41+02:00 INFO encryption/letsencrypt.go:22: running with LetsEncrypt ([signal.netbird.domain.com]). Cert will be stored in /etc/letsencrypt
2025-06-25T13:30:41+02:00 INFO signal/cmd/run.go:204: setting up TLS with LetsEncrypt.
2025-06-25T13:30:41+02:00 DEBG signal/cmd/run.go:179: Starting pprof server on 127.0.0.1:6060
2025-06-25T13:30:41+02:00 INFO signal/cmd/run.go:103: running metrics server: :9090/metrics
2025-06-25T13:30:41+02:00 INFO signal/cmd/run.go:230: running HTTP server (LetsEncrypt challenge handler) and gRPC server on the same port: [::]:443
2025-06-25T13:30:41+02:00 INFO signal/cmd/run.go:141: running gRPC backward compatibility server: [::]:10000
2025-06-25T13:30:41+02:00 INFO signal/cmd/run.go:144: signal server version 0.48.0
2025-06-25T13:30:41+02:00 INFO signal/cmd/run.go:145: started Signal Service
2025-06-25T13:31:37+02:00 DEBG signal/server/signal.go:108: registering new peer
2025-06-25T13:31:37+02:00 DEBG signal/peer/peer.go:88: peer registered [aIexxfEE7S8iTgtMEYU9375i5a+g119r3qqpBaRezkg=]
2025-06-25T13:31:37+02:00 DEBG signal/server/signal.go:100: peer connected [aIexxfEE7S8iTgtMEYU9375i5a+g119r3qqpBaRezkg=] [streamID 1750851097757985714]
2025-06-25T13:31:51+02:00 DEBG signal/server/signal.go:108: registering new peer
2025-06-25T13:31:51+02:00 DEBG signal/peer/peer.go:88: peer registered [BK1kwiMi55Vai1e1WhEtdal3sT2pueG5l1E+fCgurmg=]
2025-06-25T13:31:51+02:00 DEBG signal/server/signal.go:100: peer connected [BK1kwiMi55Vai1e1WhEtdal3sT2pueG5l1E+fCgurmg=] [streamID 1750851111088141618]
2025-06-25T13:33:34+02:00 DEBG signal/server/signal.go:103: peer stream closing [aIexxfEE7S8iTgtMEYU9375i5a+g119r3qqpBaRezkg=] [streamID 1750851097757985714]
2025-06-25T13:33:34+02:00 DEBG signal/server/signal.go:133: peer disconnected [aIexxfEE7S8iTgtMEYU9375i5a+g119r3qqpBaRezkg=] [streamID 1750851097757985714]
2025-06-25T13:33:34+02:00 DEBG signal/peer/peer.go:112: peer deregistered [aIexxfEE7S8iTgtMEYU9375i5a+g119r3qqpBaRezkg=]
2025-06-25T13:33:34+02:00 DEBG dispatcher@v0.0.0-20250514131221-a464fd5f30cb/dispatcher.go:69: stream cl osed for peer aIexxfEE7S8iTgtMEYU9375i5a+g119r3qqpBaRezkg=
2025-06-25T13:33:42+02:00 DEBG signal/server/signal.go:103: peer stream closing [BK1kwiMi55Vai1e1WhEtdal3sT2pueG5l1E+fCgurmg=] [streamID 1750851111088141618]
2025-06-25T13:33:42+02:00 DEBG signal/server/signal.go:133: peer disconnected [BK1kwiMi55Vai1e1WhEtdal3sT2pueG5l1E+fCgurmg=] [streamID 1750851111088141618]
2025-06-25T13:33:42+02:00 DEBG signal/peer/peer.go:112: peer deregistered [BK1kwiMi55Vai1e1WhEtdal3sT2pueG5l1E+fCgurmg=]
Screenshots
No screenshots.
Additional context
Actually I don’t see how to secure the signal service at all:
Flags:
-h, --help help for run
--letsencrypt-domain string a domain to issue Let's Encrypt certificate for. Enables TLS using Let's Encrypt. Will fetch and renew certificate, and run the server with TLS
--port int Server port to listen on (e.g. 10000) (default 10000)
--ssl-dir string server ssl directory location. *Required only for Let's Encrypt certificates. (default "/var/lib/netbird/")
--cert-file string Location of your SSL certificate. Can be used when you have an existing certificate and don't want a new certificate be generated automatically. If letsencrypt-domain is specified this property has no effect
--cert-key string Location of your SSL certificate private key. Can be used when you have an existing certificate and don't want a new certificate be generated automatically. If letsencrypt-domain is specified this property has no effect
Global Flags:
--log-file string sets Netbird log path. If console is specified the the log will be output to stdout (default "/var/log/netbird/signal.log")
--log-level string (default "info")
I don’t see a key that only the management would know about or some secret, it looks like the signal service is open on the internet and anyone is free to use it… yet when I try to use the public signal service from netbird cloud it does not work, so there has to be some sort of auth/filtering but I cannot find what.
And given various peers have to connect to it, I don’t see a way to restrict by IP either.
Have you tried these troubleshooting steps?
- Reviewed client troubleshooting (if applicable)
- Checked for newer NetBird versions
- Searched for similar issues on GitHub (including closed ones)
- Restarted the NetBird client
- Disabled other VPN software
- Checked firewall settings