[GH-ISSUE #2318] Connection Failure: "Client last hole punch is too old" on Android and CLI due to SQLITE_CONSTRAINT_FOREIGNKEY #23428

Closed
opened 2026-06-05 06:16:55 -05:00 by GiteaMirror · 44 comments
Owner

Originally created by @r3nor on GitHub (Jan 24, 2026).
Original GitHub issue: https://github.com/fosrl/pangolin/issues/2318

Describe the Bug

I am unable to establish a connection from Android or CLI after the first successful attempt. The server appears unable to clear the previous session, leaving the client in a broken state where it constantly fails with "Client last hole punch is too old."

I observed a FOREIGN KEY constraint failed error in the logs immediately preceding the connection issues. It appears the server fails to clean up expired sessions, preventing new connections from registering correctly.

Root Cause Log (Pangolin Container):

The server crashes when trying to clear expired sessions:

pangolin  | 2026-01-24T18:11:28+00:00 [warn]: Error clearing expired sessions: FOREIGN KEY constraint failed
pangolin  | Stack: SqliteError: FOREIGN KEY constraint failed
pangolin  |     at PreparedQuery.run (/app/node_modules/src/better-sqlite3/session.ts:132:20)
pangolin  |     at QueryPromise.resultCb (/app/node_modules/src/sqlite-core/session.ts:185:61)
pangolin  |     at QueryPromise.execute (/app/node_modules/src/sqlite-core/session.ts:31:15)
pangolin  |     at QueryPromise.then (/app/node_modules/src/query-promise.ts:31:15) {"code":"SQLITE_CONSTRAINT_FOREIGNKEY"}

Symptom Log (Connection Attempt):

Following the SQL error, the client attempts to connect but gets rejected due to key mismatches and stale hole punch data:

pangolin  | 2026-01-24T18:19:00+00:00 [info]: WebSocket connection established - OLM ID: 3xxrgre3mlg57ia
pangolin  | 2026-01-24T18:19:01+00:00 [info]: Handling register olm message!
pangolin  | 2026-01-24T18:19:01+00:00 [info]: Public key mismatch. Updating public key and clearing session info...
pangolin  | 2026-01-24T18:19:01+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register
...

Observations:

  • The log shows a Public key mismatch followed by repeatedClient last hole punch is too old warnings.
  • This occurs on both platforms (Android and Linux).

Environment

  • OS Type & Version: (e.g., Ubuntu 22.04): Linux Debian 13 Trixie
  • Pangolin Version: latest tag
  • Gerbil Version: latest tag
  • Traefik Version: v3.1 tag
  • Newt Version: latest tag
  • Olm Version: (if applicable)

To Reproduce

  1. Connect a client (CLI or Android) successfully.
  2. Disconnect.
  3. Attempt to reconnect.
  4. Connection fails indefinitely.

Expected Behavior

Reconnections work normally

Originally created by @r3nor on GitHub (Jan 24, 2026). Original GitHub issue: https://github.com/fosrl/pangolin/issues/2318 ### Describe the Bug I am unable to establish a connection from Android or CLI after the first successful attempt. The server appears unable to clear the previous session, leaving the client in a broken state where it constantly fails with "Client last hole punch is too old." I observed a FOREIGN KEY constraint failed error in the logs immediately preceding the connection issues. It appears the server fails to clean up expired sessions, preventing new connections from registering correctly. **Root Cause Log (Pangolin Container):** The server crashes when trying to clear expired sessions: ``` pangolin | 2026-01-24T18:11:28+00:00 [warn]: Error clearing expired sessions: FOREIGN KEY constraint failed pangolin | Stack: SqliteError: FOREIGN KEY constraint failed pangolin | at PreparedQuery.run (/app/node_modules/src/better-sqlite3/session.ts:132:20) pangolin | at QueryPromise.resultCb (/app/node_modules/src/sqlite-core/session.ts:185:61) pangolin | at QueryPromise.execute (/app/node_modules/src/sqlite-core/session.ts:31:15) pangolin | at QueryPromise.then (/app/node_modules/src/query-promise.ts:31:15) {"code":"SQLITE_CONSTRAINT_FOREIGNKEY"} ``` **Symptom Log (Connection Attempt):** Following the SQL error, the client attempts to connect but gets rejected due to key mismatches and stale hole punch data: ``` pangolin | 2026-01-24T18:19:00+00:00 [info]: WebSocket connection established - OLM ID: 3xxrgre3mlg57ia pangolin | 2026-01-24T18:19:01+00:00 [info]: Handling register olm message! pangolin | 2026-01-24T18:19:01+00:00 [info]: Public key mismatch. Updating public key and clearing session info... pangolin | 2026-01-24T18:19:01+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register ... ``` **Observations**: - The log shows a Public key mismatch followed by repeatedClient last hole punch is too old warnings. - This occurs on both platforms (Android and Linux). ### Environment - OS Type & Version: (e.g., Ubuntu 22.04): Linux Debian 13 Trixie - Pangolin Version: latest tag - Gerbil Version: latest tag - Traefik Version: v3.1 tag - Newt Version: latest tag - Olm Version: (if applicable) ### To Reproduce 1. Connect a client (CLI or Android) successfully. 2. Disconnect. 3. Attempt to reconnect. 4. Connection fails indefinitely. ### Expected Behavior Reconnections work normally
Author
Owner

@dordijeb commented on GitHub (Jan 25, 2026):

Hi,

I am experiencing similar issue with iOS app.

pangolin    | 2026-01-25T11:38:26+00:00 [info]: Establishing websocket connection
pangolin    | 2026-01-25T11:38:26+00:00 [info]: Client added to tracking - OLM ID: , Connection ID: , Total connections: 1
pangolin    | 2026-01-25T11:38:26+00:00 [info]: WebSocket connection established - OLM ID: 
pangolin    | 2026-01-25T11:38:26+00:00 [info]: Handling register olm message!
pangolin    | 2026-01-25T11:38:26+00:00 [info]: Public key mismatch. Updating public key and clearing session info...
pangolin    | 2026-01-25T11:38:26+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register
pangolin    | 2026-01-25T11:38:27+00:00 [info]: Handling register olm message!
pangolin    | 2026-01-25T11:38:27+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register
pangolin    | 2026-01-25T11:38:28+00:00 [info]: Handling register olm message!
pangolin    | 2026-01-25T11:38:28+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register
pangolin    | 2026-01-25T11:38:29+00:00 [info]: All connections removed for OLM ID: 
pangolin    | 2026-01-25T11:38:29+00:00 [info]: Client disconnected - OLM ID: 

After the first successful connection, it never goes past the stage of "registering...".

<!-- gh-comment-id:3796493837 --> @dordijeb commented on GitHub (Jan 25, 2026): Hi, I am experiencing similar issue with iOS app. ``` pangolin | 2026-01-25T11:38:26+00:00 [info]: Establishing websocket connection pangolin | 2026-01-25T11:38:26+00:00 [info]: Client added to tracking - OLM ID: , Connection ID: , Total connections: 1 pangolin | 2026-01-25T11:38:26+00:00 [info]: WebSocket connection established - OLM ID: pangolin | 2026-01-25T11:38:26+00:00 [info]: Handling register olm message! pangolin | 2026-01-25T11:38:26+00:00 [info]: Public key mismatch. Updating public key and clearing session info... pangolin | 2026-01-25T11:38:26+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register pangolin | 2026-01-25T11:38:27+00:00 [info]: Handling register olm message! pangolin | 2026-01-25T11:38:27+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register pangolin | 2026-01-25T11:38:28+00:00 [info]: Handling register olm message! pangolin | 2026-01-25T11:38:28+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register pangolin | 2026-01-25T11:38:29+00:00 [info]: All connections removed for OLM ID: pangolin | 2026-01-25T11:38:29+00:00 [info]: Client disconnected - OLM ID: ``` After the first successful connection, it never goes past the stage of "registering...".
Author
Owner

@Richi-78 commented on GitHub (Jan 25, 2026):

After some succesful attemps I now have the same issue both with android (0.1.3 on android 16 with OneUI 8) and windows (0.5.0 on windows 11) clients
Regardless, even when connected, clients would not view connected sites and I could not access the resources on those sites

<!-- gh-comment-id:3797080949 --> @Richi-78 commented on GitHub (Jan 25, 2026): After some succesful attemps I now have the same issue both with android (0.1.3 on android 16 with OneUI 8) and windows (0.5.0 on windows 11) clients Regardless, even when connected, clients would not view connected sites and I could not access the resources on those sites
Author
Owner

@oschwartz10612 commented on GitHub (Jan 26, 2026):

Everyone please confirm you have UDP port 21820 open on your VPS and in the docker compose. If you have upgraded from older versions of the stack this was not the default. Also please make sure you are on the latest version of gerbil 1.3.0.

If all of these things are confirmed please report back!

<!-- gh-comment-id:3797439549 --> @oschwartz10612 commented on GitHub (Jan 26, 2026): Everyone please confirm you have UDP port 21820 open on your VPS and in the docker compose. If you have upgraded from older versions of the stack this was not the default. Also please make sure you are on the latest version of gerbil 1.3.0. If all of these things are confirmed please report back!
Author
Owner

@engels0n commented on GitHub (Jan 26, 2026):

Hi @oschwartz10612 ,
yes, ports are open. Gerbil is 1.3.0

VPS:
Image

Docker-Compose
Image

<!-- gh-comment-id:3798179298 --> @engels0n commented on GitHub (Jan 26, 2026): Hi @oschwartz10612 , yes, ports are open. Gerbil is 1.3.0 VPS: <img width="311" height="43" alt="Image" src="https://github.com/user-attachments/assets/1fb1a222-df2d-4e98-bbb3-cd89ac655d54" /> Docker-Compose <img width="167" height="45" alt="Image" src="https://github.com/user-attachments/assets/91d4c0bf-8059-4fa6-b03f-1ad7cec2a8a9" />
Author
Owner

@timokluser-dev commented on GitHub (Jan 26, 2026):

I was having the same issue since a few days.

I finally found a workaroung by adding the --port <> option to newt explicitly.

The docker run command:

docker run --restart always --name $CONTAINER_NAME -v /var/run/docker.sock:/var/run/docker.sock:ro -dit --net=host $IMAGE \
	--id $NEWT_ID \
	--secret $NEWT_SECRET \
	--endpoint $NEWT_ENDPOINT \
	--docker-socket /var/run/docker.sock \
	--port 60859

@oschwartz10612 I hope this helps for investigating 🙂

Have a nice day all!

<!-- gh-comment-id:3798518738 --> @timokluser-dev commented on GitHub (Jan 26, 2026): I was having the same issue since a few days. I finally found a workaroung by adding the `--port <>` option to newt explicitly. The docker run command: ```bash docker run --restart always --name $CONTAINER_NAME -v /var/run/docker.sock:/var/run/docker.sock:ro -dit --net=host $IMAGE \ --id $NEWT_ID \ --secret $NEWT_SECRET \ --endpoint $NEWT_ENDPOINT \ --docker-socket /var/run/docker.sock \ --port 60859 ``` @oschwartz10612 I hope this helps for investigating 🙂 Have a nice day all!
Author
Owner

@r3nor commented on GitHub (Jan 26, 2026):

@oschwartz10612 Yes, I have port 21820 open in firewall and docker compose. However, connection is still not working.

See:

> sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
443                        ALLOW       Anywhere                  
51820/udp                  ALLOW       Anywhere                  
21820/udp                  ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
443 (v6)                   ALLOW       Anywhere (v6)             
51820/udp (v6)             ALLOW       Anywhere (v6)             
21820/udp (v6)             ALLOW       Anywhere (v6)

And in my docker-compose.yml:

...
ports:
      - 51820:51820/udp
      - 21820:21820/udp
      - 443:443 # Port for traefik because of the network_mode
      - 80:8 # Port for traefik because of the network_mode
 ...

I still see this error on top of the container startup:

pangolin  | 2026-01-26T15:13:01+00:00 [warn]: Error clearing expired sessions: FOREIGN KEY constraint failed
pangolin  | Stack: SqliteError: FOREIGN KEY constraint failed
pangolin  |     at PreparedQuery.run (/app/node_modules/src/better-sqlite3/session.ts:132:20)
pangolin  |     at QueryPromise.resultCb (/app/node_modules/src/sqlite-core/session.ts:185:61)
pangolin  |     at QueryPromise.execute (/app/node_modules/src/sqlite-core/session.ts:31:15)
pangolin  |     at QueryPromise.then (/app/node_modules/src/query-promise.ts:31:15) {"code":"SQLITE_CONSTRAINT_FOREIGNKEY"}

The android app is stuck at 'Registering', but never ends.

In the CLI I see:

❯ pangolin up   
Starting up client...
INFO: 2026/01/26 17:17:40 Added IPv4 included route: {DestinationAddress:100....
INFO: 2026/01/26 17:17:40 Adding route to 100.96.128.0/24 via interface pangolin
INFO: 2026/01/26 17:17:40 Added route for remote subnet: 100.96.128.0/24
ERROR: 2026/01/26 17:17:40 wireguard: IPC error -22: failed to get peer by pu...
ERROR: 2026/01/26 17:17:40 Failed to add peer: failed to configure WireGuard ...
Status: Starting

This gets hanged here, waiting forever without failing.

<!-- gh-comment-id:3800133928 --> @r3nor commented on GitHub (Jan 26, 2026): @oschwartz10612 Yes, I have port 21820 open in firewall and docker compose. However, connection is still not working. See: ``` > sudo ufw status Status: active To Action From -- ------ ---- 22/tcp ALLOW Anywhere 80/tcp ALLOW Anywhere 443 ALLOW Anywhere 51820/udp ALLOW Anywhere 21820/udp ALLOW Anywhere 22/tcp (v6) ALLOW Anywhere (v6) 80/tcp (v6) ALLOW Anywhere (v6) 443 (v6) ALLOW Anywhere (v6) 51820/udp (v6) ALLOW Anywhere (v6) 21820/udp (v6) ALLOW Anywhere (v6) ``` And in my docker-compose.yml: ``` ... ports: - 51820:51820/udp - 21820:21820/udp - 443:443 # Port for traefik because of the network_mode - 80:8 # Port for traefik because of the network_mode ... ``` I still see this error on top of the container startup: ``` pangolin | 2026-01-26T15:13:01+00:00 [warn]: Error clearing expired sessions: FOREIGN KEY constraint failed pangolin | Stack: SqliteError: FOREIGN KEY constraint failed pangolin | at PreparedQuery.run (/app/node_modules/src/better-sqlite3/session.ts:132:20) pangolin | at QueryPromise.resultCb (/app/node_modules/src/sqlite-core/session.ts:185:61) pangolin | at QueryPromise.execute (/app/node_modules/src/sqlite-core/session.ts:31:15) pangolin | at QueryPromise.then (/app/node_modules/src/query-promise.ts:31:15) {"code":"SQLITE_CONSTRAINT_FOREIGNKEY"} ``` The android app is stuck at 'Registering', but never ends. In the CLI I see: ``` ❯ pangolin up Starting up client... INFO: 2026/01/26 17:17:40 Added IPv4 included route: {DestinationAddress:100.... INFO: 2026/01/26 17:17:40 Adding route to 100.96.128.0/24 via interface pangolin INFO: 2026/01/26 17:17:40 Added route for remote subnet: 100.96.128.0/24 ERROR: 2026/01/26 17:17:40 wireguard: IPC error -22: failed to get peer by pu... ERROR: 2026/01/26 17:17:40 Failed to add peer: failed to configure WireGuard ... Status: Starting ``` This gets hanged here, waiting forever without failing.
Author
Owner

@dordijeb commented on GitHub (Jan 26, 2026):

Hi,

I did not have port 21820 added. Even after I added it to ufw and docker-compose, the pangolin client was stuck at "registering...". What resolved the issue is restarting newt container at a site, after I have noticed these errors:

ERROR: 2026/01/26 17:35:27 Failed to connect: failed to get token: failed to request new token:

<!-- gh-comment-id:3800957457 --> @dordijeb commented on GitHub (Jan 26, 2026): Hi, I did not have port 21820 added. Even after I added it to ufw and docker-compose, the pangolin client was stuck at "registering...". What resolved the issue is restarting newt container at a site, after I have noticed these errors: `ERROR: 2026/01/26 17:35:27 Failed to connect: failed to get token: failed to request new token: `
Author
Owner

@mrprofessork commented on GitHub (Jan 26, 2026):

Hi,

I am experiencing similar issue with iOS app.

pangolin    | 2026-01-25T11:38:26+00:00 [info]: Establishing websocket connection
pangolin    | 2026-01-25T11:38:26+00:00 [info]: Client added to tracking - OLM ID: , Connection ID: , Total connections: 1
pangolin    | 2026-01-25T11:38:26+00:00 [info]: WebSocket connection established - OLM ID: 
pangolin    | 2026-01-25T11:38:26+00:00 [info]: Handling register olm message!
pangolin    | 2026-01-25T11:38:26+00:00 [info]: Public key mismatch. Updating public key and clearing session info...
pangolin    | 2026-01-25T11:38:26+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register
pangolin    | 2026-01-25T11:38:27+00:00 [info]: Handling register olm message!
pangolin    | 2026-01-25T11:38:27+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register
pangolin    | 2026-01-25T11:38:28+00:00 [info]: Handling register olm message!
pangolin    | 2026-01-25T11:38:28+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register
pangolin    | 2026-01-25T11:38:29+00:00 [info]: All connections removed for OLM ID: 
pangolin    | 2026-01-25T11:38:29+00:00 [info]: Client disconnected - OLM ID: 

After the first successful connection, it never goes past the stage of "registering...".

Happening on MacOs as well.

<!-- gh-comment-id:3801166400 --> @mrprofessork commented on GitHub (Jan 26, 2026): > Hi, > > I am experiencing similar issue with iOS app. > > ``` > pangolin | 2026-01-25T11:38:26+00:00 [info]: Establishing websocket connection > pangolin | 2026-01-25T11:38:26+00:00 [info]: Client added to tracking - OLM ID: , Connection ID: , Total connections: 1 > pangolin | 2026-01-25T11:38:26+00:00 [info]: WebSocket connection established - OLM ID: > pangolin | 2026-01-25T11:38:26+00:00 [info]: Handling register olm message! > pangolin | 2026-01-25T11:38:26+00:00 [info]: Public key mismatch. Updating public key and clearing session info... > pangolin | 2026-01-25T11:38:26+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register > pangolin | 2026-01-25T11:38:27+00:00 [info]: Handling register olm message! > pangolin | 2026-01-25T11:38:27+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register > pangolin | 2026-01-25T11:38:28+00:00 [info]: Handling register olm message! > pangolin | 2026-01-25T11:38:28+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register > pangolin | 2026-01-25T11:38:29+00:00 [info]: All connections removed for OLM ID: > pangolin | 2026-01-25T11:38:29+00:00 [info]: Client disconnected - OLM ID: > ``` > > After the first successful connection, it never goes past the stage of "registering...". Happening on MacOs as well.
Author
Owner

@mrprofessork commented on GitHub (Jan 26, 2026):

I have this happening on iOS and macOS. Deleting private resources seem to resolve it, but that defeats the purpose of this feature.

The associated log entries:

026-01-26T17:43:05+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register
2026-01-26T17:43:06+00:00 [info]: Handling register olm message!
<!-- gh-comment-id:3801185782 --> @mrprofessork commented on GitHub (Jan 26, 2026): I have this happening on iOS and macOS. Deleting private resources seem to resolve it, but that defeats the purpose of this feature. The associated log entries: ``` 026-01-26T17:43:05+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register 2026-01-26T17:43:06+00:00 [info]: Handling register olm message! ```
Author
Owner

@mrprofessork commented on GitHub (Jan 26, 2026):

Everyone please confirm you have UDP port 21820 open on your VPS and in the docker compose. If you have upgraded from older versions of the stack this was not the default. Also please make sure you are on the latest version of gerbil 1.3.0.

If all of these things are confirmed please report back!

These were all satisfied in my setup.

<!-- gh-comment-id:3801371904 --> @mrprofessork commented on GitHub (Jan 26, 2026): > Everyone please confirm you have UDP port 21820 open on your VPS and in the docker compose. If you have upgraded from older versions of the stack this was not the default. Also please make sure you are on the latest version of gerbil 1.3.0. > > If all of these things are confirmed please report back! These were all satisfied in my setup.
Author
Owner

@spiezmaestro commented on GitHub (Jan 26, 2026):

I was experiencing the same thing (status "registering") and did not have port 21820/udp open. After opening it, the status gets to connected (both on the Android client as well as in the Pangolin admin console). However the private resource (CIDR of a network through a site) does not seem to be respected. I can't connect to anything in that LAN. In the Pangolin docker logs I can see the following error message:

2026-01-26T20:49:29+00:00 [warn]: Newt <identifier> does not have Docker socket access

Have not been able to find anything on this in other issues.

<!-- gh-comment-id:3801722485 --> @spiezmaestro commented on GitHub (Jan 26, 2026): I was experiencing the same thing (status "registering") and did not have port 21820/udp open. After opening it, the status gets to connected (both on the Android client as well as in the Pangolin admin console). However the private resource (CIDR of a network through a site) does not seem to be respected. I can't connect to anything in that LAN. In the Pangolin docker logs I can see the following error message: `2026-01-26T20:49:29+00:00 [warn]: Newt <identifier> does not have Docker socket access` Have not been able to find anything on this in other issues.
Author
Owner

@mrprofessork commented on GitHub (Jan 26, 2026):

I was experiencing the same thing (status "registering") and did not have port 21820/udp open. After opening it, the status gets to connected (both on the Android client as well as in the Pangolin admin console). However the private resource (CIDR of a network through a site) does not seem to be respected. I can't connect to anything in that LAN. In the Pangolin docker logs I can see the following error message:

2026-01-26T20:49:29+00:00 [warn]: Newt <identifier> does not have Docker socket access

Have not been able to find anything on this in other issues.

Maybe add this to your docker compose for newt, (assuming you run newt with docker compose);
services:
newt:
image: fosrl/newt
container_name: newt
restart: unless-stopped
environment:
- PANGOLIN_ENDPOINT=https://subdomain.domain.com
- NEWT_ID=ID
- NEWT_SECRET=secret
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro

that volumes section is what you can try. Also make sure you enable docker blueprint on the site settings in the dashboard.

<!-- gh-comment-id:3801745658 --> @mrprofessork commented on GitHub (Jan 26, 2026): > I was experiencing the same thing (status "registering") and did not have port 21820/udp open. After opening it, the status gets to connected (both on the Android client as well as in the Pangolin admin console). However the private resource (CIDR of a network through a site) does not seem to be respected. I can't connect to anything in that LAN. In the Pangolin docker logs I can see the following error message: > > `2026-01-26T20:49:29+00:00 [warn]: Newt <identifier> does not have Docker socket access` > > Have not been able to find anything on this in other issues. Maybe add this to your docker compose for newt, (assuming you run newt with docker compose); services: newt: image: fosrl/newt container_name: newt restart: unless-stopped environment: - PANGOLIN_ENDPOINT=https://subdomain.domain.com - NEWT_ID=ID - NEWT_SECRET=secret **volumes: - /var/run/docker.sock:/var/run/docker.sock:ro** that volumes section is what you can try. Also make sure you enable docker blueprint on the site settings in the dashboard.
Author
Owner

@lbarraga commented on GitHub (Jan 27, 2026):

I too seem to have this problem. My vpn client (linux) cant connect to the server when a private resource is registered.

no private resource

# client
$ sudo pangolin up
...
Client interface created successfully

server logs:

2026-01-27T17:48:56+00:00 [info]: Establishing websocket connection
2026-01-27T17:48:56+00:00 [info]: Client added to tracking - OLM ID: clpqie5zuuh4td2, Connection ID: <id>, Total connections: 1
2026-01-27T17:48:56+00:00 [info]: WebSocket connection established - OLM ID: <id>
2026-01-27T17:48:57+00:00 [info]: Handling register olm message!
2026-01-27T17:48:57+00:00 [info]: Public key mismatch. Updating public key and clearing session info...

adding a private resource

server logs

2026-01-27T17:51:16+00:00 [warn]: Site publicKey not set for site 1 so cannot add peers to clients
2026-01-27T17:51:16+00:00 [info]: Adding 12 subnet proxy targets for siteResource 3
2026-01-27T17:51:16+00:00 [info]: Created site resource 3 for site 1

Try to connect again on client:

# client
$ sudo pangolin up
Starting up client...
INFO: 2026/01/27 18:53:33 websocket: SendMessageInterval timed out after 10 a...
Status: Starting
(hangs)

server logs:

2026-01-27T17:53:23+00:00 [info]: Establishing websocket connection
2026-01-27T17:53:23+00:00 [info]: Client added to tracking - OLM ID: clpqie5zuuh4td2, Connection ID: <id>, Total connections: 1
2026-01-27T17:53:23+00:00 [info]: WebSocket connection established - OLM ID: <id>
2026-01-27T17:53:23+00:00 [info]: Handling register olm message!
2026-01-27T17:53:23+00:00 [info]: Public key mismatch. Updating public key and clearing session info...
2026-01-27T17:53:23+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register
2026-01-27T17:53:24+00:00 [info]: Handling register olm message!
2026-01-27T17:53:24+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register

...

2026-01-27T17:53:32+00:00 [info]: Handling register olm message!
2026-01-27T17:53:32+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register

versions

pangolin 1.15.1
gerbil 1.3.0
traefik: 3.3.3
pangolin cli: 0.3.0
newt on site: 1.9.0

<!-- gh-comment-id:3806671874 --> @lbarraga commented on GitHub (Jan 27, 2026): I too seem to have this problem. My vpn client (linux) cant connect to the server when a private resource is registered. ### no private resource ```bash # client $ sudo pangolin up ... Client interface created successfully ``` server logs: ```bash 2026-01-27T17:48:56+00:00 [info]: Establishing websocket connection 2026-01-27T17:48:56+00:00 [info]: Client added to tracking - OLM ID: clpqie5zuuh4td2, Connection ID: <id>, Total connections: 1 2026-01-27T17:48:56+00:00 [info]: WebSocket connection established - OLM ID: <id> 2026-01-27T17:48:57+00:00 [info]: Handling register olm message! 2026-01-27T17:48:57+00:00 [info]: Public key mismatch. Updating public key and clearing session info... ``` ### adding a private resource server logs ```bash 2026-01-27T17:51:16+00:00 [warn]: Site publicKey not set for site 1 so cannot add peers to clients 2026-01-27T17:51:16+00:00 [info]: Adding 12 subnet proxy targets for siteResource 3 2026-01-27T17:51:16+00:00 [info]: Created site resource 3 for site 1 ``` Try to connect again on client: ```bash # client $ sudo pangolin up Starting up client... INFO: 2026/01/27 18:53:33 websocket: SendMessageInterval timed out after 10 a... Status: Starting (hangs) ``` server logs: ```bash 2026-01-27T17:53:23+00:00 [info]: Establishing websocket connection 2026-01-27T17:53:23+00:00 [info]: Client added to tracking - OLM ID: clpqie5zuuh4td2, Connection ID: <id>, Total connections: 1 2026-01-27T17:53:23+00:00 [info]: WebSocket connection established - OLM ID: <id> 2026-01-27T17:53:23+00:00 [info]: Handling register olm message! 2026-01-27T17:53:23+00:00 [info]: Public key mismatch. Updating public key and clearing session info... 2026-01-27T17:53:23+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register 2026-01-27T17:53:24+00:00 [info]: Handling register olm message! 2026-01-27T17:53:24+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register ... 2026-01-27T17:53:32+00:00 [info]: Handling register olm message! 2026-01-27T17:53:32+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register ``` ### versions pangolin 1.15.1 gerbil 1.3.0 traefik: 3.3.3 pangolin cli: 0.3.0 newt on site: 1.9.0
Author
Owner

@mrprofessork commented on GitHub (Jan 27, 2026):

Restarting the newt container eventually resolved this issue for me, I expect restart newt service if you didn't use docker might help as well.

<!-- gh-comment-id:3806872528 --> @mrprofessork commented on GitHub (Jan 27, 2026): Restarting the newt container eventually resolved this issue for me, I expect restart newt service if you didn't use docker might help as well.
Author
Owner

@spiezmaestro commented on GitHub (Jan 27, 2026):

Indeed restarting the newt client service (no docker) solved it for me. Can now connect to the LAN behind the site configured in the private resource. Thx for the info.

<!-- gh-comment-id:3807618554 --> @spiezmaestro commented on GitHub (Jan 27, 2026): Indeed restarting the newt client service (no docker) solved it for me. Can now connect to the LAN behind the site configured in the private resource. Thx for the info.
Author
Owner

@lbarraga commented on GitHub (Jan 27, 2026):

Reinstalling pangolin worked for me. I suspect I jumped too much versions when upgrading and something broke.

<!-- gh-comment-id:3807837310 --> @lbarraga commented on GitHub (Jan 27, 2026): Reinstalling pangolin worked for me. I suspect I jumped too much versions when upgrading and something broke.
Author
Owner

@engels0n commented on GitHub (Jan 29, 2026):

problem on my site still exists. log is green, but I am not connected to my site. still showing disconnected:

log:

2026-01-29T06:51:26+00:00 [info]: WebSocket connection established - OLM ID: xxxx
2026-01-29T06:51:27+00:00 [info]: Handling register olm message!
2026-01-29T06:51:27+00:00 [info]: Public key mismatch. Updating public key and clearing session info...
2026-01-29T06:51:27+00:00 [info]: Public key mismatch. Deleting old peer from site 1...
2026-01-29T06:51:27+00:00 [info]: Deleted peer yyyyyy from newt xxxxx
2026-01-29T06:51:27+00:00 [info]: Adding peer aaaaaa to site 1 with endpoint xxxxxx
2026-01-29T06:51:27+00:00 [info]: Added peer aaaaaa to newt xxxxx

But my iPhone stays at "Registering" :/

<!-- gh-comment-id:3815832014 --> @engels0n commented on GitHub (Jan 29, 2026): problem on my site still exists. log is green, but I am not connected to my site. still showing disconnected: log: ``` 2026-01-29T06:51:26+00:00 [info]: WebSocket connection established - OLM ID: xxxx 2026-01-29T06:51:27+00:00 [info]: Handling register olm message! 2026-01-29T06:51:27+00:00 [info]: Public key mismatch. Updating public key and clearing session info... 2026-01-29T06:51:27+00:00 [info]: Public key mismatch. Deleting old peer from site 1... 2026-01-29T06:51:27+00:00 [info]: Deleted peer yyyyyy from newt xxxxx 2026-01-29T06:51:27+00:00 [info]: Adding peer aaaaaa to site 1 with endpoint xxxxxx 2026-01-29T06:51:27+00:00 [info]: Added peer aaaaaa to newt xxxxx ``` But my iPhone stays at "Registering" :/
Author
Owner

@jack9603301 commented on GitHub (Jan 29, 2026):

I have this happening on iOS and macOS. Deleting private resources seem to resolve it, but that defeats the purpose of this feature.

The associated log entries:

026-01-26T17:43:05+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register
2026-01-26T17:43:06+00:00 [info]: Handling register olm message!

me too

<!-- gh-comment-id:3820025296 --> @jack9603301 commented on GitHub (Jan 29, 2026): > I have this happening on iOS and macOS. Deleting private resources seem to resolve it, but that defeats the purpose of this feature. > > The associated log entries: > > ``` > 026-01-26T17:43:05+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register > 2026-01-26T17:43:06+00:00 [info]: Handling register olm message! > ``` me too
Author
Owner

@singularity0821 commented on GitHub (Jan 30, 2026):

I'm having the same issue and the same log messages when trying to connect from Android.

The ports are open and restarting Newt did not solve the issue for me.

<!-- gh-comment-id:3822170283 --> @singularity0821 commented on GitHub (Jan 30, 2026): I'm having the same issue and the same log messages when trying to connect from Android. The ports are open and restarting Newt did not solve the issue for me.
Author
Owner

@jack9603301 commented on GitHub (Jan 30, 2026):

I think this implementation has a fatal bug, because its error is bizarre, and it seems to be widely encountered by many people. I've moved to wireguard, using wg-easy, and it works perfectly.

<!-- gh-comment-id:3824167433 --> @jack9603301 commented on GitHub (Jan 30, 2026): I think this implementation has a fatal bug, because its error is bizarre, and it seems to be widely encountered by many people. I've moved to wireguard, using wg-easy, and it works perfectly.
Author
Owner

@engels0n commented on GitHub (Feb 6, 2026):

I had hoped that the new update 1.15.2 might bring an improvement. Unfortunately, the problem still persists.
@oschwartz10612 can we expect a fix in the near future? :)

<!-- gh-comment-id:3859716646 --> @engels0n commented on GitHub (Feb 6, 2026): I had hoped that the new update 1.15.2 might bring an improvement. Unfortunately, the problem still persists. @oschwartz10612 can we expect a fix in the near future? :)
Author
Owner

