使用 geoipupdate 自动更新 GeoIP 数据库
本文最后更新于:2022年4月18日 下午
由于目前使用的一些软件,例如 Clash 代理、nginx 的 geoip 模块以及 goaccess 日志分析工具,都依赖 MaxMind 的 GeoIP 数据库来解析 IP 地址对应的地理位置。通过安装 geoipupdate 程序,我们可以让服务器自动下载和更新最新的 GeoIP 数据库。
一、什么是 GeoIP?
通过在数据库中将地理位置和 IP 地址相互映射,软件程序便可以使用 IP 地址来确定其对应的地理位置,其中包括国家/地区、州/省、城市、邮政编码、纬度/经度、ISP、区号和其他信息[1]。
很多软件都使用 MaxMind 的数据库对 IP 地址的地理位置进行解析,例如前面所提到的 Clash 就是通过解析出口 IP 地址的地理位置,来判断该 IP 是否需要经过代理进行访问。
二、下载 GeoLite2 数据库
Maxmind 提供了两种版本的 GeoIP 数据库,分别是收费的 GeoIP2 数据库和免费的 GeoLite2 数据库,只需要 注册账户 就可以获得免费的 GeoLite2 数据库的 下载链接。
![maxmind数据库文件下载页面](https://cdn.vickey.fun/blog/using-geoipupdate-to-auto-update-maxmind-database/download_database_from_maxmind.com.jpg)
图1 MaxMind数据库文件下载页面
通常,很多软件加载的是 .mmdb
格式的 GeoIP 数据库文件,所以我们只需下载红框中的数据库文件。使用 GeoLite2-Country 数据库,IP 地址只解析到对应的国家或地区,使用 GeoLite2-City 数据库,IP 地址可以具体解析到国家/地区、州/省和城市,点击 Download GZIP
就会下载对应的最新版本 GeoLite2 数据库文件。
当然,我们也可以选择点击 Get Permalinks
来获取永久的下载链接。
![获取maxmind数据库文件的永久链接](https://cdn.vickey.fun/blog/using-geoipupdate-to-auto-update-maxmind-database/permalinks.png)
图2 获取数据库文件的永久下载链接
其中 YOUR_LICENSE_KEY
是你生成的许可证密钥。
三、生成许可证密钥
在账户的 管理许可证密钥 页面中,我们可以生成个人的许可证密钥。许可证密钥可以用来获取数据库的永久下载链接,也可以授权 geoipupdate 程序自动更新数据库文件。
![管理许可证密钥](https://cdn.vickey.fun/blog/using-geoipupdate-to-auto-update-maxmind-database/manage_license_keys.png)
图3 管理许可证密钥
主要进行如下 5 步操作:
- 点击
Generate new license key
按钮。 - 在 License key description 中给密钥命名。
- “Will this key be used for GeoIP Update?”(该密钥是否用于 GeoIP 更新?)选择
yes
- 选择”Generate a license key and config file for use with
geoipupdate
version3.1.1
or newer.”(生成用于3.1.1
以上版本的geoipupdate
的许可证密钥和配置文件) - 点击
Confirm
确定
![生成许可证密钥](https://cdn.vickey.fun/blog/using-geoipupdate-to-auto-update-maxmind-database/generate_a_new_license_key.png)
图4 生成许可证密钥
![创建后显示的用户ID和许可证密钥](https://cdn.vickey.fun/blog/using-geoipupdate-to-auto-update-maxmind-database/New_license_key_successfully_created.png)
图5 创建后显示的用户ID和许可证密钥
出于安全考虑,许可证密钥只会在第一次生成时完整显示一次,之后仅能查看密钥的前 4 个字符。所以在许可证密钥生成后,务必第一时间把它记录下来[2]。
点击 Download Config
按钮,就会下载用于 geoipupdate
程序的配置文件。用文本编辑器打开可以看到如下内容:
1 |
|
四、安装和配置 GeoIP 更新程序
在生成了 License key 之后,我们就可以使用永久链接来下载 GeoLite2 数据库文件了,例如下载 GeoLite2-City 数据库:
1 |
|
这种方法虽然每次能下载到最新版本的 GeoLite2 数据库文件,但是每次数据库更新都依靠手动下载必然是非常麻烦的,所以我们可以使用 MaxMind 提供的官方 GeoIP 数据库更新程序 geoipupdate
。
1. 安装 GeoIP 更新程序
GeoIP 更新程序 geoipupdate
可以在 Github 下载。如果使用的是 Ubuntu 系统,我们还可以添加 MaxMind 提供的个人软件包仓库(英文 Personal Package Archives,简称 PPA)到软件包管理器中。输入以下指令将 PPA 添加到软件包管理器[3]:
1 |
|
然后通过输入以下指令来安装 geoipupdate
:
1 |
|
2. 配置 GeoIP 更新程序
用文本编辑器打开 /etc/GeoIP.conf
,把先前生成的许可证密钥对应的配置文件内容粘贴进去,或者手动输入 AccountID
、LicenseKey
和 EditionIDs
。剩余部分保持默认。
3. 运行 GeoIP 更新程序
运行 geoipupdate
指令,程序便会下载最新的 GeoIP 数据库文件到 /usr/share/GeoIP
目录。
五、自动更新 GeoIP 数据库
如果要自动下载更新最新的 GeoIP 数据库文件,我们还需要添加计划任务[4]。
首先在终端中输入以下指令编辑计划任务:
1 |
|
在 crontab 中添加 geoipupdate 自动更新计划任务:
1 |
|
添加完成后,保存并退出。其中,如果系统使用的是 nano 文本编辑器,只需依次按 Ctrl
+ O
和 Ctrl
+ X
即可,如果系统使用的 vim 文本编辑器,则需要先按 Esc
,再输入 :wq
。
按照以上内容添加到计划任务,系统会在每个星期的星期天和星期四凌晨 4:14 对 GeoIP 数据库文件进行更新。
参考资料
- What is IP Geolocation? - IP Location Finder FAQ. https://tools.keycdn.com/geo ↩
- License Keys | MaxMind. https://www.maxmind.com/en/accounts/current/license-key ↩
- Github - README.md at maxmind/geoipupdate: GeoIP update client code. https://github.com/maxmind/geoipupdate ↩
- Updating GeoIP and GeoLite Databases | Maxmind Developer Portal. https://dev.maxmind.com/geoip/updating-databases?lang=en ↩