“Passing through” almost always means there’s no contact pair being generated at all — not that a contact is generated but resolved wrong. Two things worth checking, in order:
Is there actually a CANNON.Body for each remote entity, or only a mesh? A lot of dead-reckoning setups only ever write the network snapshot onto the Object3D transform for rendering — which is exactly what dead reckoning is for (extrapolating a visual position between snapshots). If that’s the case here, there’s nothing in world.bodies for your local dynamic body to hit, and no amount of collision tuning fixes it. Fix: add a CANNON.Body with type = CANNON.Body.KINEMATIC and collisionResponse = true per remote entity, drive that from the network state, and read the mesh transform back off the body.
If there is a kinematic body — is it snapped or moved? cannon.js (and cannon-es) has no continuous collision detection — no CCD, it’s purely discrete, position-sampled each world.step(). If you set body.position.copy(target) once per network packet instead of advancing it every physics tick, the body sits still in the solver’s eyes for several steps, then teleports. If your local dynamic body’s path happens to cross that jump, there’s never an intermediate frame where the two shapes overlap, so no contact is ever generated — the exact shape of “pass right through,” and it’ll look intermittent (sometimes catches, sometimes doesn’t) depending on speed and body size, which is a good way to tell this apart from case one. Fix: interpolate/advance the kinematic body’s position every world.step() between snapshots instead of snapping it, so the broadphase actually sees it sweep through the space in between.
Which of the two is it right now — does the remote entity have its own CANNON.Body, and if so, is that body’s position set once per network update or advanced every physics step?
There’s a similarly constrained interactive system — spatial constraints on mid-range Android, not physics networking, but the same “external state has to keep the collider honest” shape — linked from my thread in Jobs: [For Hire] Three.js / R3F — parametric product configurators, design + code (Belgrade, UTC+2)