@jack9603301 commented on GitHub (Feb 6, 2026):

The certificate request of pangolin always fails, but I want to process it in the reverse proxy backend. If my proxy processes the certificate file, I prefer pangolin to support HTTP mode instead of HTTPS. Should the official website document provide the document on how to cancel the HTTPS setting?

Because pangolin's certificate is useless and its request will be in a failed state, I would like to use the nginx secondary reverse proxy to control the entire topology more flexibly.

<!-- gh-comment-id:3859909407 --> @jack9603301 commented on GitHub (Feb 6, 2026): The certificate request of pangolin always fails, but I want to process it in the reverse proxy backend. If my proxy processes the certificate file, I prefer pangolin to support HTTP mode instead of HTTPS. Should the official website document provide the document on how to cancel the HTTPS setting? Because pangolin's certificate is useless and its request will be in a failed state, I would like to use the nginx secondary reverse proxy to control the entire topology more flexibly.
Author
Owner

@engels0n commented on GitHub (Feb 12, 2026):

Updated to new version:


`2026-02-12T13:51:01+00:00 [info]: WebSocket connection established - OLM ID: xxxxx

2026-02-12T13:51:02+00:00 [info]: Handling register olm message!

2026-02-12T13:51:02+00:00 [info]: Public key mismatch. Updating public key and clearing session info...

2026-02-12T13:51:02+00:00 [info]: Public key mismatch. Deleting old peer from site 1...

2026-02-12T13:51:02+00:00 [info]: Deleted peer xxxxxxx from newt yyyyy

2026-02-12T13:51:02+00:00 [info]: Adding peer xxxxxx= to site 1 with endpoint x.a.b.c:4127

2026-02-12T13:51:02+00:00 [info]: Added peer xxxxxx= to newt yyyyyy`

