mholt/caddy-l4

How can I handle port ranges?

Open

#299 opened on Mar 15, 2025

 (2 comments) (1 reaction) (0 assignees)Go (114 forks)github user discovery
enhancementhelp wanted

Repository metrics

Stars
 (1,738 stars)
PR merge metrics
 (Avg merge 14d 19h) (7 merged PRs in 30d)

Description

I am attempting to configure an IRC bouncer (via ZNC) to sit behind a Caddy reverse-proxy while supporting DCC via the port-range below. Unfortunately it seems that either this is not supported or I have misconfigured my Caddyfile somehow and I am not sure how to resolve it.

Configs I have attempted:

{
    layer4 {
      # For SSL/TLS IRC connections (port 6697):
      0.0.0.0:6697 {
        route {
          tls            # Terminate TLS here
          proxy {
            proxy_protocol v1
            upstream znc:6697
          }
        }
      }

      # For plain IRC connections (port 6667):
      0.0.0.0:6667 {
        route {
          proxy_protocol
          proxy {
            proxy_protocol v2
            upstream znc:6667
          }
        }
      }

      # For the DCC port range:
      0.0.0.0:30000-31000 { <-------- this causes the error
        route {
          proxy_protocol
          proxy {
            proxy_protocol v2
            upstream znc:30000-31000
          }
        }
      }
    }
}
{
  layer4 {
    # For SSL/TLS IRC connections (port 6697):
    0.0.0.0:6697 {
      route {
        tls {
          tls_wrapping
        }           # Terminate TLS here
        reverse_proxy znc:6697 {
          proxy_protocol v2
        }
      }
    }
  
    # For plain IRC connections (port 6667):
    0.0.0.0:6667 {
      route {
        reverse_proxy znc:6667 {
          proxy_protocol v2
        }
      }
    }
  
    # For the DCC port range:
    0.0.0.0:30000-31000 {
      route {
        reverse_proxy znc:30000-31000 {
          proxy_protocol v2
        }
      }
    }
  }
}

Error message:

Error: loading initial config: loading new config: loading layer4 app module: provision layer4: server 'srv2': route 0: 
position 1: loading module 'proxy': provision layer4.handlers.proxy: upstream 0: znc:30000-31000: port ranges not currently supported

Contributor guide