@@ -16,9 +16,10 @@ cannot reach.
1616- A Linux server with systemd — or with Docker, which the installer will use
1717 instead. amd64, arm64, armv5/v6/v7, 386, s390x and riscv64 are all published.
1818- Root, or a user with sudo.
19- - TCP ** 62050** reachable * from the panel* . Outbound access to the panel is
20- needed by the one-line command below, but not by the automatic install, which
21- pushes everything down its own SSH connection.
19+ - TCP ** 62050** reachable * from the panel* , over IPv4 or IPv6 — a node listens
20+ on both. Outbound access to the panel is needed by the one-line command below,
21+ but not by the automatic install, which pushes everything down its own SSH
22+ connection.
2223- Whatever ports the inbounds you assign to this node will listen on.
2324
2425A node does not need a licence key of its own. The panel's licence caps how many
@@ -52,7 +53,7 @@ Options you can add to the command:
5253
5354| Flag | Effect |
5455| --- | --- |
55- | ` --listen ADDR ` | bind the control API somewhere other than ` 0.0.0.0: 62050` |
56+ | ` --listen ADDR ` | bind the control API somewhere other than ` [::]: 62050` (the IPv6 wildcard, which serves IPv4 too) |
5657| ` --method script\|docker ` | deploy as a systemd service or a container (default: whatever is already there) |
5758| ` --source panel\|github ` | take the binary from the panel or from a public release |
5859| ` --version TAG ` | install a specific release (implies ` --source github ` ) |
@@ -152,10 +153,46 @@ to advertise it:
152153ufw allow from PANEL_IP to any port 62050 proto tcp
153154```
154155
156+ If the panel reaches this node over IPv6, the rule has to name the address it
157+ actually arrives from — a v4 rule does not cover a v6 connection:
158+
159+ ``` bash
160+ ufw allow from 2001:db8::1 to any port 62050 proto tcp
161+ ```
162+
155163Client-facing ports are a separate matter. They are whatever the inbounds
156164assigned to this node use, so they are chosen in the panel — open them here after
157165you have assigned the template, not before.
158166
167+ ## A node reached over IPv6
168+
169+ Nothing special is required, on either side. The node binds ` [::]:62050 ` by
170+ default, which on a dual-stack host accepts IPv4 connections as well — so the
171+ same install works whether the panel reaches it over v4, v6, or both. On a host
172+ with IPv6 switched off entirely the node cannot bind that address and falls back
173+ to ` 0.0.0.0:62050 ` on its own, which is what that host meant anyway.
174+
175+ A server with ** only** an IPv6 address needs nothing extra either. Add it in the
176+ panel with its address written plainly:
177+
178+ ```
179+ 2001:db8::1
180+ ```
181+
182+ Brackets are accepted and stripped — ` [2001:db8::1] ` and ` 2001:db8::1 ` are the
183+ same node. The panel puts them back where the syntax needs them and leaves them
184+ off where it does not: a share link comes out as
185+ ` vless://…@[2001:db8::1]:443?… ` , a wireguard profile as
186+ ` Endpoint = [2001:db8::1]:51820 ` , while a clash or sing-box config and an
187+ OpenVPN ` remote ` line carry the bare address. The same goes for ** Public
188+ address** (the address published in links, when it differs from the one the
189+ panel connects to) and for the SSH host of an automatic install.
190+
191+ One thing IPv6 does not change: if an inbound uses TLS with no SNI set, the
192+ client validates the certificate against the address, so that address has to be
193+ on the certificate. Reissue the node's certificate with the IPv6 address in its
194+ SAN list, exactly as you would with an IPv4 one.
195+
159196## Panel and node on the same server
160197
161198** Not recommended.** It works, and nothing in Nexora forbids it — but read why
@@ -238,7 +275,7 @@ panel.
238275``` bash
239276cat > /opt/nexora-node/config.json << 'JSON '
240277{
241- "listen": "0.0.0.0 :62050",
278+ "listen": "[::] :62050",
242279 "cert_file": "/var/opt/nexora/certs/ssl_cert.pem",
243280 "key_file": "/var/opt/nexora/certs/ssl_key.pem",
244281 "client_ca_file": "/var/opt/nexora/certs/panel_ca.pem"
@@ -344,10 +381,14 @@ dropping the connection. Check, in order:
344381systemctl status nexora-node # on the node
345382journalctl -u nexora-node -n 50 # on the node
346383nc -vz NODE_IP 62050 # from the panel server
384+ nc -vz -6 2001:db8::1 62050 # …if the panel reaches it over IPv6
347385```
348386
349387A firewall rule that does not include the panel's address is the usual cause; a
350- cloud provider security group is the second.
388+ cloud provider security group is the second. If the node is reached over IPv6,
389+ check that the firewall rule is a v6 rule — a v4 one does not cover it — and that
390+ ` ss -lnt | grep 62050 ` shows the node on ` [::] ` rather than ` 0.0.0.0 ` , which
391+ means IPv6 is switched off on the host and the node fell back.
351392
352393** The node was reinstalled and the panel refuses it.** A reinstall generates a
353394new server certificate, and the panel is still pinning the old one. Delete the
0 commit comments