Part of the reason why maintaining a solid AirPort wireless connection is so difficult is the different number of wireless encryption protocols available today.
You are currently browsing articles tagged leopard.

Symptoms
- AirPort wireless connection randomly stops working, even though signal strength to base station is good.
- Wireless connection strength drops, clicking on AirPort starts scanning, wireless strength returns to full, but Internet connection is lost.
- Can’t create wireless connection to DLink DIR-625 wireless router after upgrading to 10.5.2.
Possible Causes
- AirPort attempts to connect to stronger “Recent networks” listed in preferences file /Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
- Apple has updated its AirPort wireless connectivity to a more recent draft of the “wireless n” proposed standard. This is a faster version of wifi than the previous 802.11 wireless g, b, and a standards. (References: Wikipedia 802.11, Discussions at Apple.com).
- [Added 080618]: AirPort is finding neighboring wireless router base stations on the current wifi channel and is attempting to connect to them. (References: Gedblog, TUAW.com)
- [Added 080824]: AirPort attempts to connect to based stations listed in “Preferred networks”, listed in System Preferences => Network => Advanced => AirPort => Preferred Networks. See the fix for AirPort Preferred Networks problem.
- [Added 090105]: Real Player Downloader. Mechanics of problem unknown. See comment below by Jerry Zakariasen.
Diagnostics
- [Added 080618]: AP Grapher reports on nearby wireless internet base station signals. This is useful in determining if you’re having interference or competing wireless access point problems. If this is the case you can try changing wireless channels on your router.
- [Added 080618]: iStumbler is another wireless base station search tool similar to AP Grapher that you may find more to your liking.
Fixes/Solutions/Workarounds
Please, before implementing any of these fixes, try them one at a time and wait to see if there is any improvement in the situation before trying the next. Keep track of which fixes you have tried and report back when one of them (or none of them) in particular solved your problem so that we know which solutions are useful and which are less likely to help, thus moving forward in our knowledge of how to diagnose and fix wireless dropouts on Apple AirPort connections. Many thanks. ~ Ben.
- Backup /Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist file, then delete it. Reboot. Leopard will create a new AirPort preferences file with a single entry with your current wireless base station.
- For D-Link DIR-625 wireless router (from discussions.apple.com):
- Within Setup => Advanced => Advanced Wireless, change RTS Threshold to 2306
- Change Fragmentation Threshold to 2306
- Use “Mixed 802.11n, 802.11g, and 802.11b” within Setup => Wireless Settings
- [Added 080618]: Change wireless channel on your wifi router (e.g. AirPort Extreme base station, NetGear, Linksys) from 6 (the default) to anything from 1-4 or 8 to 11. Please refer to your router’s instruction manual on how to do this. The reason for avoiding channels 5 and 7 is that wifi routers by design will automatically switch to one channel above or below their current channel when wifi signal noise passes a certain value. Thus, if you were having problems on channel 6, your router and AirPort have already tried channels 5 and 7 and you’re still experiencing problems.
- [Added 080618]: If possible, use the 5Ghz transmission frequency/band for your wireless router. Most wireless devices (nearly all wireless routers and cordless telephones) in homes use the 2.4Ghz transmission band. Avoiding this band will result in much less radio noise. Again, this is a setting on your wireless access point rather than on your Mac. Please refer to your wireless base station’s instructions on how to change radio frequency (if possible).
- [Added 080618]: Keychain Access is an Apple program that saves passwords to websites, to your Mac itself, to wireless base stations, etc. The keychain entries related to wireless base stations is a potential cause of wireless drops in Leopard 10.5.2 with the theory being that Keychain Access was modified in this release, breaking (somewhat) keychain items created in older versions (10.5.1 and prior). Deleting and recreating the keys in 10.5.2 and beyond may resolve this issue if you are affected.
Launch Keychain Access within Finder: Applications => Utilities => Keychain Access. On the top left, select System, underneath login. Find the name of your wireless base station or router, often called an SSID in networking terms. For me it’s WANADOO-D310. Under the Kind column it should read AirPort network password. You may find multiple keychain entries for wireless base stations you’ve used in the past. We want to delete them all, but before doing that, save their passwords. You do this by right clicking on the item, for me WANADOO-D310, and choosing Copy Password to Clipboard. If you are asked to allow access to this item by kcproxy, click Allow.
Then create a new text file somewhere on your mac and paste the password that’s been copied to your clipboard. This will make it easier when you have to reconnect to this base station. You might want to note which base station/wireless router this password is related to while doing this. I did this by simply writing the name of the wireless router beside the password. After backing up the passwords, delete all the keychain items of kind AirPort network password. Now turn off the AirPort connection by clicking on the AirPort menu bar icon (looks like the image at the top of this post) and selecting Turn AirPort Off. Open System Preferences => Network. You’ll notice that Network Name select list will no longer have your base station listed. Click Turn AirPort On. AirPort will search for wireless networks (takes about 30 seconds) and will eventually pop up with a window saying None of your preferred networks are available, but you should see your wireless base station listed as one of the networks.
Select your network and click Join. You’ll be asked for your password. Hopefully you remembered to save that password somewhere and can simply copy and paste it back in. (Use right click => Paste rather than Apple Key + V, which won’t work for this password field). After this you should be reconnected to your wifi base station. If you return to your Keychain Access window, you should once again see your base station listed with the System Keychains. You can close the Keychain Access and Network preferences pane windows. If you have multiple wireless networks that you use often, you’ll have to search and reconnect to them with the passwords you’ve saved. Hopefully the recreated keychain items will keep you connected. - [Added 080624]: Remove Preferred Networks. From within System Preferences => Network => Advanced => AirPort, using the minus button, remove all preferred networks except for the current wireless access point you’re connected to.

