# Bonjour Sleep Proxy

Apple's Bonjour Sleep Proxy service is an open source component of zero-configuration networking, designed to assist in reducing power consumption of networked electronic devices. It allows a device providing services, such as file sharing, printer sharing, or remote log-in, to sleep, i.e. enter a low-power mode, while its services remain available, even world-wide, by registering with a sleep proxy server on the local network. The sleep proxy server continues to both advertise the services on the local network on behalf of the sleep host, and listen for incoming connections whether the services are available only locally or across the Internet. When any device attempts to use any proxied service, the proxy server wakes the sleeping device and the service works as if the sleeping device had remained fully powered.
Any device that can act as a sleep proxy server advertises this on all LANs of which it is a part. A device providing network services, such as file sharing, when its services are not actively being used can register its services with an available sleep proxy server and sleep until one of its services is needed. The sleep proxy server continues to advertise the services in Multicast DNS (mDNS) on behalf of the sleeping host. When the sleep proxy server sees an attempt to use any such service it wakes the sleeping host and the service proceeds normally, and in the case of SSH, a server with an active session can register with a proxy, sleep, and be awakened with the next received packet, continuing the same session.
Apple refers to the service as Bonjour Sleep Proxy in its support documents. The service uses the Wake on Demand feature, first offered in Mac OS X Snow Leopard.

## Details
### Address Resolution Protocol and Neighbor Discovery Protocol

When a sleep proxy service accepts a request to proxy, it in effect takes over the IP addresses of proxied servers by announcing this through Address Resolution Protocol (ARP) and Neighbor Discovery Protocol (NDP). To claim traffic for the proxied host’s IPv4 addresses, it sends gratuitous ARP announcements so that packets addressed to the proxied server go to the proxy instead, and for IPv6 it does the same using the analogous NDP. To maintain the association, it responds on behalf of the sleeping host to ARP and NDP requests. This process effectively maps the IP addresses of proxied servers to a physical port of the proxy server.
When a packet arrives, from anywhere on the Internet, for a proxied service, the sleep proxy server wakes the sleeping host and reverses the above process, using ARP and NDP again to re-associate the same IP addresses with the proper machine, and any service proceeds as if the server had not slept.
This may appear confusing to network administrators who are not expecting the behaviour of changing MAC addresses.

### Wake-on-LAN and magic packets

The method by which a sleep proxy server wakes a sleeping host is wake-on-LAN. The network interface of a sleeping host with this capability will wake the machine when it receives a specific series of bits, and a packet containing this pattern is a magic packet. Early implementations of Wake on LAN (WoL) required wired network interfaces. In the wireless case (Wi‑Fi), the wake-up packet is sent via Wireless Multimedia Extensions (WMM). In either case the function must be supported by the network interface. Apple provides instructions for checking compatibility with this feature for Macintosh computers.

### Supported services and examples

The sleep proxy service is able to advertise any Bonjour-supported services, while the host computer sleeps. Some examples of supported services are:
* File sharing: a host supporting the sleep proxy service, which offers file services, may go to sleep as needed. When someone needs to access shared files, the host will wake up automatically.
* iTunes library sharing: the computer hosting the iTunes library may go to sleep, and will automatically wake when someone wishes to browse the iTunes library from a different PC.
* Printer sharing: a printer may be connected and shared from a computer supporting sleep proxy service. The computer can go to sleep when not in use, but will wake when needed to service a print job being sent from a different computer.
* SSH: a computer offering SSH access may go to sleep, and awaken via the sleep proxy service when an SSH login is initiated.
* Desktop sharing: similar to above examples.

## Implementations

Implementations on a local area network can be seen with Bonjour Browser.
* Apple AirPort Express with firmware version 7.4.1 or 7.4.2
* Apple AirPort Extreme with firmware version 7.4.1 or 7.4.2
* Apple AirPort Time Capsule
* Apple TV (all generations)
* HomePod (2018)
* HomePod mini (2020)
* Computers running Mac OS X Snow Leopard act as Bonjour sleep proxy servers when Internet sharing is enabled.