iOS App states "registering" but nothing happens ...
Site is still disconnected.

:/

<!-- gh-comment-id:3891093616 --> @engels0n commented on GitHub (Feb 12, 2026): Updated to new version: ``` `2026-02-12T13:51:01+00:00 [info]: WebSocket connection established - OLM ID: xxxxx 2026-02-12T13:51:02+00:00 [info]: Handling register olm message! 2026-02-12T13:51:02+00:00 [info]: Public key mismatch. Updating public key and clearing session info... 2026-02-12T13:51:02+00:00 [info]: Public key mismatch. Deleting old peer from site 1... 2026-02-12T13:51:02+00:00 [info]: Deleted peer xxxxxxx from newt yyyyy 2026-02-12T13:51:02+00:00 [info]: Adding peer xxxxxx= to site 1 with endpoint x.a.b.c:4127 2026-02-12T13:51:02+00:00 [info]: Added peer xxxxxx= to newt yyyyyy` ``` iOS App states "registering" but nothing happens ... Site is still disconnected. :/
Author
Owner

@jack9603301 commented on GitHub (Feb 12, 2026):

Are UDP traffic disrupted due to firewall policies in your country or region, or in your organization and network environment? Me too, due to Chinese GFW, I can't seem to get a good connection until I move my main server to China.