- [Added 090105]: Remove Real Player Downloader. Jerry Zakariasen mentions in the comments below that uninstalling Real Player Downloader for Mac has fixed wireless network drops on his mac. See his comment below for more details. Thanks Jerry.
Background
Just after upgrading to 10.5.2 I noticed that once in a while my AirPort wireless connection would drop to 2 or 3 bars, then return to full signal strength, but I couldn’t access the Internet after that. There didn’t seem to be any pattern to these dropouts of wireless connection. No interference from neighboring base stations either. Yet everything was ultra stable with 10.5 and the only change I made was upgrading (finally) to 10.5.2.
After doing some research, I had a theory that AirPort was searching through old wireless connections within /Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist constantly looking for a better signal. And whenever the current wireless connection suffered from minor transient interference (say cordless telephones), it would immediately try to connect to another base station or try to switch to a different channel. Have a look at your version of the airport preferences file by navigating to it in Finder, starting with Macintosh HD, then Library, Preferences, and finally within the SystemConfiguration folder. You can simply hit enter with the file highlighted to use Quick Look. You can also use Terminal to quickly print the file to the screen with the following command: cat /Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
Once the AirPort control software in 10.5.2 set about trying to find a better wireless connection, it would never successfully get back your original wireless connection which was really fine. Hence, from time to time, you would see a slight drop in wireless signal strength, then after clicking on the AirPort wireless icon, it would scan for networks for a few seconds, then return to full strength, yet you would have already lost Internet access.
The fix is simple:
- Drag the /Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist file to your desktop (as a backup),
- Delete the file within SystemConfiguration,
- Reboot and let Leopard create a new airport preferences file with only your current wireless connection listed within it.
With only one base station listed in “Recent Networks” within the file, AirPort won’t try scanning for other stronger networks and you’ll stay connected.
That’s the theory anyways. It’s worked for me so far. Hope it helps you too.
Leave a comment if you have questions or have tried the fix with success/failure.
How to fix Slow Web Browsing and Slow Internet in Leopard (10.5.x)
Symptoms
- Web pages load slowly in Safari or Firefox in Leopard.
- Web sites won’t load, only load partially, stop loading after a few hours.
- Slow DNS (domain name) lookup in Leopard. First load of web site is slow with “looking up domain” in browser status bar.
- Once website is loaded, browsing to that site is fast.
- AirPort wireless strength drops, then Internet connection is lost (see related post).
- Email programs are slow in connecting to servers.
- SSH sessions are slow to connect to remote servers.
Possible Causes of Slow Internet under Leopard
- Your ISP’s DNS servers are (sometimes) slow to respond due to high traffic.
- Firefox, Camino, Safari is requesting domain name lookups in IPv6 format (2001:db8::1428:57ab), but your DSL router/cable modem answers with IPv4 addresses (192.0.2.235) (references: mozillazine.org, mozilla.org bug, arstechnica.com). Safari may not be affected by this as WebKit is said to use IPv4 domain lookups first, then uses IPv6 if IPv4 fails.
- Your router, acting as a DNS Proxy, doesn’t recognize nor forward IPv6 domain name lookup requests.
- Leopard is now requesting SRV (service) records for domain name lookups. Your router does not recognize nor forward to SRV requests.
- Your ISP’s DNS servers don’t recognize or doesn’t respond to SRV queries or respond with NXDOMAIN.
- [Added 080618] Poor wireless router performance in general (references: entropy.ch). To test this, try connecting directly to your DSL router/modem if you are using an intermediate router such as an Apple AirPort Base Station, or NetGear/Linksys wireless router and seeing if web and internet speeds increase.
Fixes/Solutions/Workarounds
- Use better faster DNS servers, like OpenDNS.org (208.67.222.222, 208.67.220.220).
- Connect directly to DNS servers to avoid DNS forwarding through your router (acting as a DNS proxy).
- Turn off IPv6 DNS lookups in Firefox/Camino (references: mozilla.org).
- If DNS forwarding is required, change the DNS servers directly on the router.
- Update your router’s firmware (references: jungledisk.com, ubuntu.com) for better SRV and IPv6 handling and better performance overall.
- Below are detailed instructions on applying these fixes to slow dns lookups/slow Internet on Leopard
Details
After upgrading to Leopard, plenty of Mac OS X users have complained of “slow internet” when browsing the web, yet Windows PCs or Macs with Tiger (10.4) on the same network are much faster.
DNS Lookups
A domain name lookup or DNS lookup is done every time you visit a web page, say “apple.com”, as you’re actually visiting “17.149.160.49″. A DNS Resolver on your computer sends a request to a DNS Server that handles this lookup or translation from names (easy to remember) to numbers (hard to remember). Once your browser has this numerical IP address it can start loading the web pages at that server location.
Domain Name System Lookups in Leopard
With Leopard, a major change occurred in DNS lookups. Any program in Leopard that can use version 6 IP addresses (IPv6 explained below) will send out a new type of DNS lookup request - the SRV Record. In Tiger and previous OS X versions, DNS lookups were A record requests.
SRV records are new (sadly, 8 years old is new in the DNS world), provide more information than A records, but have terrible support in terms of hardware (your DSL router or cable modem) and DNS servers that answer with SRV information. For every SRV request that Leopard sends it must wait for a valid reply. If the request fails, Leopard must try again. If it fails again, Leopard will finally ask for an A record. This is one reason why Mac users are experiencing slow Internet on new Macs with Leopard or after upgrading to Leopard from Tiger.
Domain Name Lookup Chain
Diagnosing slow Internet problems under Leopard is difficult due to the many different slowdowns that can occur along the domain name lookup chain when connecting to the Internet in OS X. For an application like Firefox or Safari to find a domain name, this is roughly what happens:
- Firefox/Safari is asked to load a web page at a domain name (example: “apple.com”).
- Browser starts work on getting an IP address for that domain (a domain name lookup).
- Browser checks for recently translated domain names in its own internal “cache” and thus already has the IP address.
- If “apple.com” is not found in cache, Firefox/Safari then asks Directory Services (an OS X program that does DNS lookups) for the answer.
- Directory Services (DS) searches for the domain in its own DS cache (view the DS cache using Terminal: dscacheutil -cachedump -entries).
- If domain is not found in cache, DS checks flat (text) files such as /etc/hosts for the domain name (see the file using Terminal: cat /etc/hosts).
- If domain is still not found then DS sends a domain name lookup request to the first DNS server listed for your AirPort wireless card or your Ethernet card (your network interfaces). The first (and usually only) DNS server is often your router (often listed as 192.168.1.1 in System Preferences => Network => Advanced => DNS tab).
- If the router doesn’t recognize the name lookup request (SRV/IPv6), the request will be either ignored, returned without result, returned with error. If the router does recognize the DNS request, it checks its own DNS cache for a matching domain lookup.
- If domain name is not found in cache, the router forwards the request to the ISP’s DNS server.
- If the first ISP DNS server doesn’t respond or doesn’t have the record, the router sends a second lookup request to the next DNS server listed in its configuration. Continue until all DNS servers are exhausted.
- When name lookup result is received by router, it saves the result to cache, then forwards the domain name record back to the requesting computer.
- Directory Services on Leopard, receives the answer, places it in cache, then returns the results to the requesting application: your browser.
- Firefox/Safari receives the DNS record, with IP address, stores it in cache, then starts to retrieve the web page at that location.

