由于目前使用的一些软件,例如 nginx 的 geoip 模块以及 goaccess 日志分析工具,都依赖 MaxMind 的 GeoIP 数据库来解析 IP 地址对应的地理位置。通过安装 geoipupdate 程序,我们可以让服务器自动下载和更新最新的 GeoIP 数据库。
什么是 GeoIP
通过在数据库中将地理位置和 IP 地址相互映射,软件程序便可以使用 IP 地址来确定其对应的地理位置,其中包括国家/地区、州/省、城市、邮政编码、纬度/经度、ISP、区号和其他信息。
很多软件都使用 MaxMind 的数据库对 IP 地址的地理位置进行解析,例如前面所提到的 Clash 就是通过解析出口 IP 地址的地理位置,来判断该 IP 是否需要经过代理进行访问。
下载 GeoLite2 数据库
Maxmind 提供了两种版本的 GeoIP 数据库,分别是收费的 GeoIP2 数据库和免费的 GeoLite2 数据库,只需要 注册账户 就可以获得免费的 GeoLite2 数据库的 下载链接。
通常,很多软件加载的是 .mmdb
格式的 GeoIP 数据库文件,所以我们只需下载红框中的数据库文件。使用 GeoLite2-Country 数据库,IP 地址只解析到对应的国家或地区,使用 GeoLite2-City 数据库,IP 地址可以具体解析到国家/地区、州/省和城市,点击 Download GZIP
就会下载对应的最新版本 GeoLite2 数据库文件。
当然,我们也可以选择点击 Get Permalinks
来获取永久的下载链接。
生成许可证密钥
在账户的 管理许可证密钥 页面中,我们可以生成个人的许可证密钥。许可证密钥可以用来获取数据库的永久下载链接,也可以授权 geoipupdate 程序自动更新数据库文件。
主要进行如下 3 步操作:
点击
Generate new license key
按钮。在
License key description
中给密钥命名。点击
Confirm
确定
创建后显示的用户ID和许可证密钥
出于安全考虑,许可证密钥只会在第一次生成时完整显示一次,之后仅能查看密钥的前 4 个字符。所以在许可证密钥生成后,务必第一时间把它记录下来。
点击 Download Config
按钮,就会下载用于 geoipupdate 程序的配置文件。用文本编辑器打开可以看到如下内容:
# 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.
# `AccountID` is from your MaxMind account.
AccountID xxxx
# `LicenseKey` is from your MaxMind account.
LicenseKey xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# `EditionIDs` is from your MaxMind account.
EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country
安装和配置 GeoIP 更新程序
在生成了 License key 之后,我们就可以使用永久链接来下载 GeoLite2 数据库文件了,例如下载 GeoLite2-City 数据库:
wget 'wget https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&suffix=tar.gz'
这种方法虽然每次能下载到最新版本的 GeoLite2 数据库文件,但是每次数据库更新都依靠手动下载必然是非常麻烦的,所以我们可以使用 MaxMind 提供的官方 GeoIP 数据库更新程序 geoipupdate
。
安装 GeoIP 更新程序
GeoIP 更新程序 geoipupdate
可以在 Github 下载。如果使用的是 Ubuntu 系统,我们还可以通过以下指令来安装 geoipupdate
:
apt update
apt install geoipupdate
配置 GeoIP 更新程序
用文本编辑器打开 /etc/GeoIP.conf
,把先前生成的许可证密钥对应的配置文件内容粘贴进去,或者手动输入 AccountID
、LicenseKey
和 EditionIDs
。剩余部分保持默认。
运行 GeoIP 更新程序
运行 geoipupdate -d /path/
指令,程序便会下载最新的 GeoIP 数据库文件到 /path/
目录。
自动更新 GeoIP 数据库
如果要自动下载更新最新的 GeoIP 数据库文件,我们还需要添加计划任务[4]。
首先在终端中输入以下指令编辑计划任务:
crontab -e
在 crontab 中添加 geoipupdate 自动更新计划任务:
14 4 * * 0,4 geoipupdate -d /path/
添加完成后,保存并退出。其中,如果系统使用的是 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
评论