<!-- gh-comment-id:3892141104 --> @jack9603301 commented on GitHub (Feb 12, 2026): Are UDP traffic disrupted due to firewall policies in your country or region, or in your organization and network environment? Me too, due to Chinese GFW, I can't seem to get a good connection until I move my main server to China.
Author
Owner

@jack9603301 commented on GitHub (Feb 12, 2026):

Are UDP traffic disrupted due to firewall policies in your country or region, or in your organization and network environment? Me too, due to Chinese GFW, I can't seem to get a good connection until I move my main server to China.

<!-- gh-comment-id:3892141173 --> @jack9603301 commented on GitHub (Feb 12, 2026): Are UDP traffic disrupted due to firewall policies in your country or region, or in your organization and network environment? Me too, due to Chinese GFW, I can't seem to get a good connection until I move my main server to China.
Author
Owner

@oschwartz10612 commented on GitHub (Feb 12, 2026):

Would you be able to initiate the connection and do a tcp dump on the
server to see if the UDP traffic is making it?

tcpdump -i any -n udp port 21820

<!-- gh-comment-id:3892834199 --> @oschwartz10612 commented on GitHub (Feb 12, 2026): Would you be able to initiate the connection and do a tcp dump on the server to see if the UDP traffic is making it? tcpdump -i any -n udp port 21820
Author
Owner

@engels0n commented on GitHub (Feb 13, 2026):

@oschwartz10612
Sure. here it is:

IP address redacted
root@my-vps:~# tcpdump -i any -n udp port 21820
tcpdump: WARNING: any: That device doesn't support promiscuous mode
(Promiscuous mode not supported on the "any" device)
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes
07:20:39.305897 ens6  In  IP aa.bb.cc.dd.6895 > ww.xx.yy.zz.21820: UDP, length 308
07:20:39.305948 br-e256a27b0ca9 Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308
07:20:39.305953 vethfc23dba Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308
07:20:40.325516 ens6  In  IP aa.bb.cc.dd.6895 > ww.xx.yy.zz.21820: UDP, length 308
07:20:40.325542 br-e256a27b0ca9 Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308
07:20:40.325547 vethfc23dba Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308
07:20:42.318496 ens6  In  IP aa.bb.cc.dd.6895 > ww.xx.yy.zz.21820: UDP, length 308
07:20:42.318510 br-e256a27b0ca9 Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308
07:20:42.318512 vethfc23dba Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308
07:20:46.347506 ens6  In  IP aa.bb.cc.dd.6895 > ww.xx.yy.zz.21820: UDP, length 308
07:20:46.347536 br-e256a27b0ca9 Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308
07:20:46.347542 vethfc23dba Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308
07:20:54.343501 ens6  In  IP aa.bb.cc.dd.6895 > ww.xx.yy.zz.21820: UDP, length 308
07:20:54.343511 br-e256a27b0ca9 Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308
07:20:54.343513 vethfc23dba Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308
^C
15 packets captured
18 packets received by filter
0 packets dropped by kernel

I am wondering why there is a dot instead of a colon before the port....

Hope it helps :)

<!-- gh-comment-id:3895341750 --> @engels0n commented on GitHub (Feb 13, 2026): @oschwartz10612 Sure. here it is: ``` IP address redacted root@my-vps:~# tcpdump -i any -n udp port 21820 tcpdump: WARNING: any: That device doesn't support promiscuous mode (Promiscuous mode not supported on the "any" device) tcpdump: verbose output suppressed, use -v[v]... for full protocol decode listening on any, link-type LINUX_SLL2 (Linux cooked v2), snapshot length 262144 bytes 07:20:39.305897 ens6 In IP aa.bb.cc.dd.6895 > ww.xx.yy.zz.21820: UDP, length 308 07:20:39.305948 br-e256a27b0ca9 Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308 07:20:39.305953 vethfc23dba Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308 07:20:40.325516 ens6 In IP aa.bb.cc.dd.6895 > ww.xx.yy.zz.21820: UDP, length 308 07:20:40.325542 br-e256a27b0ca9 Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308 07:20:40.325547 vethfc23dba Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308 07:20:42.318496 ens6 In IP aa.bb.cc.dd.6895 > ww.xx.yy.zz.21820: UDP, length 308 07:20:42.318510 br-e256a27b0ca9 Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308 07:20:42.318512 vethfc23dba Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308 07:20:46.347506 ens6 In IP aa.bb.cc.dd.6895 > ww.xx.yy.zz.21820: UDP, length 308 07:20:46.347536 br-e256a27b0ca9 Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308 07:20:46.347542 vethfc23dba Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308 07:20:54.343501 ens6 In IP aa.bb.cc.dd.6895 > ww.xx.yy.zz.21820: UDP, length 308 07:20:54.343511 br-e256a27b0ca9 Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308 07:20:54.343513 vethfc23dba Out IP aa.bb.cc.dd.6895 > 172.18.0.3.21820: UDP, length 308 ^C 15 packets captured 18 packets received by filter 0 packets dropped by kernel ``` I am wondering why there is a dot instead of a colon before the port.... Hope it helps :)
Author
Owner