(Illustration by Lion Kimbro on Wikipedia - Domain Name Systems article)
Any one of the links in the chain can be a potential source of slow Internet speeds when browsing or retrieving mail, etc. The difficulty lies is finding out where the problem exists and how it can be fix. Compound this complexity with the number of different DSL routers in use in homes, the number of different firmware (software inside the router), number of different ISP DNS servers
Caches
Caches store recent domain name lookup results in order to save time when the domain is requested again. Each time a domain name lookup is made, caches are checked to see if the lookup has occurred recently and if so, use the cache result. If no result is found in cache, the domain name lookup has failed and the DNS lookup request continues down the chain. A domain lookup may fail all the way down the chain until it’s finally resolved with the second or third DNS server listed, taking maybe 15 seconds to finally succeed. But, once domain lookup has been successfully performed, this domain request “answer” is cached all the way back up the chain, for varying amounts of time. Browsers like Safari and Firefox normally cache domain name lookups for 1 minute (30 minutes if you’re Internet Explorer in Vista). Leopard’s Directory Services program caches lookups for one hour (3600 seconds) by default.
Once a successful domain lookup has occurred, web pages from the same site will load very quickly, since the domain and its IP address are known and cached in memory. When the cached domain lookup result expires, the vicious cycle of slow domain lookups restarts. This often leads to the confusing pattern of fast Internet / slow Internet performance that can be seen sporadically throughout a browsing session.
IPv6
IPv6, the new way of addressing all things on the Internet, is important and necessary as we’ll eventually run out of IPv4 addresses (like 17.149.160.49). But part of the issue with slow browsing and slow Internet on Leopard is the combination of how IPv6 is used in Mac OS X and the current state of DSL routers and cable modems.
Whenever a program on Leopard can use IPv6 addressing, such as Firefox, it will request IP addresses for domains in IPv6 and if that fails, Firefox will then try IPv4 domain lookups. The reason this adds to the slow Internet problem is that many routers and DSL or cable modems in peoples homes are not capable of handling/routing IPv6 domain name queries (properly). This can cause repeated, failed DNS queries in IPv6 format, with the requesting application eventually falling back to sending IPv4 domain lookup requests that are successfully answered. The unfortunate problem with this “IPv6 then IPv4″ order of domain lookups is users end up with delays of 5 to 10 seconds “looking up” a domain name, which is not a very long time to wait, but suffering short delays every time you visit a different website can be extremely frustrating.
SRV (Service Record) Requests
Part of the issue may be related to Apple’s decision to follow the Internet Engineering Task Force’s recommendation of using SRV queries instead of “A record” queries when looking up domain names in Leopard.
The problem with Leopard asking for SRV records from DNS servers is that many DNS servers still don’t recognize or respond to SRV type DNS requests, or respond with a non-existent domain (NXDOMAIN) error code. This is not exactly Apple’s fault for asking, it’s actually the fault of DNS server owners who are not updating their servers to the latest standards. Regardless, whenever a program like a web browser requests a DNS record and gets failed responses, or no response at all, the program retries its requests, but only after a certain delay. Each failed SRV request and subsequent retry adds time the user must wait before the browser or application eventually gives up on the SRV requests and tries an old-school basic A record request in an attempt to get the IP address of the domain name. And all DNS servers answer to A record requests, even the old dingy ones not following the latest IETF standards. You, the user, sees this request — no response — retry dance as the browser taking a long time “Looking up domain.com….”, often seen as such on the browser status bar at the bottom left hand corner of the window. Only when the browser or application has received a valid IP address from a domain lookup can it contact the web server and start to download the HTML and display the page.
Timeouts
The delay between lookup retries is important to prevent overloading DNS servers, DNS resolvers (like Directory Services on your Mac) and simply makes sense. It’s similar to walking up to someone’s house and knocking on the door: Normally you wait a few moments for a response before trying again. If you don’t wait, you don’t know whether no one’s home, or whether they’re just taking a few seconds to respond. Continued knocking doesn’t help you. (And perhaps will earn you a stern look if not make you the target of a hissy fit).
Hammering a DNS server with domain lookups without pause is not very productive since the DNS server will simply drop (not answer) requests that it cannot handle within a timely fashion, based on its current load and worse, may get you blocked from the DNS server.
Next we’ll see how we can solve or workaround the issues discussed above that could be slowing down Leopard’s Internet speed.
Solutions
- Direct DNS / Better DNS
- Disable IPv6 DNS Lookups
- Update DNS Servers on Router
- Update Router Firmware
Direct DNS / Better DNS
Update 080606: Leopard 10.5.3 may have changed the order in which DNS Servers are used.
Update 080606: DNS servers entered on a DHCP configured setup are used in reverse order. I.e. the last server entered is the first to be used. If you’ve manually configured a network location, DNS servers are used in the order that you’ve entered them/see them.
New 080606: If you wish to save your current network setup and have the option of returning to it easily, follow the instructions for Creating a New Network Location. Otherwise, follow the instructions immediately below to quickly add new DNS servers.
Add DNS servers to Current Network Configuration
This is the quickest & easiest way to use new DNS servers, which is to simply add them to the DNS tab found in System Preferences => Network => Advanced => click on DNS tab.
Click on the + sign at the bottom left hand corner near IPv6 or IPv6 addresses and type in the addresses of the DNS servers you wish, in reverse priority order. (Recommended: OpenDNS servers at 208.67.220.220 and 208.67.222.222). I.e. the server that you want to use first, enter it last. Afterwards, click Ok. Then in the Network pane, click Apply to make your changes active. If you’re using an AirPort wireless connection, wait a few moments for the connection to be re-established
Creating a New Network Location
The advantage of creating a new network location is the ease of which you can move back and forth between different network setups. By creating and using a new network location, you can always revert your changes by simply selecting your original (Automatic) network location from the Location drop down list.
In Leopard, open System Preferences => Network => click the Advanced button (bottom right corner)

