Documentation
¶
Overview ¶
Package proxy implements a forwarding proxy. It caches an upstream net.Conn for some time, so if the same client returns the upstream's Conn will be precached. Depending on how you benchmark this looks to be 50% faster than just opening a new connection for every client. It works with UDP and TCP and uses inband healthchecking.
Index ¶
- Constants
- Variables
- type HealthChecker
- type Options
- type Proxy
- func (p *Proxy) Addr() string
- func (p *Proxy) Connect(ctx context.Context, state request.Request, opts Options) (*dns.Msg, error)
- func (p *Proxy) Down(maxfails uint32) bool
- func (p *Proxy) Fails() uint32
- func (p *Proxy) GetHealthchecker() HealthChecker
- func (p *Proxy) Healthcheck()
- func (p *Proxy) SetExpire(expire time.Duration)
- func (p *Proxy) SetReadTimeout(duration time.Duration)
- func (p *Proxy) SetTLSConfig(cfg *tls.Config)
- func (p *Proxy) Start(duration time.Duration)
- func (p *Proxy) Stop()
- type Transport
Constants ¶
const ( ErrTransportStopped = "proxy: transport stopped" ErrTransportStoppedDuringDial = "proxy: transport stopped during dial" ErrTransportStoppedRetClosed = "proxy: transport stopped, ret channel closed" ErrTransportStoppedDuringRetWait = "proxy: transport stopped during ret wait" )
Variables ¶
var ( // ErrNoHealthy means no healthy proxies left. ErrNoHealthy = errors.New("no healthy proxies") // ErrNoForward means no forwarder defined. ErrNoForward = errors.New("no forwarder defined") // ErrCachedClosed means cached connection was closed by peer. ErrCachedClosed = errors.New("cached connection was closed by peer") )
Functions ¶
This section is empty.
Types ¶
type HealthChecker ¶
type HealthChecker interface {
Check(*Proxy) error
SetTLSConfig(*tls.Config)
GetTLSConfig() *tls.Config
SetRecursionDesired(bool)
GetRecursionDesired() bool
SetDomain(domain string)
GetDomain() string
SetTCPTransport()
GetReadTimeout() time.Duration
SetReadTimeout(time.Duration)
GetWriteTimeout() time.Duration
SetWriteTimeout(time.Duration)
}
HealthChecker checks the upstream health.
func NewHealthChecker ¶
func NewHealthChecker(proxyName, trans string, recursionDesired bool, domain string) HealthChecker
NewHealthChecker returns a new HealthChecker based on transport.
type Options ¶
type Options struct {
// ForceTCP use TCP protocol for upstream DNS request. Has precedence over PreferUDP flag
ForceTCP bool
// PreferUDP use UDP protocol for upstream DNS request.
PreferUDP bool
// HCRecursionDesired sets recursion desired flag for Proxy healthcheck requests
HCRecursionDesired bool
// HCDomain sets domain for Proxy healthcheck requests
HCDomain string
}
Options holds various Options that can be set.
type Proxy ¶
type Proxy struct {
// contains filtered or unexported fields
}
Proxy defines an upstream host.
func (*Proxy) GetHealthchecker ¶
func (p *Proxy) GetHealthchecker() HealthChecker
func (*Proxy) Healthcheck ¶
func (p *Proxy) Healthcheck()
Healthcheck kicks of a round of health checks for this proxy.
func (*Proxy) SetReadTimeout ¶
func (*Proxy) SetTLSConfig ¶
SetTLSConfig sets the TLS config in the lower p.transport and in the healthchecking client.
type Transport ¶
type Transport struct {
// contains filtered or unexported fields
}
Transport hold the persistent cache.
func (*Transport) Dial ¶
Dial dials the address configured in transport, potentially reusing a connection or creating a new one.
func (*Transport) SetTLSConfig ¶
SetTLSConfig sets the TLS config in transport.