@singularity0821 commented on GitHub (Feb 14, 2026):

I've just noticed that I can get a successful connection if I'm in my home WiFi.

When I then turn off the WiFi, Pangolin briefly loses its connection (as expected) but then it successfully reconnects and I can access my private resources.

<!-- gh-comment-id:3901276986 --> @singularity0821 commented on GitHub (Feb 14, 2026): I've just noticed that I can get a successful connection if I'm in my home WiFi. When I then turn off the WiFi, Pangolin briefly loses its connection (as expected) but then it successfully reconnects and I can access my private resources.
Author
Owner

@BombusAlpinus commented on GitHub (Feb 17, 2026):

in my case this happens as soon as i create a private ressource for an user and connecting through the latest android client:

pangolin  | 2026-02-17T11:56:58+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register
pangolin  | 2026-02-17T11:56:59+00:00 [info]: Handling register olm message!
pangolin  | 2026-02-17T11:56:59+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register
pangolin  | 2026-02-17T11:57:00+00:00 [info]: Handling register olm message!
pangolin  | 2026-02-17T11:57:00+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register

after deleting the private ressource the connection works again.

<!-- gh-comment-id:3914331974 --> @BombusAlpinus commented on GitHub (Feb 17, 2026): in my case this happens as soon as i create a private ressource for an user and connecting through the latest android client: ``` pangolin | 2026-02-17T11:56:58+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register pangolin | 2026-02-17T11:56:59+00:00 [info]: Handling register olm message! pangolin | 2026-02-17T11:56:59+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register pangolin | 2026-02-17T11:57:00+00:00 [info]: Handling register olm message! pangolin | 2026-02-17T11:57:00+00:00 [warn]: Client last hole punch is too old and we have sites to send; skipping this register ``` after deleting the private ressource the connection works again.
Author
Owner

@github-actions[bot] commented on GitHub (Mar 4, 2026):

This issue has been automatically marked as stale due to 14 days of inactivity. It will be closed in 14 days if no further activity occurs.

<!-- gh-comment-id:3994449058 --> @github-actions[bot] commented on GitHub (Mar 4, 2026): This issue has been automatically marked as stale due to 14 days of inactivity. It will be closed in 14 days if no further activity occurs.
Author
Owner

@AndreGilerson commented on GitHub (Mar 6, 2026):

I have the exact same problems, and cannot establish a tunnel with pangolin-cli anymore. Therefore i would like to revive the issue.

<!-- gh-comment-id:4009716886 --> @AndreGilerson commented on GitHub (Mar 6, 2026): I have the exact same problems, and cannot establish a tunnel with pangolin-cli anymore. Therefore i would like to revive the issue.
Author
Owner

@johnmacfadyen commented on GitHub (Mar 16, 2026):

I've just hit this today as well. Updating all my newt connectors now, hopefully that will fix it.

<!-- gh-comment-id:4064480747 --> @johnmacfadyen commented on GitHub (Mar 16, 2026): I've just hit this today as well. Updating all my newt connectors now, hopefully that will fix it.
Author
Owner

@theorician commented on GitHub (Mar 21, 2026):

I have the same issue - all versions are up to date on latest. MacOS does not connect - however Android does - when a private resource exists. Ports are open and confirmed working.

<!-- gh-comment-id:4104126507 --> @theorician commented on GitHub (Mar 21, 2026): I have the same issue - all versions are up to date on latest. MacOS does not connect - however Android does - when a private resource exists. Ports are open and confirmed working.
Author
Owner

@svandive commented on GitHub (Mar 24, 2026):

My issue is related but might not be the same. I'm able to connect using Apple-based clients, but only if I have the DNS in the client preferences configured to the default 1.1.1.1. If I try and configure an internal DNS server, then the logs show exactly what OP is seeing. Connecting with the DNS configured to any externally accessible DNS, and the client connects. I have the internal DNS server configured as a Private Resource, and can verify connectivity between the DNS server and Pangolin. All public services are working without issue.

<!-- gh-comment-id:4121960556 --> @svandive commented on GitHub (Mar 24, 2026): My issue is related but might not be the same. I'm able to connect using Apple-based clients, but only if I have the DNS in the client preferences configured to the default 1.1.1.1. If I try and configure an internal DNS server, then the logs show exactly what OP is seeing. Connecting with the DNS configured to any externally accessible DNS, and the client connects. I have the internal DNS server configured as a Private Resource, and can verify connectivity between the DNS server and Pangolin. All public services are working without issue.
Author
Owner

@Viable8237 commented on GitHub (Mar 25, 2026):

Just ran into this issue as well on iOS. The Pangolin app was stuck at "Registering". Restarting neither the Pangolin server nor the Newt client helped. Surprisingly the connection was successfully established when the phone was connected to a home WiFi network where the Newt client runs. It however worked neither on mobile connection (which did work in the past) nor when connected to a different hotspot.

The site status says Online in the Pangolin dashboard and Newt's logs say Client connectivity setup. Ready to accept connections from clients!. I can see the Client last hole punch is too old and we have sites to send; skipping this register message in logs when trying to connect so I don't think the phone's mobile IP address is banned.

Here's a JSON log from the iOS app during a connection attempt (the never-ending "Registering" phase):

{
"agent": "Pangolin iOS",
"connected": true,
"networkSettings": {

},
"orgId": "myorg",
"registered": false,
"terminated": false,
"version": "0.6.2"
}

Everything should be running on latest version.

<!-- gh-comment-id:4129003820 --> @Viable8237 commented on GitHub (Mar 25, 2026): Just ran into this issue as well on iOS. The Pangolin app was stuck at "Registering". Restarting neither the Pangolin server nor the Newt client helped. Surprisingly the connection was successfully established when the phone was connected to a home WiFi network where the Newt client runs. It however worked neither on mobile connection (which did work in the past) nor when connected to a different hotspot. The site status says `Online` in the Pangolin dashboard and Newt's logs say `Client connectivity setup. Ready to accept connections from clients!`. I can see the `Client last hole punch is too old and we have sites to send; skipping this register` message in logs when trying to connect so I don't think the phone's mobile IP address is banned. Here's a JSON log from the iOS app during a connection attempt (the never-ending "Registering" phase): ``` { "agent": "Pangolin iOS", "connected": true, "networkSettings": { }, "orgId": "myorg", "registered": false, "terminated": false, "version": "0.6.2" } ``` Everything should be running on latest version.
Author
Owner

@oschwartz10612 commented on GitHub (Mar 26, 2026):

This should resolve the issue. We are pushing an update now through the app store and macos release will be available shortly and we are also pushing a windows update. Please let me know if it does not fix the issue!

https://github.com/fosrl/apple/pull/30
https://github.com/fosrl/windows/pull/34

Lets reopen if not! Also make sure to take a look at this for future travelers: https://github.com/orgs/fosrl/discussions/2384

<!-- gh-comment-id:4131613715 --> @oschwartz10612 commented on GitHub (Mar 26, 2026): This should resolve the issue. We are pushing an update now through the app store and macos release will be available shortly and we are also pushing a windows update. Please let me know if it does not fix the issue! https://github.com/fosrl/apple/pull/30 https://github.com/fosrl/windows/pull/34 Lets reopen if not! Also make sure to take a look at this for future travelers: https://github.com/orgs/fosrl/discussions/2384
Author
Owner

@svandive commented on GitHub (Mar 27, 2026):

I can confirm at least for me, the updated iOS version of the Client has resolved the issue!!

Thank You very much!!!

<!-- gh-comment-id:4142440093 --> @svandive commented on GitHub (Mar 27, 2026): I can confirm at least for me, the updated iOS version of the Client has resolved the issue!! Thank You very much!!!
Author
Owner

@BombusAlpinus commented on GitHub (Mar 27, 2026):

sorry, doesnt work for me. Android Client 0.1.10, pangolin version 1.16.2
as soon as i define a private ressource the connection from my mobile doesnt work properly. see my older post