Click TCP/IP tab (top left).
Write down on a piece of paper (or in TextEdit) the IPv4 Address, Subnet Mask (255.255.255.0), Router, and Configure IPv6 setting. Click Cancel.

Find the Location drop down at top of the Network preferences pane. Click it and choose Edit Locations.

Highlight “Automatic” if not already
Click the Gear icon on the bottom center, choose Duplicate Location

Choose a name, I used “Home”.
Change the Location drop down box by clicking on “Automatic” and then switch it to “Home” (or the name you chose in the last step)
You’ll see the following:

Select Airport on the left (or Ethernet if you’re not using a wireless connection).
Click Advanced at the bottom right.
Click on the TCP/IP tab-button.
Change the Configure IPv4 drop down box to “Manually”.
Here’s where you use the values you saved in Step 2. Fill out IPv4 address, subnet mask, router, configure IPv6 settings. Do not click OK, instead click on DNS near the top.
Click the + button, bottom left hand corner. This creates a blue outline under DNS Servers on the left half of this window.


Enter in the DNS server of your choice. I recommend OpenDNS at 208.67.222.222. (Don’t include a period at the end). Add a second OpenDNS server by clicking again on the + button and entering 208.67.220.220. These DNS servers will automatically redirect you to the closest / best server for you, regardless of whether you’re in France (like me) or in North America. Click OK. You should be returned to the Network preferences pane and see something like the following:

