У Maxmind есть бесплатная и платная версия службы. Отлично, с классом Pear можно использовать Net :: Geo_IP (IIRC). Просто установите любую версию их БД, которая вам нужна, и все готово. Использовал это много раз.
Попробуйте Geonames: вы можете загрузить их базу данных, а затем, возможно, проиндексировать ее с помощью Solr или чего-то еще, чтобы предоставить вам службу, изолированную от внешнего мира и которую вы можете обновить по необходимости.