<!-- gh-comment-id:4143900210 --> @BombusAlpinus commented on GitHub (Mar 27, 2026): sorry, doesnt work for me. Android Client 0.1.10, pangolin version 1.16.2 as soon as i define a private ressource the connection from my mobile doesnt work properly. see my older [post](https://github.com/fosrl/pangolin/issues/2318#issuecomment-3914331974)
Author
Owner

@LaurenceJJones commented on GitHub (Mar 27, 2026):

sorry, doesnt work for me. Android Client 0.1.10, pangolin version 1.16.2 as soon as i define a private ressource the connection from my mobile doesnt work properly. see my older post

Could you try restarting the Newt site and then attempt to connect?

<!-- gh-comment-id:4144034946 --> @LaurenceJJones commented on GitHub (Mar 27, 2026): > sorry, doesnt work for me. Android Client 0.1.10, pangolin version 1.16.2 as soon as i define a private ressource the connection from my mobile doesnt work properly. see my older [post](https://github.com/fosrl/pangolin/issues/2318#issuecomment-3914331974) Could you try restarting the Newt site and then attempt to connect?
Author
Owner

@BombusAlpinus commented on GitHub (Mar 27, 2026):

sorry, doesnt work for me. Android Client 0.1.10, pangolin version 1.16.2 as soon as i define a private ressource the connection from my mobile doesnt work properly. see my older post

Could you try restarting the Newt site and then attempt to connect?

restarted newt docker container (1.10.3). no change...

<!-- gh-comment-id:4144144737 --> @BombusAlpinus commented on GitHub (Mar 27, 2026): > > sorry, doesnt work for me. Android Client 0.1.10, pangolin version 1.16.2 as soon as i define a private ressource the connection from my mobile doesnt work properly. see my older [post](https://github.com/fosrl/pangolin/issues/2318#issuecomment-3914331974) > > Could you try restarting the Newt site and then attempt to connect? restarted newt docker container (1.10.3). no change...
Author
Owner

@oschwartz10612 commented on GitHub (Mar 27, 2026):

Are you good with everything in this post?
https://github.com/orgs/fosrl/discussions/2384

Its very important that port is open, in the docker compose, and gerbil
is updated.

<!-- gh-comment-id:4144557794 --> @oschwartz10612 commented on GitHub (Mar 27, 2026): Are you good with everything in this post? https://github.com/orgs/fosrl/discussions/2384 Its very important that port is open, in the docker compose, and gerbil is updated.
Author
Owner

@BombusAlpinus commented on GitHub (Mar 29, 2026):

port is open and service is listening:


udp        0      0 0.0.0.0:21820           0.0.0.0:*                           2328184/docker-prox 
udp6       0      0 :::21820                :::*                                2328189/docker-prox 
  gerbil:
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    command:
      - --reachableAt=http://gerbil:3004
      - --generateAndSaveKeyTo=/var/config/key
      - --remoteConfig=http://pangolin:3001/api/v1/
    container_name: gerbil
    depends_on:
      pangolin:
        condition: service_healthy
    image: docker.io/fosrl/gerbil:1.3.0
    ports:
      - 51820:51820/udp
      - 21820:21820/udp
      - 443:443
      - 80:80
    restart: unless-stopped
    volumes:
      - ./config/:/var/config
<!-- gh-comment-id:4149692186 --> @BombusAlpinus commented on GitHub (Mar 29, 2026): port is open and service is listening: ``` udp 0 0 0.0.0.0:21820 0.0.0.0:* 2328184/docker-prox udp6 0 0 :::21820 :::* 2328189/docker-prox ``` ``` gerbil: cap_add: - NET_ADMIN - SYS_MODULE command: - --reachableAt=http://gerbil:3004 - --generateAndSaveKeyTo=/var/config/key - --remoteConfig=http://pangolin:3001/api/v1/ container_name: gerbil depends_on: pangolin: condition: service_healthy image: docker.io/fosrl/gerbil:1.3.0 ports: - 51820:51820/udp - 21820:21820/udp - 443:443 - 80:80 restart: unless-stopped volumes: - ./config/:/var/config ```
Author
Owner

@valki2 commented on GitHub (Apr 1, 2026):

hit the same problem:

  • ports 51820 ans 21850 udp are open
  • client windows 0.8.1 and 0.1.10 android wont connect
  • newt clients / locations seem to be connected

pangolin log says:
Client last hole punch is too old and we have sites to send; skipping this register

client log says:

2026-04-01 10:06:50.000 [INFO] Tunnel: StartTunnel called
2026-04-01 10:06:50.000 [INFO] Tunnel: Starting tunnel with config
2026-04-01 10:06:50.000 [INFO] Tunnel state changed: registering
2026-04-01 10:06:50.000 [INFO] Pangolin logging initialized - log file: C:\ProgramData\Pangolin\logs\pangolin.log, log level: info
2026-04-01 10:06:50.000 [INFO] Pangolin version 0.8.1 starting
2026-04-01 10:06:50.000 [INFO] Starting as tunnel service with config: C:\ProgramData\Pangolin\Tunnels\olm.json
2026-04-01 10:06:50.000 [INFO] Tunnel service: Starting with config
2026-04-01 10:06:50.000 [INFO] Tunnel service: Running as Windows service
2026-04-01 10:06:50.000 [INFO] Tunnel service: Service starting
2026-04-01 10:06:50.000 [INFO] Starting status polling
2026-04-01 10:06:50.000 [INFO] Started OLM status polling (every 1 second)
2026-04-01 10:06:50.000 [INFO] Tunnel state changed: registering
2026-04-01 10:06:51.000 [ERROR] Failed to poll OLM status: failed to connect to OLM: Get "http://localhost/status": open \.\pipe\pangolin-olm: The system cannot find the file specified.
2026-04-01 10:06:51.000 [INFO] Starting HTTP server on socket \.\pipe\pangolin-olm
2026-04-01 10:06:51.000 [INFO] Starting OLM tunnel...
2026-04-01 10:06:51.000 [INFO] Created shared UDP socket on port 56759 (refcount: 2)
2026-04-01 10:06:51.000 [INFO] Starting hole punch for 1 exit nodes
2026-04-01 10:06:51.000 [INFO] Websocket Connected
2026-04-01 10:06:52.000 [INFO] Tunnel: OLM registered

Already deinstalled / cleaned / reinstalled latest clients.

hint:
And - of course - it has something todo with dns ("its always dns"):

It works when I dont use adguard like no adguard protected wifi but the 5g connection on android.

(situation: local wifi forces dns to adguard and blocks 53/udp outbound to prevent apps ignoring the DNS setting via dhcp)

<!-- gh-comment-id:4168316557 --> @valki2 commented on GitHub (Apr 1, 2026): hit the same problem: - ports 51820 ans 21850 udp are open - client windows 0.8.1 and 0.1.10 android wont connect - newt clients / locations seem to be connected pangolin log says: Client last hole punch is too old and we have sites to send; skipping this register client log says: 2026-04-01 10:06:50.000 [INFO] Tunnel: StartTunnel called 2026-04-01 10:06:50.000 [INFO] Tunnel: Starting tunnel with config 2026-04-01 10:06:50.000 [INFO] Tunnel state changed: registering 2026-04-01 10:06:50.000 [INFO] Pangolin logging initialized - log file: C:\ProgramData\Pangolin\logs\pangolin.log, log level: info 2026-04-01 10:06:50.000 [INFO] Pangolin version 0.8.1 starting 2026-04-01 10:06:50.000 [INFO] Starting as tunnel service with config: C:\ProgramData\Pangolin\Tunnels\olm.json 2026-04-01 10:06:50.000 [INFO] Tunnel service: Starting with config 2026-04-01 10:06:50.000 [INFO] Tunnel service: Running as Windows service 2026-04-01 10:06:50.000 [INFO] Tunnel service: Service starting 2026-04-01 10:06:50.000 [INFO] Starting status polling 2026-04-01 10:06:50.000 [INFO] Started OLM status polling (every 1 second) 2026-04-01 10:06:50.000 [INFO] Tunnel state changed: registering 2026-04-01 10:06:51.000 [ERROR] Failed to poll OLM status: failed to connect to OLM: Get "http://localhost/status": open \\.\pipe\pangolin-olm: The system cannot find the file specified. 2026-04-01 10:06:51.000 [INFO] Starting HTTP server on socket \\.\pipe\pangolin-olm 2026-04-01 10:06:51.000 [INFO] Starting OLM tunnel... 2026-04-01 10:06:51.000 [INFO] Created shared UDP socket on port 56759 (refcount: 2) 2026-04-01 10:06:51.000 [INFO] Starting hole punch for 1 exit nodes 2026-04-01 10:06:51.000 [INFO] Websocket Connected 2026-04-01 10:06:52.000 [INFO] Tunnel: OLM registered Already deinstalled / cleaned / reinstalled latest clients. hint: And - of course - it has something todo with dns ("its always dns"): It works when I dont use adguard like no adguard protected wifi but the 5g connection on android. (situation: local wifi forces dns to adguard and blocks 53/udp outbound to prevent apps ignoring the DNS setting via dhcp)
Author
Owner

@valki2 commented on GitHub (Apr 1, 2026):

Proof: when allowing 53/udp outbound for the client, then it connects/registers. Doesnt feel right as I want to decide which DNS to use - and yes, adguard IS accepting the request and is resolving correctly.
Still, the connection to the private resources wont work although the routes seem to have been created.

2026-04-01 10:21:34.000 [INFO] Connecting tunnel with config: Name=olm, Endpoint=https://pangolin.xxx.com
2026-04-01 10:21:34.000 [INFO] Tunnel: StartTunnel called
2026-04-01 10:21:34.000 [INFO] Tunnel: Starting tunnel with config
2026-04-01 10:21:34.000 [INFO] Tunnel state changed: registering
2026-04-01 10:21:34.000 [INFO] Pangolin logging initialized - log file: C:\ProgramData\Pangolin\logs\pangolin.log, log level: info
2026-04-01 10:21:34.000 [INFO] Pangolin version 0.8.1 starting
2026-04-01 10:21:34.000 [INFO] Starting as tunnel service with config: C:\ProgramData\Pangolin\Tunnels\olm.json
2026-04-01 10:21:34.000 [INFO] Tunnel service: Starting with config
2026-04-01 10:21:34.000 [INFO] Tunnel service: Running as Windows service
2026-04-01 10:21:34.000 [INFO] Tunnel service: Service starting
2026-04-01 10:21:34.000 [INFO] Tunnel state changed: registering
2026-04-01 10:21:34.000 [INFO] Starting status polling
2026-04-01 10:21:34.000 [INFO] Started OLM status polling (every 1 second)
2026-04-01 10:21:35.000 [ERROR] Failed to poll OLM status: failed to connect to OLM: Get "http://localhost/status": open \.\pipe\pangolin-olm: The system cannot find the file specified.
2026-04-01 10:21:35.000 [INFO] Starting HTTP server on socket \.\pipe\pangolin-olm
2026-04-01 10:21:35.000 [INFO] Starting OLM tunnel...
2026-04-01 10:21:35.000 [INFO] Created shared UDP socket on port 53343 (refcount: 2)
2026-04-01 10:21:35.000 [INFO] Starting hole punch for 1 exit nodes
2026-04-01 10:21:35.000 [INFO] Websocket Connected
2026-04-01 10:21:36.000 [INFO] Tunnel: OLM registered
2026-04-01 10:21:44.000 [INFO] Disconnecting...
2026-04-01 10:21:44.000 [INFO] Disconnecting tunnel
2026-04-01 10:21:44.000 [INFO] Tunnel: StopTunnel called
2026-04-01 10:21:44.000 [INFO] Tunnel state changed: stopping
2026-04-01 10:21:44.000 [INFO] Tunnel service: Service stopping
2026-04-01 10:21:44.000 [INFO] Stopping api server
2026-04-01 10:21:44.000 [INFO] Stopping tunnel process
2026-04-01 10:21:44.000 [INFO] Tunnel process context cancelled, cleaning up
2026-04-01 10:21:44.000 [INFO] Tunnel: State transitioned to stopped
2026-04-01 10:21:44.000 [INFO] Stopped OLM status polling
2026-04-01 10:21:44.000 [INFO] Disconnected tunnel
2026-04-01 10:21:44.000 [INFO] Status polling stopped
2026-04-01 10:21:44.000 [INFO] Tunnel state changed: stopped
2026-04-01 10:21:44.000 [INFO] Tunnel state changed: stopped
2026-04-01 10:21:44.000 [INFO] OLM tunnel stopped
2026-04-01 10:21:44.000 [INFO] Hole punch manager stopped
2026-04-01 10:21:44.000 [INFO] Released shared UDP bind
2026-04-01 10:21:44.000 [INFO] Olm service stopped
2026-04-01 10:21:44.000 [INFO] Cleared all network settings
2026-04-01 10:21:44.000 [INFO] Tunnel process stopped
2026-04-01 10:22:19.000 [INFO] OLM credentials verified successfully
2026-04-01 10:22:19.000 [INFO] Connecting tunnel with config: Name=olm, Endpoint=https://pangolin.xxx.com
2026-04-01 10:22:19.000 [INFO] Tunnel: StartTunnel called
2026-04-01 10:22:19.000 [INFO] Tunnel: Starting tunnel with config
2026-04-01 10:22:19.000 [INFO] Tunnel state changed: registering
2026-04-01 10:22:19.000 [INFO] Pangolin logging initialized - log file: C:\ProgramData\Pangolin\logs\pangolin.log, log level: info
2026-04-01 10:22:19.000 [INFO] Pangolin version 0.8.1 starting
2026-04-01 10:22:19.000 [INFO] Starting as tunnel service with config: C:\ProgramData\Pangolin\Tunnels\olm.json
2026-04-01 10:22:19.000 [INFO] Tunnel service: Starting with config
2026-04-01 10:22:19.000 [INFO] Tunnel service: Running as Windows service
2026-04-01 10:22:19.000 [INFO] Tunnel service: Service starting
2026-04-01 10:22:19.000 [INFO] Tunnel state changed: registering
2026-04-01 10:22:19.000 [INFO] Starting status polling
2026-04-01 10:22:19.000 [INFO] Started OLM status polling (every 1 second)
2026-04-01 10:22:20.000 [ERROR] Failed to poll OLM status: failed to connect to OLM: Get "http://localhost/status": open \.\pipe\pangolin-olm: The system cannot find the file specified.
2026-04-01 10:22:20.000 [INFO] Starting HTTP server on socket \.\pipe\pangolin-olm
2026-04-01 10:22:20.000 [INFO] Starting OLM tunnel...
2026-04-01 10:22:20.000 [INFO] Created shared UDP socket on port 50254 (refcount: 2)
2026-04-01 10:22:21.000 [INFO] Starting hole punch for 1 exit nodes
2026-04-01 10:22:21.000 [INFO] Websocket Connected
2026-04-01 10:22:21.000 [INFO] Tunnel: OLM registered
2026-04-01 10:22:22.000 [INFO] The tunnel IP is: 100.90.128.5/24
2026-04-01 10:22:22.000 [INFO] Set IPv4 addresses: [100.90.128.5], subnet masks: [255.255.255.0]
2026-04-01 10:22:22.000 [INFO] Set MTU: 1280
2026-04-01 10:22:22.000 [INFO] Configuring Windows interface: Pangolin
2026-04-01 10:22:22.000 [INFO] Adding IP address 100.90.128.5/24 to interface Pangolin
2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:100.96.128.0 SubnetMask:255.255.255.0 GatewayAddress: IsDefault:false}
2026-04-01 10:22:22.000 [INFO] Adding route to 100.96.128.0/24 via interface Pangolin
2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 100.96.128.0/24
2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.178.59 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false}
2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.178.59/32 via interface Pangolin
2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.178.59/32
2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.178.1 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false}
2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.178.1/32 via interface Pangolin
2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.178.1/32
2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.178.10 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false}
2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.178.10/32 via interface Pangolin
2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.178.10/32
2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.178.11 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false}
2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.178.11/32 via interface Pangolin
2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.178.11/32
2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.178.250 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false}
2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.178.250/32 via interface Pangolin
2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.178.250/32
2026-04-01 10:22:22.000 [INFO] Started monitoring for site 2 at 100.90.128.0:56224
2026-04-01 10:22:22.000 [INFO] Configured peer NnIQXUximKdkNWzjGpN069PGReQ9frBTpyvGLVvUkCE=
2026-04-01 10:22:22.000 [INFO] Starting rapid holepunch test for site 2 at 194.208.132.65:56223 (max 5 attempts, 400ms timeout each)
2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.2.113 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false}
2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.2.113/32 via interface Pangolin
2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.2.113/32
2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.2.22 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false}
2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.2.22/32 via interface Pangolin
2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.2.22/32
2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.66.203 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false}
2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.66.203/32 via interface Pangolin
2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.66.203/32
2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.2.111 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false}
2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.2.111/32 via interface Pangolin
2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.2.111/32
2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.2.103 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false}
2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.2.103/32 via interface Pangolin
2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.2.103/32
2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.2.30 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false}
2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.2.30/32 via interface Pangolin
2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.2.30/32
2026-04-01 10:22:22.000 [INFO] Started monitoring for site 3 at 100.90.128.1:64597
2026-04-01 10:22:22.000 [INFO] Configured peer gHuUX0pFzOkbnGYcD9+eqbn/6SpO+UlQV7IdEjY5UBA=
2026-04-01 10:22:22.000 [INFO] Starting rapid holepunch test for site 3 at 213.47.199.78:64596 (max 5 attempts, 400ms timeout each)
2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.10.15 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false}
2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.10.15/32 via interface Pangolin
2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.10.15/32
2026-04-01 10:22:22.000 [INFO] Started monitoring for site 4 at 100.90.128.3:61616
2026-04-01 10:22:22.000 [INFO] Configured peer L6D3Sypja+hXgtDRK6IvxIMcEk4xdwFoUAk0R3m1qBw=
2026-04-01 10:22:22.000 [INFO] Started monitoring peer 2
2026-04-01 10:22:22.000 [INFO] Started monitoring peer 3
2026-04-01 10:22:22.000 [INFO] Started monitoring peer 4
2026-04-01 10:22:22.000 [INFO] Started holepunch connection monitor
2026-04-01 10:22:22.000 [INFO] DNS proxy started on 100.96.128.1:53 (tunnelDNS=false)
2026-04-01 10:22:22.000 [INFO] WireGuard device created.
2026-04-01 10:22:22.000 [INFO] Starting rapid holepunch test for site 4 at 212.186.39.53:61615 (max 5 attempts, 400ms timeout each)
2026-04-01 10:22:22.000 [INFO] Tunnel: OLM connected
2026-04-01 10:22:22.000 [INFO] Tunnel state changed: running
2026-04-01 10:22:24.000 [WARN] Rapid test: site 2 holepunch FAILED after 5 attempts, will relay
2026-04-01 10:22:24.000 [INFO] Rapid test failed for site 2, requesting relay
2026-04-01 10:22:24.000 [INFO] Sent relay message for site 2 (chain 4f9baf7a50ef32c0)
2026-04-01 10:22:24.000 [INFO] Cancelled all relay senders
2026-04-01 10:22:24.000 [INFO] Adjusted peer 2 to point to relay!
2026-04-01 10:22:24.000 [WARN] Rapid test: site 3 holepunch FAILED after 5 attempts, will relay
2026-04-01 10:22:24.000 [INFO] Rapid test failed for site 3, requesting relay
2026-04-01 10:22:24.000 [INFO] Sent relay message for site 3 (chain 30c40b7dfc37c171)
2026-04-01 10:22:25.000 [INFO] Cancelled all relay senders
2026-04-01 10:22:25.000 [INFO] Adjusted peer 3 to point to relay!
2026-04-01 10:22:25.000 [WARN] WireGuard connection to site 4 is DISCONNECTED
2026-04-01 10:22:25.000 [WARN] WireGuard connection to site 3 is DISCONNECTED
2026-04-01 10:22:25.000 [WARN] WireGuard connection to site 2 is DISCONNECTED
2026-04-01 10:22:25.000 [WARN] Rapid test: site 4 holepunch FAILED after 5 attempts, will relay