At this point you’ve created a new Location called “Home”, having setup AirPort or Ethernet with the correct settings and “Services” (i.e. DNS), but none of these changes have been made active. Let’s make a backup of the configuration file that will be updated before you apply your changes. In Finder, click on the hard disk icon at the top left corner (usually Macintosh HD), then navigate to this directory: /Library/Preferences/SystemConfiguration and find this file: preferences.plist. Simply copy the file to your Documents folder or to a spot of your choice. If you have to rollback the applied changes, you can copy this file back to the above location. If you’re using Time Machine, this file should be backed up already. Now you know where this file is, so replacing it with a Time Machine version should be straightforward.
Before we make our changes effective, we’re going to check how DNS requests are handled now, before the changes, and after to make sure we’ve changed our Network Settings properly.
Leave the Network window open as is and open up a Terminal window. We’re going to be using the tcpdump program to listen to DNS traffic between your computer and your DNS server.
Type this command and hit Enter: sudo tcpdump -i en1 -s 128 port 53
(If you’re using Ethernet with a cable, use en0 instead of en1, which is the AirPort wireless interface).
Supply your password when asked to do so.
You should see something like the following:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on en1, link-type EN10MB (Ethernet), capture size 96 bytes
tcpdump should now be running.
Open up another Terminal window and type the following command: curl http://www.csu.edu
This uses the curl program to read the web page located at www.csu.edu.
Going back to your tcpdump window you should see something similar to this:
00:31:37.026520 IP 192.168.1.132.56645 > WANADOO-D310.domain: 19279+ SRV? _http._tcp.www.csu.edu. (40)
00:31:37.029352 IP WANADOO-D310.domain > 192.168.1.132.56645: 19279* 0/0/0 (40)
00:31:37.029849 IP 192.168.1.132.56646 > WANADOO-D310.domain: 49549+ SRV? _http._tcp.www.csu.edu. (40)
00:31:37.032657 IP WANADOO-D310.domain > 192.168.1.132.56646: 49549* 0/0/0 (40)
00:31:37.034345 IP 192.168.1.132.56647 > WANADOO-D310.domain: 46004+ A? www.csu.edu. (29)
00:31:37.279043 IP WANADOO-D310.domain > 192.168.1.132.56647: 46004 1/0/0 A www.csu.edu (45)
Notice 192.168.1.132. That’s me, or really, my MacBook Pro’s AirPort wireless card. Then there’s a greater than sign (>) showing the direction of DNS traffic. WANADOO-D310 is my DNS server, which is actually the DSL modem/router, a.k.a. 192.168.1.1, which is passing domain name lookups to the real DNS servers at my Internet Service Provider (WANADOO, yeah I know goofy name). Remember the network settings we wrote down before starting all this? You’ll notice that the DNS server is 192.168.1.1.
OK, we’ve got a baseline of what our Mac is doing when looking up domain names, let’s apply our new network location “Home” that we created and see the difference.
Back on the Network preference pane, notice the Apply button on the bottom right hand corner. Once you apply your changes, your Mac will begin using the new Location you’ve created.
Take the plunge and click on Apply.
For AirPort wireless connections, you may have to click the Turn AirPort Off button, wait fifteen seconds, then click Turn AirPort On again in order for the new DNS settings to be used.
Going back to the Terminal window where we executed the curl command, and with our changes set, let’s execute another: curl http://www.unc.edu
Results will look like the following:
00:32:33.562589 IP 192.168.1.132.56663 > resolver1.opendns.com.domain: 39356+ SRV? _http._tcp.www.unc.edu. (40)
00:32:33.767237 IP resolver1.opendns.com.domain > 192.168.1.132.56663: 39356 NXDomain 0/0/0 (40)
00:32:33.767856 IP 192.168.1.132.56664 > resolver1.opendns.com.domain: 62833+ SRV? _http._tcp.www.unc.edu. (40)
00:32:33.809161 IP resolver1.opendns.com.domain > 192.168.1.132.56664: 62833 NXDomain 0/0/0 (40)
00:32:33.811130 IP 192.168.1.132.56665 > resolver1.opendns.com.domain: 45293+ A? www.unc.edu. (29)
00:32:33.853070 IP resolver1.opendns.com.domain > 192.168.1.132.56665: 45293 1/0/0 A www.unc.edu (45)
Notice what’s changed? WANADOO-D310.doman has changed to resolver1.opendns.com.domain. This is OpenDNS’ name for the DNS server we started using, 208.67.222.222, which we entered as our DNS for the “Home” location. Also, note how instead of just getting a 0/0/0 response, we’re getting NXDOMAIN 0/0/0? That’s at least the DNS server responding saying: that domain doesn’t exist (not exactly true, since the domain does exist, but it just doesn’t have an SRV record), rather than the DNS server sending back nothing, not even an error code. Also, notice how our Mac tried twice on asking for SRV records, and the DNS server responded twice, that no record exists for that domain, and then finally our Mac asks for an A record (A?) and gets one answer record back (1/0/0 A ww.unc.edu).
If you want to see a domain that actually has a proper SRV record, try this in the curl terminal window: curl http://s3.amazonaws.com
Results should be something like this:
09:36:56.440037 IP 192.168.1.132.61010 > resolver1.opendns.com.domain: 34536+ SRV? _http._tcp.s3.amazonaws.com. (45)
09:36:56.671881 IP resolver1.opendns.com.domain > 192.168.1.132.61010: 34536 2/0/0 CNAME s3-directional-w.amazonaws.com., (97)
09:36:56.673894 IP 192.168.1.132.61011 > resolver1.opendns.com.domain: 18143+ A? s3.amazonaws.com. (34)
09:36:56.715913 IP resolver1.opendns.com.domain > 192.168.1.132.61011: 18143 2/0/0 CNAME s3-1.amazonaws.com., A s3.amazonaws.com (69)
09:36:57.263186 IP 192.168.1.132.61012 > resolver1.opendns.com.domain: 32069+ PTR? 171.206.21.72.in-addr.arpa. (44)
09:36:57.306060 IP resolver1.opendns.com.domain > 192.168.1.132.61012: 32069 1/0/0 PTR s3.amazonaws.com. (74)
Here we’re getting 2 answer records (the “2″ in 2/0/0) on the SRV requests, which are CNAME records, first being s3-directional-w.amazonaws.com, second being s3-1.amazonaws.com. CNAME records are “nickname” records, which point to true name, or A Record. Right after that our Mac asks for an A record on the first CNAME that was returned to us (s3-directional-w.amazonaws.com) to get back the actual IP address (72.21.207.246), which you can verify by using the dig program.
This fix alone has made my Internet connection much faster since my ISP’s DNS servers were sometimes under heavy load and slow to respond to DNS queries. Most of the time, I’d get name requests done in 200-400ms. Not noticeably slow. But, on occasion domain name lookups would timeout after 7 seconds, multiple times, resulting in up to 21 seconds of waiting for a single name lookup request to occur. This is excruciatingly long when I often open up multiple different websites one right after another when starting a browsing session. To make matters worse, many websites are getting into the practice of placing different parts of the web page on different domain names. Let’s take CNN.com for example. To load this single page of President Obama… oh, I mean senator Obama, waving to the crowd, tcpdump showed name lookups for the following domains:
- www.cnn.com
- edition.cnn.com
- i.cdn.turner.com
- i2.cdn.turner.com
- svcs.cnn.com
- ads.cnn.com
- i.cnn.net
- ad.doubleclick.net
- metrics.cnn.com
- m1.2mdn.net
One Page. Ten domains. Ten DNS lookups. Ouch. And I’m not including PTR/Reverse Lookups for each domain, making it really 20 DNS queries.
And does anyone wonder why problematic DNS performance in Leopard would slow web browsing to a crawl?
Disable IPv6 DNS Lookups
Firefox and Camino by default do DNS lookups using IPv6 addresses by default, reverting to IPv4 if that fails. This can be a problem when the router that we are using to connect to the Internet doesn’t work with IPv6 DNS requests properly, if at all.
To disable IPv6 DNS lookups in Firefox and Camino, type the following into the browser address bar:
about:config
If you see a large “Be Careful” warning, simply click on “I understand and I wish to continue”. Next, you will see a long list of Preference Name, Status, Type and Value columns. Above all that is a bar in which you can filter which preferences to view. In the Filter bar type: ipv6
You should see something like the following:

