I have headless sessions hosted behind a headless server that is running in a docker container with the port defined in forcePort of the config exposed public. All NAT is configured correctly and everyone is able to connect but me. After extensive testing, it looks like the only difference in my network from everyone else's is that I have a direct connection to the server's LAN via site to site tunnel. When traced via packet capture, I see traffic hitting the relay from client -> server, my game shows the world for a few seconds and then the connection is lost shortly after, kicking me back to my previous world. The server sees much the same traffic. This happens if I join any LNL session id hosted on my servers, even from list or invite. I have to use a world orb with the direct ip of lnl://ip:port in order to connect successfully from my network. I can join all other servers/sessions. This seems very related to Neos issue Neos-Metaverse/NeosPublic#3357
To Reproduce
Run headless server in Pterodactyl panel using a default docker bridge behind NAT with the port defined in forcePort of the config exposed public.
Have a site to site VPN tunnel between headless server's LAN and your home LAN
Try to connect using LNL NAT to any headless session on the server from your home LAN
Expected behavior
LNL NAT works using the relay
Screenshots
No response
Resonite Version Number
n/a as issue was present in Neos
What Platforms does this occur on?
Linux
What headset if any do you use?
n/a
Log Files
Session updated, forcing status update
SendStatusToUser: U-[MyUsername]. OnlineStatus:
SIGNALR: BroadcastStatus - Contact status for U-[REDACTED].
UserSessionId: [REDACTED].
Type: Headless
OutputDevice:
IsMobile: False
OnlineStatus:
IsPresent: False
LastPresenceTimestamp:
LastStatusChange: 11/07/2023 20:49:44
AppVersion: 2023.11.7.274
CompatibilityHash: [REDACTED]
CurrentSessionIndex: 1 to SpecificContacts (U-[MyUsername])
Session updated, forcing status update
NAT INTRODUCTION SUCCESS: [MyHomeIP]:52956, token: s-[REDACTED]
LNL Listener - connection request: [MyHomeIP]:52956
Peer Connected: [MyHomeIP]:52956
NAT INTRODUCTION SUCCESS: [MyHomeIP]:52956, token: s-[REDACTED]
Verifying Join Request. UserID: U-[MyUsername], Username: [MyUsername], AccessLevel: FriendsOfFriends
Join Granted For UserID: U-[MyUsername], Username: [MyUsername]
User Joined Minecraft Saphora Island. Username: [MyUsername], UserID: U-[MyUsername], AllocID: 1, AllocIDstart: 1, MachineID: [REDACTED]
User Spawn Minecraft Saphora Island. Username: [MyUsername], UserID: U-[MyUsername], MachineID: [REDACTED]
Spawning User [MyUsername] ([REDACTED])
User [MyUsername] Role: Admin, HasFingerTracking: False, HasEyeTracking: False, HasLipTracking: False
BroadcastKey set to U-1NVs[REDACTED]:c240d[REDACTED]. LastModifyingUser:
at System.Environment.get_StackTrace () [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
at Elements.Core.UniLog.Log (System.String message, System.Boolean stackTrace) [0x00000] in <b69854496e6e4116a13f0e3f1203d8f6>:0
at FrooxEngine.WorldConfiguration.FieldChanged (FrooxEngine.IChangeable obj) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.SyncElement.SyncElementChanged (FrooxEngine.IChangeable member) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.SyncField`1[T].ValueChanged () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.SyncField`1[T].InternalSetValue (T& value, System.Boolean sync, System.Boolean change) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.SyncField`1[T].set_Value (T value) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.Sync`1[T].set_Value (T value) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.WorldConfiguration.InternalRunUpdate () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.UpdateManager.RunUpdates () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.World.RefreshStep () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.World.Refresh () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.WorldManager.UpdateStep () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.WorldManager.RunUpdateLoop () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.Engine.UpdateStep () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.Engine.RunUpdateLoop () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.StandaloneFrooxEngineRunner.UpdateLoop () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
at System.Threading.ThreadHelper.ThreadStart () [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
BroadcastKey changed: U-1NVs[REDACTED]:c240d[REDACTED]
Updated: -> U-1NVs[REDACTED]:c240d[REDACTED]
Session updated, forcing status update
SIGNALR: BroadcastStatus - Contact status for U-1NVs[REDACTED].
UserSessionId: 45793[REDACTED].
Type: Headless
OutputDevice:
IsMobile: False
OnlineStatus:
IsPresent: False
LastPresenceTimestamp:
LastStatusChange: 11/07/2023 20:50:10
AppVersion: 2023.11.7.274
CompatibilityHash: [REDACTED]
CurrentSessionIndex: 1 to AllContacts
SIGNALR: ListenOnKey - U-1NVs[REDACTED]:c240d[REDACTED]
Rebuild: 11.0295 ms, Nodes: 243, Groups: 46
Rebuild: 0.0010 ms, Nodes: 0, Groups: 24
KeyListenerAdded: U-1NVs[REDACTED]:c240d[REDACTED] - mAdCwPQJ5[REDACTED]
Sending info matching broadcast key U-1NVs[REDACTED]:c240d[REDACTED] to mAdCwPQJ58pycx0ub8KhPA
KeyListenerAdded: U-1NVs[REDACTED]:c240d[REDACTED] - NgDXf3LOFfrRZqoXNeCAxA
Sending info matching broadcast key U-1NVs[REDACTED]:c240d[REDACTED] to NgDXf3LOFfrRZqoXNeCAxA
Session updated, forcing status update
Session updated, forcing status update
KeyListenerAdded: U-1NVs[REDACTED]:c240d[REDACTED] - 8Eatf[REDACTED]
Sending info matching broadcast key U-1NVs[REDACTED]:c240d[REDACTED] to 8Eatfus[REDACTED]
KeyListenerAdded: U-1NVs[REDACTED]:c240d[REDACTED] - 8hoc_[REDACTED]
Sending info matching broadcast key U-1NVs[REDACTED]:c240d[REDACTED] to 8hoc_jZ[REDACTED]
KeyListenerAdded: U-1NVs[REDACTED]:c240d[REDACTED] - g_B7v[REDACTED]
Sending info matching broadcast key U-1NVs[REDACTED]:c240d[REDACTED] to g_B7vx0[REDACTED]
KeyListenerAdded: U-1NVs[REDACTED]:c240d[REDACTED] - 3-4BT[REDACTED]
Sending info matching broadcast key U-1NVs[REDACTED]:c240d[REDACTED] to 3-4BT3b[REDACTED]
KeyListenerAdded: U-1NVs[REDACTED]:c240d[REDACTED] - Qfts0[REDACTED]
Sending info matching broadcast key U-1NVs[REDACTED]:c240d[REDACTED] to Qfts0hA[REDACTED]
KeyListenerAdded: U-1NVs[REDACTED]:c240d[REDACTED] - DxKfq[REDACTED]
Sending info matching broadcast key U-1NVs[REDACTED]:c240d[REDACTED] to DxKfq_f[REDACTED]
KeyListenerAdded: U-1NVs[REDACTED]:c240d[REDACTED] - cyIsO[REDACTED]
Sending info matching broadcast key U-1NVs[REDACTED]:c240d[REDACTED] to cyIsOQV[REDACTED]
KeyListenerAdded: U-1NVs[REDACTED]:c240d[REDACTED] - WUDm4[REDACTED]
Sending info matching broadcast key U-1NVs[REDACTED]:c240d[REDACTED] to WUDm4WT[REDACTED]
Session updated, forcing status update
Rebuild: 38.5993 ms, Nodes: 694, Groups: 66
Rebuild: 0.0010 ms, Nodes: 0, Groups: 7
Session updated, forcing status update
Peer Disconnected: [MyHomeIP]:52956, reason: RemoteConnectionClose, socketErrorCode: Success
User Left Minecraft Saphora Island. Username: [MyUsername], UserID: U-[MyUsername], AllocId: 1, AllocIDstart: 1, MachineID: [REDACTED]
Destroying User: User ID4280F00 (Alloc: 1) - UserName: [MyUsername], UserId: U-[MyUsername], MachineId: [REDACTED], Role: Admin
Currently updating user: User ID2F00 (Alloc: 0) - UserName: HeadlessAccount, UserId: U-1NVs[REDACTED], MachineId: [REDACTED], Role: Admin
at System.Environment.get_StackTrace () [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
at Elements.Core.UniLog.Log (System.String message, System.Boolean stackTrace) [0x00000] in <b69854496e6e4116a13f0e3f1203d8f6>:0
at FrooxEngine.UserRoot.Slot_OnPrepareDestroy (FrooxEngine.Slot slot) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.Slot.PrepareDestruction () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.World.OnSlotRemoved (FrooxEngine.SyncBagBase`2[K,T] bag, Elements.Core.RefID key, FrooxEngine.Slot slot) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.SyncBagBase`2[K,T].ElementRemoved (K key, T element) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.SyncBagBase`2[K,T].InternalRemove (K key, System.Boolean sync, System.Boolean change) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.SyncBagBase`2[K,T].Remove (K key) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.World.InternalRemoveSlot (Elements.Core.RefID key) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.World.RemoveSlot (FrooxEngine.Slot slot) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.Slot.DestroySelf () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.Slot.Destroy (System.Boolean sendDestroyingEvent) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.Slot.RelocateOrDestroyEmpty (System.Func`1[TResult] getRelocationTarget) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.Slot.DestroyPreservingAssets (FrooxEngine.Slot relocateAssets, System.Boolean sendDestroyingEvent) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.Slot.DestroyPreservingAssets () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.SimpleUserSpawn.OnUserLeft (FrooxEngine.User user) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.World.RunWorldEvents () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.World.RefreshStep () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.World.Refresh () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.WorldManager.UpdateStep () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.WorldManager.RunUpdateLoop () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.Engine.UpdateStep () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.Engine.RunUpdateLoop () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.StandaloneFrooxEngineRunner.UpdateLoop () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
at System.Threading.ThreadHelper.ThreadStart () [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
BroadcastKey set to U-1NVs[REDACTED]:ef77cc[REDACTED]. LastModifyingUser: User ID2F00 (Alloc: 0) - UserName: HeadlessAccount, UserId: U-1NVs[REDACTED], MachineId: [REDACTED], Role: Admin
at System.Environment.get_StackTrace () [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
at Elements.Core.UniLog.Log (System.String message, System.Boolean stackTrace) [0x00000] in <b69854496e6e4116a13f0e3f1203d8f6>:0
at FrooxEngine.WorldConfiguration.FieldChanged (FrooxEngine.IChangeable obj) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.SyncElement.SyncElementChanged (FrooxEngine.IChangeable member) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.SyncField`1[T].ValueChanged () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.SyncField`1[T].InternalSetValue (T& value, System.Boolean sync, System.Boolean change) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.SyncField`1[T].set_Value (T value) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.Sync`1[T].set_Value (T value) [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.WorldConfiguration.InternalRunUpdate () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.UpdateManager.RunUpdates () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.World.RefreshStep () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.World.Refresh () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.WorldManager.UpdateStep () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.WorldManager.RunUpdateLoop () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.Engine.UpdateStep () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.Engine.RunUpdateLoop () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at FrooxEngine.StandaloneFrooxEngineRunner.UpdateLoop () [0x00000] in <ce0100e13f0347d791340985bd3805a7>:0
at System.Threading.ThreadHelper.ThreadStart_Context (System.Object state) [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx) [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state) [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
at System.Threading.ThreadHelper.ThreadStart () [0x00000] in <d636f104d58046fd9b195699bcb1a744>:0
BroadcastKey changed: U-1NVs[REDACTED]:ef77cc[REDACTED]
Rebuild: 0.0035 ms, Nodes: 0, Groups: 33
Updated: U-1NVs[REDACTED]:c240d[REDACTED] -> U-1NVs[REDACTED]:ef77cc[REDACTED]
Session updated, forcing status update
SIGNALR: BroadcastStatus - Contact status for U-1NVs[REDACTED].
UserSessionId: 45793[REDACTED].
Type: Headless
OutputDevice:
IsMobile: False
OnlineStatus:
IsPresent: False
LastPresenceTimestamp:
LastStatusChange: 11/07/2023 20:50:15
AppVersion: 2023.11.7.274
CompatibilityHash: [REDACTED]
CurrentSessionIndex: 1 to AllContacts
SIGNALR: ListenOnKey - U-1NVs[REDACTED]:ef77cc[REDACTED]
KeyListenerAdded: U-1NVs[REDACTED]:ef77cc[REDACTED] - NgDXf3L[REDACTED]
Sending info matching broadcast key U-1NVs[REDACTED]:ef77cc[REDACTED] to NgDXf3L[REDACTED]
KeyListenerAdded: U-1NVs[REDACTED]:ef77cc[REDACTED] - mAdCwPQ[REDACTED]
Sending info matching broadcast key U-1NVs[REDACTED]:ef77cc[REDACTED] to mAdCwPQ[REDACTED]
Session updated, forcing status update
Session updated, forcing status update
Session updated, forcing status update
Session updated, forcing status update
Session updated, forcing status update
Additional Context
I can provide any logs, packet captures or other info. I've had this issue for so long, i'd rather not have to join using a world orb.
I have currently found a workaround that fixed the issue for me for now. On the server end I have added a rule to the firewall to block all traffic coming from [Server LAN Subnet] to [My Home LAN Subnet]
Describe the bug?
I have headless sessions hosted behind a headless server that is running in a docker container with the port defined in
forcePort
of the config exposed public. All NAT is configured correctly and everyone is able to connect but me. After extensive testing, it looks like the only difference in my network from everyone else's is that I have a direct connection to the server's LAN via site to site tunnel. When traced via packet capture, I see traffic hitting the relay from client -> server, my game shows the world for a few seconds and then the connection is lost shortly after, kicking me back to my previous world. The server sees much the same traffic. This happens if I join any LNL session id hosted on my servers, even from list or invite. I have to use a world orb with the direct ip of lnl://ip:port in order to connect successfully from my network. I can join all other servers/sessions. This seems very related to Neos issue Neos-Metaverse/NeosPublic#3357To Reproduce
Run headless server in Pterodactyl panel using a default docker bridge behind NAT with the port defined in
forcePort
of the config exposed public. Have a site to site VPN tunnel between headless server's LAN and your home LAN Try to connect using LNL NAT to any headless session on the server from your home LANExpected behavior
LNL NAT works using the relay
Screenshots
No response
Resonite Version Number
n/a as issue was present in Neos
What Platforms does this occur on?
Linux
What headset if any do you use?
n/a
Log Files
Additional Context
I can provide any logs, packet captures or other info. I've had this issue for so long, i'd rather not have to join using a world orb.
Reporters
No response