使用 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数据库文件下载页面
图1 MaxMind数据库文件下载页面

通常,很多软件加载的是 .mmdb 格式的 GeoIP 数据库文件,所以我们只需下载红框中的数据库文件。使用 GeoLite2-Country 数据库,IP 地址只解析到对应的国家或地区,使用 GeoLite2-City 数据库,IP 地址可以具体解析到国家/地区、州/省和城市,点击 Download GZIP 就会下载对应的最新版本 GeoLite2 数据库文件。

当然,我们也可以选择点击 Get Permalinks 来获取永久的下载链接。

获取maxmind数据库文件的永久链接
图2 获取数据库文件的永久下载链接

其中 YOUR_LICENSE_KEY 是你生成的许可证密钥。

三、生成许可证密钥

在账户的 管理许可证密钥 页面中,我们可以生成个人的许可证密钥。许可证密钥可以用来获取数据库的永久下载链接,也可以授权 geoipupdate 程序自动更新数据库文件。

管理许可证密钥
图3 管理许可证密钥

主要进行如下 5 步操作:

  1. 点击 Generate new license key 按钮。
  2. 在 License key description 中给密钥命名。
  3. “Will this key be used for GeoIP Update?”(该密钥是否用于 GeoIP 更新?)选择 yes
  4. 选择”Generate a license key and config file for use with geoipupdate version 3.1.1 or newer.”(生成用于 3.1.1 以上版本的 geoipupdate 的许可证密钥和配置文件)
  5. 点击 Confirm 确定
生成许可证密钥
图4 生成许可证密钥

创建后显示的用户ID和许可证密钥
图5 创建后显示的用户ID和许可证密钥

出于安全考虑,许可证密钥只会在第一次生成时完整显示一次,之后仅能查看密钥的前 4 个字符。所以在许可证密钥生成后,务必第一时间把它记录下来[2]

点击 Download Config 按钮,就会下载用于 geoipupdate 程序的配置文件。用文本编辑器打开可以看到如下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
# GeoIP.conf file for `geoipupdate` program, for versions >= 3.1.1.
# Used to update GeoIP databases from https://www.maxmind.com.
# For more information about this config file, visit the docs at
# https://dev.maxmind.com/geoip/updating-databases?lang=en.

# `AccountID` is from your MaxMind account.
AccountID 6735

# `LicenseKey` is from your MaxMind account
LicenseKey O2Z1dEfuSBsRAk

# `EditionIDs` is from your MaxMind account.
EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country

四、安装和配置 GeoIP 更新程序

在生成了 License key 之后,我们就可以使用永久链接来下载 GeoLite2 数据库文件了,例如下载 GeoLite2-City 数据库:

1
2
export YOUR_LICENSE_KEY=O2Z1dEfuSBsRAk
wget https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=$YOUR_LICENSE_KEY&suffix=tar.gz

这种方法虽然每次能下载到最新版本的 GeoLite2 数据库文件,但是每次数据库更新都依靠手动下载必然是非常麻烦的,所以我们可以使用 MaxMind 提供的官方 GeoIP 数据库更新程序 geoipupdate

1. 安装 GeoIP 更新程序

GeoIP 更新程序 geoipupdate 可以在 Github 下载。如果使用的是 Ubuntu 系统,我们还可以添加 MaxMind 提供的个人软件包仓库(英文 Personal Package Archives,简称 PPA)到软件包管理器中。输入以下指令将 PPA 添加到软件包管理器[3]

1
sudo add-apt-repository ppa:maxmind/ppa

然后通过输入以下指令来安装 geoipupdate

1
2
sudo apt update
sudo apt install geoipupdate

2. 配置 GeoIP 更新程序

用文本编辑器打开 /etc/GeoIP.conf,把先前生成的许可证密钥对应的配置文件内容粘贴进去,或者手动输入 AccountIDLicenseKeyEditionIDs。剩余部分保持默认。

3. 运行 GeoIP 更新程序

运行 geoipupdate 指令,程序便会下载最新的 GeoIP 数据库文件到 /usr/share/GeoIP 目录。

五、自动更新 GeoIP 数据库

如果要自动下载更新最新的 GeoIP 数据库文件,我们还需要添加计划任务[4]

首先在终端中输入以下指令编辑计划任务:

1
sudo crontab -e

在 crontab 中添加 geoipupdate 自动更新计划任务:

1
14 4 * * 0,4 /usr/bin/geoipupdate

添加完成后,保存并退出。其中,如果系统使用的是 nano 文本编辑器,只需依次按 Ctrl + OCtrl + X 即可,如果系统使用的 vim 文本编辑器,则需要先按 Esc ,再输入 :wq

按照以上内容添加到计划任务,系统会在每个星期的星期天和星期四凌晨 4:14 对 GeoIP 数据库文件进行更新。

参考资料

  1. What is IP Geolocation? - IP Location Finder FAQ. https://tools.keycdn.com/geo
  2. License Keys | MaxMind. https://www.maxmind.com/en/accounts/current/license-key
  3. Github - README.md at maxmind/geoipupdate: GeoIP update client code. https://github.com/maxmind/geoipupdate
  4. Updating GeoIP and GeoLite Databases | Maxmind Developer Portal. https://dev.maxmind.com/geoip/updating-databases?lang=en

使用 geoipupdate 自动更新 GeoIP 数据库
https://vickey.fun/2022/04/17/using-geoipupdate-to-auto-update-maxmind-database/
作者
饶玮琪
发布于
2022年4月17日
许可协议