To change the value for this preference simply double-click the name “network.dns.disableIPv6″. The value you want is “true”, which means that IPv6 DNS requests are disabled. If this value is already “true”, don’t double-click this preference.
To make the preference change active, close the browser and Quit Firefox completely (Apple Key + Q), then restart Firefox. You may have to repeat this Quitting and Restarting to have the change take effect.
After making this change, Firefox (or Camino if that’s what you’re using) will use IPv4 only when performing DNS requests.
Update DNS Servers on Router
If you have access to your router’s administration web page, you may be able to set its DNS servers manually, avoiding the buggy DNS servers located at your ISP. Refer the manual that came with your router, or speak with your service provider about how to access the router’s administration page. Often this page can be accessed at http://192.168.1.1, so simply type that address into your browser’s address bar and press Enter. With any luck you’ll have access to the Administration login page. Many router administration sites don’t have passwords, don’t have usernames, or use very simple standard passwords such as “admin”, leaving it up to the owner to change it to something more secure. Visit the router manufacturer’s web site for more information about accessing the administration features of the router.
Keep in mind that updating the router’s DNS servers will not avoid problems you may be encountering with the router’s poor DNS Proxying/Forwarding support. If your router can’t handle IPv6 or SRV requests coming from your Mac, these DNS requests will stop here at the router and will not be forwarded onto the new DNS servers you’ve just specified, making this fix completely ineffective. DNS requests that your router cannot understand will likely be ignored or returned without answer results. DNS Proxy/Forwarding issues are discussed further in the next section.
Update Router Firmware
For those who need to continue making DNS requests through their router, rather than directly against DNS servers, due to VPN or tunneling requirements, your fix may lie in upgrading your router’s firmware. Routers are in effect “the” DNS server for the majority of home broadband Internet connections since it acts as the DNS Proxy, taking domain name lookup requests from your computer, passes them to the ISP’s DNS servers for resolution, receives the results, and finally passes the name lookup results back to your Mac, all transparently in the background. This is why your DNS server address is the same as your “Gateway” which is a fancy name for your router, since all traffic passes through this “gate” of sorts. Thus the Gateway address is often 192.168.1.1, which in turn is also the address of the DNS server for the “Automatic” network Location in Leopard.
Be aware that DNS Proxying is a common failure point in the domain name resolution chain. If the router is not compliant with the latest Internet Task Force standards, it may not know what to do with SRV requests (which Leopard now uses) and may simply ignore them, return empty results, or return NXDOMAIN (non-existent) errors. Again, a firmware update may bring your router up to the latest standards for DNS servers.
If the router is a DSL Cable modem/router, contact your ISP and ask whether there is updated firmware for the model of router you’re using. If you’re more of a do-it-yourself person you can attempt to find the manufacturer of the router/modem and find the latest firmware from their website, if available. Disclaimer: updating the firmware of your router with the wrong firmware, or not completing the firmware update due to power loss, will render your router useless. Do not attempt to update the firmware if you are not confident of what you’re doing.
New Information
Update 080606: As per a discussion on Macosxhints forums, Apple may have changed the order in which DNS servers are used. In the screenshot, the listed DNS servers are used in the order they are seen, under Leopard 10.5.2. This is true for a manually configured Network Location. In 10.5.3, users are seeing the opposite order, i.e. In a DCHP configured Network Location (automatically done by your DSL router and ISP), the DNS servers listed are used in reverse order. (Bottom server is used first, then moves up the list as needed). Thus adding a new Network Location to use a given DNS server would be unnecessary.
Update 080614: Airport Wireless Connection Drops - This is a common problem for Leopard users after upgrading to 10.5.2. This isn’t exactly a slow Internet problem, but rather, a “no Internet” problem. See this related post on wireless problems on Apple AirPort connections.
The Beginning
This is not the end, but rather, the beginning of an article that I hope will continue to grow in scope to cover more problems and offer more solutions to slow Internet problems in Leopard. Please leave a comment if you’re experiencing a problem not discussed here and we’ll get working on diagnosing the issue and searching for a cure.
If you’re having troubles implementing a fix listed above, leave a comment and I’ll try to expand on the topic or reword it so that it is understandable to you and to everyone else I’ve confused.
- Get updates and comments to this article by Email through Google’s FeedBurner:
- Subscribe to the comments feed to keep updated on new fixes and information I’ll add to this article. Every time this page is updated with new information, I’ll add a comment and you’ll be able to see what’s changed in your Feed Reader.
- Ben
The following is a summary of how I created a dual boot setup of OS X Leopard (10.5) and Tiger (10.4) on a MacBook Pro, keeping the original Tiger installation intact and available through alt/option booting during system startup. Always Always Always make a backup before you try any shenanigans like I do below. The best way to do this is with an external drive connected to your machine via FireWire or USB 2.0 and using cloning software such as SuperDuper!
Step One: Boot from Leopard
Boot from the Leopard install dvd to allow repartitioning your Tiger-installed hard disk without erasing the disk first. Insert the Leopard install DVD into the dvd drive. Ignore the pop-up Finder window. Shut down your Apple computer (don’t use restart). After your Apple has shut down fully, press the power button to start it.
When you hear the power-on “chime”, press and HOLD the Option button (just left of the Apple/Command key, also known as Alt or two horizontal lines, one diverging before connecting with the other). If for some reason your Mac doesn’t make a noise when you boot up, just press and hold the Option button when the screen lights up. Hold the Option button down until you see a grey screen with two (or more) options displayed. One of which will be a picture of a hard disk and another of the Leopard OS X Install DVD. You may have more bootable disks to choose from if you have more than one partition on your hard disk.Using the arrow keys, move to the Leopard Install DVD and hit Enter. This will boot into the Leopard install program.
DO NOT hit continue when the Leopard install window has loaded.Using the mouse, navigate up to the top menu bar and choose Utilities, then Disk Utility. Once Disk Utility has loaded you should see your Apple computer hard disk, the Leopard install dvd, and possibly other
disks if you have them attached to your computer.
Choose the hard disk that you want to install Leopard on. By default this should already be selected. For me the Disk is a 111.8 GB Fujitsu MHW2… drive with Macintosh HD underneath it (that’s the volume, within the Macintosh hard disk, you can have multiple volumes inside one hard disk). From here you should see the partition map of your Macintosh HD hard disk, a rectangle standing tall, outlined in blue.
Above the right hand side window will be five choice buttons: First Aid, Erase, Partition, RAID, Restore.
First Aid:You will want to Repair your Macintosh HD before doing any partition changes, regardless of whether you know it is verified or not already. Paritioning will fail if the disk is not error free and verified within this install session. Verifying the disk within Tiger does not mean that Leopard Disk Utility will consider the drive error free as was the case with my install. Thus, repair the disk once you get to this step, even if you had previously verified the disk in Tiger.
Step 2: Resizing + Creating Partitions
After Verify Disk step is completed, we’ll resize the current Macintosh HD Tiger partition and create a second Leopard partition with the free space. NOTE: The resize and creation of a secondary partition will LIKELY FAIL if you have Parallels installed in your Tiger system disk/volume. For the repartitioning to complete without “no space left on device” error, I was forced to delete my Parallels Windows XP SP2 virtual disk, which was roughly 10GB in size.
There are some files that Disk Utility Partition program cannot move when performing its resize and repartiton operation. The Parallels virtual disk file is one of these immovable files. When Disk Utility comes across this file, repartitioning failed with the error: “no space left on device”. The solution in my case was to reboot back into Tiger, load up Parallels, and simply delete the virtual Windows XP installation (I skipped deleting the floppy drive) which deletes the virtual disks as well. I chose this because my Windows XP install is already backed up onto an external USB 2 drive clone of my Tiger system created through SuperDuper!. I’m guessing that you can simply move this file off to some secondary external drive, replace it after, and everything will be handy dandy, although I have not tested this.
EDIT: Yozlet mentions in the comments below that removing large files (1GB+) can also help avoid the dreaded “no space left on device” error while repartitioning the drive. Here are some tips on finding and removing old files on your Mac to avoid the “no space left on device” error.

