Apple's Bonjour Sleep Proxy service is an open source[1] component of zero-configuration networking, designed to assist in reducing power consumption of networked electronic devices.[2] 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.[3]
Apple refers to the service as Bonjour Sleep Proxy in its support documents.[4] The service uses the Wake on Demand feature, first offered in Mac OS X Snow Leopard.[5]
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.
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.
The sleep proxy service is able to advertise any Bonjour-supported services, while the host computer sleeps. Some examples of supported services are:
Implementations on a local area network can be seen with Bonjour Browser.
mDNSResponder source code at www.macosforge.org, which includes a full implementation of the DNS-SD/mDNS Sleep Proxy Service, available under the Apache 2.0 Open Source license.