19.6.2 • Published 6 months ago

@push.rocks/smartproxy v19.6.2

Weekly downloads
-
License
MIT
Repository
-
Last release
6 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

7 months ago

10.0.6

7 months ago

10.0.7

7 months ago

10.0.8

7 months ago

10.0.9

7 months ago

19.0.0

6 months ago

3.24.0

9 months ago

10.0.0

7 months ago

10.0.1

7 months ago

4.1.8

9 months ago

10.0.2

7 months ago

4.1.7

9 months ago

10.0.3

7 months ago

10.0.4

7 months ago

4.1.9

9 months ago

18.2.0

6 months ago

3.2.0

10 months ago

3.12.0

9 months ago

4.0.0

9 months ago

3.40.0

9 months ago

5.0.0

8 months ago

15.0.2

7 months ago

15.0.0

7 months ago

15.0.1

7 months ago

3.14.1

9 months ago

3.37.0

9 months ago

3.14.0

9 months ago

3.37.1

9 months ago

18.1.0

7 months ago

3.37.2

9 months ago

3.14.2

9 months ago

3.37.3

9 months ago

3.1.3

10 months ago

3.13.0

9 months ago

10.0.12

7 months ago

10.0.11

7 months ago

10.0.10

7 months ago

19.5.11

6 months ago

19.5.10

6 months ago

3.25.1

9 months ago

3.25.0

9 months ago

3.25.3

9 months ago

3.25.2

9 months ago

3.25.4

9 months ago

3.22.0

9 months ago

5.1.0

8 months ago

3.22.1

9 months ago

19.5.13

6 months ago

19.5.15

6 months ago

19.5.17

6 months ago

19.5.16

6 months ago

10.2.0

7 months ago

19.5.19

6 months ago

19.5.18

6 months ago

19.5.20

6 months ago

13.1.3

7 months ago

19.5.22

6 months ago

19.5.21

6 months ago

13.1.2

7 months ago

3.9.3

9 months ago

3.9.2

9 months ago

19.6.1

6 months ago

18.0.2

7 months ago

3.9.1

9 months ago

19.6.0

6 months ago

18.0.1

7 months ago

3.9.0

9 months ago

18.0.0

7 months ago

3.19.0

9 months ago

19.6.2

6 months ago

3.9.4

9 months ago

3.10.1

9 months ago

3.8.0

9 months ago

3.33.0

9 months ago

3.10.0

9 months ago

3.10.3

9 months ago

3.10.2

9 months ago

19.5.24

6 months ago

19.5.23

6 months ago

19.5.26

6 months ago

19.5.25

6 months ago

3.22.4

9 months ago

3.22.3

9 months ago

3.22.5

9 months ago

11.0.0

7 months ago

3.23.1

9 months ago

3.23.0

9 months ago

6.0.1

8 months ago

6.0.0

8 months ago

10.1.0

7 months ago

19.5.7

6 months ago

4.1.10

9 months ago

19.5.9

6 months ago

4.1.11

9 months ago

4.1.16

9 months ago

19.5.2

6 months ago

3.8.1

9 months ago

19.5.4

6 months ago

4.1.12

9 months ago

19.5.3

6 months ago

4.1.13

9 months ago

19.5.6

6 months ago

4.1.14

9 months ago

19.5.5

6 months ago

4.1.15

9 months ago

3.11.0

9 months ago

3.7.1

9 months ago

3.7.0

9 months ago

3.34.0

9 months ago

3.20.0

9 months ago

3.20.2

9 months ago

3.20.1

9 months ago

19.4.1

6 months ago

19.4.0

6 months ago

3.17.0

9 months ago

3.7.3

9 months ago

19.4.2

6 months ago

3.7.2

9 months ago

3.17.1

9 months ago

3.31.0

9 months ago

3.31.1

9 months ago

3.31.2

9 months ago

3.6.0

9 months ago

12.0.0

7 months ago

3.28.6

9 months ago

3.28.5

9 months ago

3.28.0

9 months ago

3.28.2

9 months ago

3.28.1

9 months ago

3.28.3

9 months ago

3.21.0

9 months ago

19.3.0

6 months ago

19.3.9

6 months ago

19.3.2

6 months ago

19.3.1

6 months ago

3.10.4

9 months ago

19.3.4

6 months ago

19.3.3

6 months ago

19.3.6

6 months ago

3.18.1

9 months ago

3.18.0

9 months ago

19.3.7

6 months ago

7.0.1

8 months ago

3.18.2

9 months ago

3.32.0

9 months ago

3.32.1

9 months ago

3.32.2

9 months ago

3.5.0

9 months ago

17.0.0

7 months ago

4.3.0

8 months ago

3.29.1

9 months ago

3.29.0

9 months ago

3.29.3

9 months ago

3.29.2

9 months ago

3.41.0

9 months ago

3.41.2

9 months ago

3.41.3

9 months ago

3.41.4

9 months ago

3.41.5

9 months ago

19.2.3

6 months ago

3.30.6

9 months ago

3.15.0

9 months ago

19.2.2

6 months ago

3.30.7

9 months ago

19.2.5

6 months ago

3.30.8

9 months ago

19.2.4

6 months ago

3.38.2

9 months ago

19.2.6

6 months ago

7.1.2

7 months ago

7.1.1

7 months ago

7.1.0

7 months ago

3.4.0

9 months ago

3.4.4

9 months ago

3.4.3

9 months ago

3.4.1

9 months ago

4.2.3

9 months ago

4.2.2

9 months ago

4.2.4

8 months ago

4.2.1

9 months ago

4.2.0

9 months ago

3.41.6

9 months ago

3.26.0

9 months ago

3.41.7

9 months ago

3.41.8

9 months ago

19.3.12

6 months ago

19.3.13

6 months ago

19.3.10

6 months ago

19.3.11

6 months ago

4.2.6

8 months ago

19.3.14

6 months ago

3.16.7

9 months ago

3.16.6

9 months ago

3.16.9

9 months ago

3.16.8

9 months ago

3.16.1

9 months ago

3.39.0

9 months ago

3.16.3

9 months ago

3.16.2

9 months ago

7.2.0

7 months ago

3.16.5

9 months ago

3.16.4

9 months ago

3.3.1

9 months ago

3.3.0

9 months ago

3.30.0

9 months ago

3.30.2

9 months ago

3.30.3

9 months ago

3.30.5

9 months ago

4.1.4

9 months ago

4.1.3

9 months ago

4.1.6

9 months ago

4.1.5

9 months ago

4.1.0

9 months ago

4.1.2

9 months ago

4.1.1

9 months ago

16.0.2

7 months ago

16.0.4

7 months ago

16.0.3

7 months ago

3.1.0

1 year ago

3.0.61

1 year ago

3.0.60

2 years ago

3.0.58

2 years ago