Click and drag the bottom right hand corner of the Volume Scheme (the blue outlined rectangle which represents your disk, Macintosh HD) and drag it upwards, making the volume smaller. I chose around 30GB for the Macintosh volume, out of the entire 110GB disk. This leaves a healthy chunk (80GB) of unused disk space on the drive. Beneath the blue rectangle Volume Scheme there are plus and minus buttons. The plus button when clicked will add a partition to your disk. Click this to add a generic volume onto which we will install Leopard. After clicking the plus button for adding a partition, I again had to adjust the size of the Macintosh HD volume where Tiger resides, back down to about 30GB. After this, click Apply, then Partition on the pop-up window. Go make some coffee while it does the partitioning.
After you’re well caffinated partitioning should be finished and you’ve got a pristine empty partition on which to install Leopard.Exit out of Disk Utility and you’ll see the Leopard install screen again. Click Continue from here and you’ll be asked where to install Leopard. Here we choose Leopard on our hard disk. After that, continue with the install as per normal.
Step 3: Transfer
Near the end of the Leopard install the setup program will ask if you already own a Mac and want to transfer previous settings and applications. For this step choose from another volume on this Mac. Obviously the volume we’ll use is the Tiger volume that we’ve preserved on this computer. After that, I choose User files and settings, Applications and network settings. You can choose what you desire here, but I left it at that. Any programs or settings that didn’t make it over should be easy enough to replace, reinstall after. This step can take the better part of an hour depending on how much data you’re transferring.
Best of luck. Keep that backup handy.
After doing a clean install of Leopard (on a blank partition) and importing user settings / home directory, this is what I needed to do to install the Ruby on Rails development environment on Leopard OS X 10.5.
TextMate
TextMate transferred OK as an application during the import phase after the install of Leopard. The only thing needed was a re-setting-up of the command line launcher for Textmate. A symbolic link to TextMate’s mate program in Applications placed within the /usr/bin directory does the trick:
sudo ln -s /Applications/TextMate.app/Contents/Resources/mate /usr/bin/mate
MySQL 5
- Download OS X 10.4 pre-compiled mysql binary from MySQL.com (use FTP link if you can, for some reason Firefox recognized .dmg as text mime type for the HTTP link).
- Double click the .dmg file to mount the disk image.
- Run the mysql-5.0.45-osx10.4-i686.pkg installer.
- Run the MySQLStartupItem.pkg to have MySQL start upon system boot.
- Add the location of the mysql executable to your path. For me this involved adding a line to my .profile file in my home directory
export PATH=${PATH}:/usr/local/mysql/bin - Then start the mysql daemon
sudo /Library/StartupItems/MySQLCOM/MySQLCOM start
- At this point there should be a socket file created in your /tmp directory for connecting to mysql. Check that the following file exists: /tmp/mysql.sock
- Login to mysql and change the root password:
mysql -h localhost -u root
-
mysql> USE mysql;
-
mysql> UPDATE user SET Password=PASSWORD('root-pwd') WHERE user='root'; -
mysql> FLUSH PRIVILEGES;
-
mysql> EXIT
- Create any other mysql accounts you need:
mysql> GRANT ALL PRIVILEGES ON *.* TO 'prod'@'localhost' \ IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
(do not include the backslash ‘\’ in this command, which was used to denote a wrapped line)
- At this point you might want to clear out your mysql command cache (which contains what password you just set for root) located in your home directory.
echo -n > ~/.mysql_history
- Now load your data back into MySQL. For me this consisted of exporting the database from the production site
mysqldump -u <username> -p -q --single-transaction \ <db_name> > <backup_filename>
then create the database within mysql before importing to that database
mysql>create database my_kickin_database
From the terminal:
mysql -u <username> -p my_kicking_database < <backup_filename>
ImageMagick RMagick
Despite all the badpress RMagick gets about using scads of RAM and that ImageScience is a better solution, RMagick is still quite useful. The RAM stuff is also not an issue if you can figure out how to do your image manipulation calls via command line. Plus it’s got a lot more features than FreeImage/ImageScience and in my experience, more stable as well.
Solomon White’s got a great shell script for installing ImageMagick and RMagick from source without MacPorts and that’s the route that I’ve chosen to go. Check the instructions at his page. Thanks Solomon.
Be sure to install Mac OS X XcodeTools from the Leopard install DVD (Optional Installs/Xcode Tools/XcodeTools.mpkg) before attempting this source install of ImageMagick/RMagick; The compilers necessary to build these packages are not installed on OS X by default. In particular what you need are Developer Tools Essentials and UNIX Development Support. All other stuff in the Xcode Tools package are not essential for this install. Install those two packages. Should take about five minutes or so.
You may want to run each of the steps listed in Solomon’s script one at a time in case one of the them fails. You wouldn’t want to finish building ImageMagick from source (not exactly quick) when you find out that your download of the jpeg source libraries failed and ImageMagick got built without JPEG support. (This is a current issue with the jpeg source download source that Solomon’s script is using for the download, so caveat emptor).
UPDATE: The RMagick gem install may fail with an error of “too many examples failed” if the compilation and install of the jpeg package did not install static nor shared libraries (default behaviour). What this means is that the JPEG package is installed binary executable files, but not libraries that other programs such as ImageMagick can use to manipulate photos and image files. This is easy to correct. To make sure that the JPEG package installs the actual JPEG libraries do the following within the jpeg-6b directory (which was created when you untar’d the jpeg6b.tar.gz source file):
cp /usr/share/libtool/config.sub . cp /usr/share/libtool/config.guess . ./configure --enable-shared --enable-static make sudo make install
Thanks to Matt King for posting instructions on fixing the JPEG library ImageMagick / RMagick errors.
That should be all that’s required to install the actual JPEG libraries. Now return to the ImageMagick directory (also created when you untar’d the ImageMagick source files) and try configuring and building again (NOTE: the “configure” line is just one line, no carriage returns in between all those –with –without command line arguments):
./configure --prefix=/usr/local --disable-static --with-modules --without-perl --without-magick-plus-plus --with-quantum-depth=8 --with-gs-font-dir=/usr/local/share/ghostscript/fonts make sudo make install
Ruby-debug
This is the god of command line debugging for Rails. Grab it and gem install that baby. Once you get used to it, you’ll love it.
Resolution Phase
Once you’ve got these guys installed you should check whether you need any other gems specific to your Rails project. The gems you can skip since Mac OS X Leopard’s Ruby install includes them already: Capistrano 2.0 (and requirements), RedCloth 3.04, mongrel 1.01, hpricot .6, fastthread 1.0 and perhaps others that I’m forgetting about.
At this point, wander over to your Rails project directory and fire it up (using ruby-debug of course): rdebug -n script/server and check that everything is peachy. If things blow up, don’t panic. Things to check:
- If you were previously using MacPorts for your MySQL install, you’ll likely have a different sockets file location now. By default MacPorts slapped the socket file somewhere like: /opt/local/var/run/mysql5/mysqld.sock Although now you’re playing with a socket file in /tmp/mysql.sock. Head over to your config/database.yml file in your Rails project and make sure your development environment is pointing at the right socket file and that the socket file is actually there.
- Read over the webrick log that’s upchucked an error. Good chance that at the top of that error you’ll see a call to some missing gem that you’ve forgotten to load up. Head on over to RubyForge and rectify your situation.