<!-- gh-comment-id:4168414463 --> @valki2 commented on GitHub (Apr 1, 2026): Proof: when allowing 53/udp outbound for the client, then it connects/registers. Doesnt feel right as I want to decide which DNS to use - and yes, adguard IS accepting the request and is resolving correctly. Still, the connection to the private resources wont work although the routes seem to have been created. 2026-04-01 10:21:34.000 [INFO] Connecting tunnel with config: Name=olm, Endpoint=https://pangolin.xxx.com 2026-04-01 10:21:34.000 [INFO] Tunnel: StartTunnel called 2026-04-01 10:21:34.000 [INFO] Tunnel: Starting tunnel with config 2026-04-01 10:21:34.000 [INFO] Tunnel state changed: registering 2026-04-01 10:21:34.000 [INFO] Pangolin logging initialized - log file: C:\ProgramData\Pangolin\logs\pangolin.log, log level: info 2026-04-01 10:21:34.000 [INFO] Pangolin version 0.8.1 starting 2026-04-01 10:21:34.000 [INFO] Starting as tunnel service with config: C:\ProgramData\Pangolin\Tunnels\olm.json 2026-04-01 10:21:34.000 [INFO] Tunnel service: Starting with config 2026-04-01 10:21:34.000 [INFO] Tunnel service: Running as Windows service 2026-04-01 10:21:34.000 [INFO] Tunnel service: Service starting 2026-04-01 10:21:34.000 [INFO] Tunnel state changed: registering 2026-04-01 10:21:34.000 [INFO] Starting status polling 2026-04-01 10:21:34.000 [INFO] Started OLM status polling (every 1 second) 2026-04-01 10:21:35.000 [ERROR] Failed to poll OLM status: failed to connect to OLM: Get "http://localhost/status": open \\.\pipe\pangolin-olm: The system cannot find the file specified. 2026-04-01 10:21:35.000 [INFO] Starting HTTP server on socket \\.\pipe\pangolin-olm 2026-04-01 10:21:35.000 [INFO] Starting OLM tunnel... 2026-04-01 10:21:35.000 [INFO] Created shared UDP socket on port 53343 (refcount: 2) 2026-04-01 10:21:35.000 [INFO] Starting hole punch for 1 exit nodes 2026-04-01 10:21:35.000 [INFO] Websocket Connected 2026-04-01 10:21:36.000 [INFO] Tunnel: OLM registered 2026-04-01 10:21:44.000 [INFO] Disconnecting... 2026-04-01 10:21:44.000 [INFO] Disconnecting tunnel 2026-04-01 10:21:44.000 [INFO] Tunnel: StopTunnel called 2026-04-01 10:21:44.000 [INFO] Tunnel state changed: stopping 2026-04-01 10:21:44.000 [INFO] Tunnel service: Service stopping 2026-04-01 10:21:44.000 [INFO] Stopping api server 2026-04-01 10:21:44.000 [INFO] Stopping tunnel process 2026-04-01 10:21:44.000 [INFO] Tunnel process context cancelled, cleaning up 2026-04-01 10:21:44.000 [INFO] Tunnel: State transitioned to stopped 2026-04-01 10:21:44.000 [INFO] Stopped OLM status polling 2026-04-01 10:21:44.000 [INFO] Disconnected tunnel 2026-04-01 10:21:44.000 [INFO] Status polling stopped 2026-04-01 10:21:44.000 [INFO] Tunnel state changed: stopped 2026-04-01 10:21:44.000 [INFO] Tunnel state changed: stopped 2026-04-01 10:21:44.000 [INFO] OLM tunnel stopped 2026-04-01 10:21:44.000 [INFO] Hole punch manager stopped 2026-04-01 10:21:44.000 [INFO] Released shared UDP bind 2026-04-01 10:21:44.000 [INFO] Olm service stopped 2026-04-01 10:21:44.000 [INFO] Cleared all network settings 2026-04-01 10:21:44.000 [INFO] Tunnel process stopped 2026-04-01 10:22:19.000 [INFO] OLM credentials verified successfully 2026-04-01 10:22:19.000 [INFO] Connecting tunnel with config: Name=olm, Endpoint=https://pangolin.xxx.com 2026-04-01 10:22:19.000 [INFO] Tunnel: StartTunnel called 2026-04-01 10:22:19.000 [INFO] Tunnel: Starting tunnel with config 2026-04-01 10:22:19.000 [INFO] Tunnel state changed: registering 2026-04-01 10:22:19.000 [INFO] Pangolin logging initialized - log file: C:\ProgramData\Pangolin\logs\pangolin.log, log level: info 2026-04-01 10:22:19.000 [INFO] Pangolin version 0.8.1 starting 2026-04-01 10:22:19.000 [INFO] Starting as tunnel service with config: C:\ProgramData\Pangolin\Tunnels\olm.json 2026-04-01 10:22:19.000 [INFO] Tunnel service: Starting with config 2026-04-01 10:22:19.000 [INFO] Tunnel service: Running as Windows service 2026-04-01 10:22:19.000 [INFO] Tunnel service: Service starting 2026-04-01 10:22:19.000 [INFO] Tunnel state changed: registering 2026-04-01 10:22:19.000 [INFO] Starting status polling 2026-04-01 10:22:19.000 [INFO] Started OLM status polling (every 1 second) 2026-04-01 10:22:20.000 [ERROR] Failed to poll OLM status: failed to connect to OLM: Get "http://localhost/status": open \\.\pipe\pangolin-olm: The system cannot find the file specified. 2026-04-01 10:22:20.000 [INFO] Starting HTTP server on socket \\.\pipe\pangolin-olm 2026-04-01 10:22:20.000 [INFO] Starting OLM tunnel... 2026-04-01 10:22:20.000 [INFO] Created shared UDP socket on port 50254 (refcount: 2) 2026-04-01 10:22:21.000 [INFO] Starting hole punch for 1 exit nodes 2026-04-01 10:22:21.000 [INFO] Websocket Connected 2026-04-01 10:22:21.000 [INFO] Tunnel: OLM registered 2026-04-01 10:22:22.000 [INFO] The tunnel IP is: 100.90.128.5/24 2026-04-01 10:22:22.000 [INFO] Set IPv4 addresses: [100.90.128.5], subnet masks: [255.255.255.0] 2026-04-01 10:22:22.000 [INFO] Set MTU: 1280 2026-04-01 10:22:22.000 [INFO] Configuring Windows interface: Pangolin 2026-04-01 10:22:22.000 [INFO] Adding IP address 100.90.128.5/24 to interface Pangolin 2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:100.96.128.0 SubnetMask:255.255.255.0 GatewayAddress: IsDefault:false} 2026-04-01 10:22:22.000 [INFO] Adding route to 100.96.128.0/24 via interface Pangolin 2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 100.96.128.0/24 2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.178.59 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false} 2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.178.59/32 via interface Pangolin 2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.178.59/32 2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.178.1 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false} 2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.178.1/32 via interface Pangolin 2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.178.1/32 2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.178.10 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false} 2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.178.10/32 via interface Pangolin 2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.178.10/32 2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.178.11 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false} 2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.178.11/32 via interface Pangolin 2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.178.11/32 2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.178.250 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false} 2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.178.250/32 via interface Pangolin 2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.178.250/32 2026-04-01 10:22:22.000 [INFO] Started monitoring for site 2 at 100.90.128.0:56224 2026-04-01 10:22:22.000 [INFO] Configured peer NnIQXUximKdkNWzjGpN069PGReQ9frBTpyvGLVvUkCE= 2026-04-01 10:22:22.000 [INFO] Starting rapid holepunch test for site 2 at 194.208.132.65:56223 (max 5 attempts, 400ms timeout each) 2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.2.113 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false} 2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.2.113/32 via interface Pangolin 2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.2.113/32 2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.2.22 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false} 2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.2.22/32 via interface Pangolin 2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.2.22/32 2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.66.203 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false} 2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.66.203/32 via interface Pangolin 2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.66.203/32 2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.2.111 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false} 2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.2.111/32 via interface Pangolin 2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.2.111/32 2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.2.103 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false} 2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.2.103/32 via interface Pangolin 2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.2.103/32 2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.2.30 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false} 2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.2.30/32 via interface Pangolin 2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.2.30/32 2026-04-01 10:22:22.000 [INFO] Started monitoring for site 3 at 100.90.128.1:64597 2026-04-01 10:22:22.000 [INFO] Configured peer gHuUX0pFzOkbnGYcD9+eqbn/6SpO+UlQV7IdEjY5UBA= 2026-04-01 10:22:22.000 [INFO] Starting rapid holepunch test for site 3 at 213.47.199.78:64596 (max 5 attempts, 400ms timeout each) 2026-04-01 10:22:22.000 [INFO] Added IPv4 included route: {DestinationAddress:192.168.10.15 SubnetMask:255.255.255.255 GatewayAddress: IsDefault:false} 2026-04-01 10:22:22.000 [INFO] Adding route to 192.168.10.15/32 via interface Pangolin 2026-04-01 10:22:22.000 [INFO] Added route for remote subnet: 192.168.10.15/32 2026-04-01 10:22:22.000 [INFO] Started monitoring for site 4 at 100.90.128.3:61616 2026-04-01 10:22:22.000 [INFO] Configured peer L6D3Sypja+hXgtDRK6IvxIMcEk4xdwFoUAk0R3m1qBw= 2026-04-01 10:22:22.000 [INFO] Started monitoring peer 2 2026-04-01 10:22:22.000 [INFO] Started monitoring peer 3 2026-04-01 10:22:22.000 [INFO] Started monitoring peer 4 2026-04-01 10:22:22.000 [INFO] Started holepunch connection monitor 2026-04-01 10:22:22.000 [INFO] DNS proxy started on 100.96.128.1:53 (tunnelDNS=false) 2026-04-01 10:22:22.000 [INFO] WireGuard device created. 2026-04-01 10:22:22.000 [INFO] Starting rapid holepunch test for site 4 at 212.186.39.53:61615 (max 5 attempts, 400ms timeout each) 2026-04-01 10:22:22.000 [INFO] Tunnel: OLM connected 2026-04-01 10:22:22.000 [INFO] Tunnel state changed: running 2026-04-01 10:22:24.000 [WARN] Rapid test: site 2 holepunch FAILED after 5 attempts, will relay 2026-04-01 10:22:24.000 [INFO] Rapid test failed for site 2, requesting relay 2026-04-01 10:22:24.000 [INFO] Sent relay message for site 2 (chain 4f9baf7a50ef32c0) 2026-04-01 10:22:24.000 [INFO] Cancelled all relay senders 2026-04-01 10:22:24.000 [INFO] Adjusted peer 2 to point to relay! 2026-04-01 10:22:24.000 [WARN] Rapid test: site 3 holepunch FAILED after 5 attempts, will relay 2026-04-01 10:22:24.000 [INFO] Rapid test failed for site 3, requesting relay 2026-04-01 10:22:24.000 [INFO] Sent relay message for site 3 (chain 30c40b7dfc37c171) 2026-04-01 10:22:25.000 [INFO] Cancelled all relay senders 2026-04-01 10:22:25.000 [INFO] Adjusted peer 3 to point to relay! 2026-04-01 10:22:25.000 [WARN] WireGuard connection to site 4 is DISCONNECTED 2026-04-01 10:22:25.000 [WARN] WireGuard connection to site 3 is DISCONNECTED 2026-04-01 10:22:25.000 [WARN] WireGuard connection to site 2 is DISCONNECTED 2026-04-01 10:22:25.000 [WARN] Rapid test: site 4 holepunch FAILED after 5 attempts, will relay
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/pangolin#23428