19.6.2 • Published 8 months ago

@push.rocks/smartproxy v19.6.2

Weekly downloads
-
License
MIT
Repository
-
Last release
8 months ago

WebSocket Keep-Alive Fix for SNI Passthrough

Problem

WebSocket connections in SNI passthrough mode are being disconnected every 30 seconds due to:

  1. WebSocket Heartbeat: The HTTP proxy's WebSocket handler performs heartbeat checks every 30 seconds using ping/pong frames. In SNI passthrough mode, these frames can't be injected into the encrypted stream, causing connections to be marked as inactive and terminated.

  2. Half-Zombie Detection: The connection manager's aggressive cleanup gives only 30 seconds grace period for connections where one socket is destroyed.

Solution

For SNI passthrough connections: 1. Disable WebSocket-specific heartbeat checking (they're handled as raw TCP) 2. Rely on TCP keepalive settings instead 3. Increase grace period for encrypted connections

Current Settings

  • Default inactivity timeout: 4 hours (14400000 ms)
  • Keep-alive multiplier for extended mode: 6x (24 hours)
  • WebSocket heartbeat interval: 30 seconds (problem!)
  • Half-zombie grace period: 30 seconds (too aggressive)

Recommended Configuration

const proxy = new SmartProxy({
  // Increase grace period for connection cleanup
  inactivityTimeout: 14400000, // 4 hours default
  keepAliveTreatment: 'extended', // or 'immortal' for no timeout
  keepAliveInactivityMultiplier: 10, // 40 hours for keepalive connections
  
  // For routes with WebSocket over SNI passthrough
  routes: [
    {
      name: 'websocket-passthrough',
      match: { ports: 443, domains: 'ws.example.com' },
      action: {
        type: 'forward',
        target: { host: 'backend', port: 443 },
        tls: { mode: 'passthrough' },
        // No WebSocket-specific config needed for passthrough
      }
    }
  ]
});

Temporary Workaround

Until a fix is implemented, you can:

  1. Use keepAliveTreatment: 'immortal' to disable timeout-based cleanup
  2. Increase the half-zombie grace period
  3. Use TCP keepalive at the OS level

Proper Fix Implementation

  1. Detect when a connection is SNI passthrough
  2. Skip WebSocket heartbeat for passthrough connections
  3. Increase grace period for encrypted connections
  4. Rely on TCP keepalive instead of application-level ping/pong
10.0.5

9 months ago

10.0.6

9 months ago

10.0.7

9 months ago

10.0.8

9 months ago

10.0.9

9 months ago

19.0.0

9 months ago

3.24.0

11 months ago

10.0.0

9 months ago

10.0.1

9 months ago

4.1.8

11 months ago

10.0.2

9 months ago

4.1.7

11 months ago

10.0.3

9 months ago

10.0.4

9 months ago

4.1.9

11 months ago

18.2.0

9 months ago

3.2.0

12 months ago

3.12.0

11 months ago

4.0.0

11 months ago

3.40.0

11 months ago

5.0.0

11 months ago

15.0.2

9 months ago

15.0.0

9 months ago

15.0.1

9 months ago

3.14.1

11 months ago

3.37.0

11 months ago

3.14.0

11 months ago

3.37.1

11 months ago

18.1.0

9 months ago

3.37.2

11 months ago

3.14.2

11 months ago

3.37.3

11 months ago

3.1.3

12 months ago

3.13.0

11 months ago

10.0.12

9 months ago

10.0.11

9 months ago

10.0.10

9 months ago

19.5.11

8 months ago

19.5.10

8 months ago

3.25.1

11 months ago

3.25.0

11 months ago

3.25.3

11 months ago

3.25.2

11 months ago

3.25.4

11 months ago

3.22.0

11 months ago

5.1.0

11 months ago

3.22.1

11 months ago

19.5.13

8 months ago

19.5.15

8 months ago

19.5.17

8 months ago

19.5.16

8 months ago

10.2.0

9 months ago

19.5.19

8 months ago

19.5.18

8 months ago

19.5.20

8 months ago

13.1.3

9 months ago

19.5.22

8 months ago

19.5.21

8 months ago

13.1.2

9 months ago

3.9.3

11 months ago

3.9.2

11 months ago

19.6.1

8 months ago

18.0.2

9 months ago

3.9.1

11 months ago

19.6.0

8 months ago

18.0.1

9 months ago

3.9.0

11 months ago

18.0.0

9 months ago

3.19.0

11 months ago

19.6.2

8 months ago

3.9.4

11 months ago

3.10.1

11 months ago

3.8.0

11 months ago

3.33.0

11 months ago

3.10.0

11 months ago

3.10.3

11 months ago

3.10.2

11 months ago

19.5.24

8 months ago

19.5.23

8 months ago

19.5.26

8 months ago

19.5.25

8 months ago

3.22.4

11 months ago

3.22.3

11 months ago

3.22.5

11 months ago

11.0.0

9 months ago

3.23.1

11 months ago

3.23.0

11 months ago

6.0.1

10 months ago

6.0.0

10 months ago

10.1.0

9 months ago

19.5.7

8 months ago

4.1.10

11 months ago

19.5.9

8 months ago

4.1.11

11 months ago

4.1.16

11 months ago

19.5.2

8 months ago

3.8.1

11 months ago

19.5.4

8 months ago

4.1.12

11 months ago

19.5.3

8 months ago

4.1.13

11 months ago

19.5.6

8 months ago

4.1.14

11 months ago

19.5.5

8 months ago

4.1.15

11 months ago

3.11.0

11 months ago

3.7.1

11 months ago

3.7.0

11 months ago

3.34.0

11 months ago

3.20.0

11 months ago

3.20.2

11 months ago

3.20.1

11 months ago

19.4.1

8 months ago

19.4.0

8 months ago

3.17.0

11 months ago

3.7.3

11 months ago

19.4.2

8 months ago

3.7.2

11 months ago

3.17.1

11 months ago

3.31.0

11 months ago

3.31.1

11 months ago

3.31.2

11 months ago

3.6.0

11 months ago

12.0.0

9 months ago

3.28.6

11 months ago

3.28.5

11 months ago

3.28.0

11 months ago

3.28.2

11 months ago

3.28.1

11 months ago

3.28.3

11 months ago

3.21.0

11 months ago

19.3.0

9 months ago

19.3.9

9 months ago

19.3.2

9 months ago

19.3.1

9 months ago

3.10.4

11 months ago

19.3.4

9 months ago

19.3.3

9 months ago

19.3.6

9 months ago

3.18.1

11 months ago

3.18.0

11 months ago

19.3.7

9 months ago

7.0.1

10 months ago

3.18.2

11 months ago

3.32.0

11 months ago

3.32.1

11 months ago

3.32.2

11 months ago

3.5.0

11 months ago

17.0.0

9 months ago

4.3.0

11 months ago

3.29.1

11 months ago

3.29.0

11 months ago

3.29.3

11 months ago

3.29.2

11 months ago

3.41.0

11 months ago

3.41.2

11 months ago

3.41.3

11 months ago

3.41.4

11 months ago

3.41.5

11 months ago

19.2.3

9 months ago

3.30.6

11 months ago

3.15.0

11 months ago

19.2.2

9 months ago

3.30.7

11 months ago

19.2.5

9 months ago

3.30.8

11 months ago

19.2.4

9 months ago

3.38.2

11 months ago

19.2.6

9 months ago

7.1.2

10 months ago

7.1.1

10 months ago

7.1.0

10 months ago

3.4.0

11 months ago

3.4.4

11 months ago

3.4.3

11 months ago

3.4.1

11 months ago

4.2.3

11 months ago

4.2.2

11 months ago

4.2.4

11 months ago

4.2.1

11 months ago

4.2.0

11 months ago

3.41.6

11 months ago

3.26.0

11 months ago

3.41.7

11 months ago

3.41.8

11 months ago

19.3.12

9 months ago

19.3.13

8 months ago

19.3.10

9 months ago

19.3.11

9 months ago

4.2.6

11 months ago

19.3.14

8 months ago

3.16.7

11 months ago

3.16.6

11 months ago

3.16.9

11 months ago

3.16.8

11 months ago

3.16.1

11 months ago

3.39.0

11 months ago

3.16.3

11 months ago

3.16.2

11 months ago

7.2.0

9 months ago

3.16.5

11 months ago

3.16.4

11 months ago

3.3.1

11 months ago

3.3.0

11 months ago

3.30.0

11 months ago

3.30.2

11 months ago

3.30.3

11 months ago

3.30.5

11 months ago

4.1.4

11 months ago

4.1.3

11 months ago

4.1.6

11 months ago

4.1.5

11 months ago

4.1.0

11 months ago

4.1.2

11 months ago

4.1.1

11 months ago

16.0.2

9 months ago

16.0.4

9 months ago

16.0.3

9 months ago

3.1.0

1 year ago

3.0.61

1 year ago

3.0.60

3 years ago

3.0.58

3 years ago