在企業網路進行問題排除時,有時候常會搞不清楚現在是走那一條線路出去,或者不確定自己是拿到什麼 IP,這時就需要外部的 IP 來源查詢服務協助我們快速判斷出口 IP,例如 ifconfig.me、whatismyip.com ... 等等,而這些服務甚至還能由 IP 反查地理位置等資訊,相當方便。
若因各種因素考量,想要建置一個自己的類似服務時要怎麼進行呢?
開源套件
要開發出類似功能其實並不困難,但開源軟體世界的神奇之處就在於有人已經做好了這樣的套件啦!
whatismyip
儘管如此,但它所能提供的資訊卻是不少:
輸出格式
- Html
- Json
- Text (純文字)
- Html Template (可自訂 Html 輸出樣式與排版)
取得資訊
- Client Port (若經過 CDN 則無法取得)
- Host (安裝 whatismyip 的主機)
- Geolocation (由 IP 資料庫取得地理資訊,包括國家、城市、經緯度、時區等等)
- Autonomous System (ASN 號碼與組織)
- Http Header (多括多種 http 標頭資訊,例如使用者端的瀏覽器資訊)
(由於資源有限,有限制單一 IP 在短時間內可以查詢的次數)
或者使用官方站台:
個人是覺得我自己的站台比較好記 🤣
另外,whatismyip 支援許多同類型網站的命令列實用技巧,搭配 curl 可列舉如下:
- 直接使用命令列,讓它只取回 IP
curl https://ip.jason.tools
- 直接使用命令列,讓它只取回地理位置相關資訊
curl https://ip.jason.tools/geo
- 直接使用命令列,讓它只取回城市
curl https://ip.jason.tools/geo/city
- 直接使用命令列,並讓它取回 Json 格式結果
curl https://ip.jason.tools/json
whatismyip 本身並不會儲存使用者查詢後的資料內容,若還是對此有疑慮,可以參考下一節的作法,建置一台完全屬於自己的 whatismyip 伺服器。
安裝套件
如要自行建置屬於自己的 whatismyip 伺服器,請先安裝好 Docker 運作環境,再使用下列指令即可快速完成:
# 以 docker 部署 docker run -d --name whatismyip --tty --interactive --restart unless-stopped --rm \ -v /opt/geodata/GeoLite2-City.mmdb:/tmp/GeoIP2-City-Test.mmdb:ro \ -v /opt/geodata/GeoLite2-ASN.mmdb:/tmp/GeoLite2-ASN-Test.mmdb:ro -p 8080:8080 \ dcarrillo/whatismyip:latest \ -geoip2-city /tmp/GeoIP2-City-Test.mmdb \ -geoip2-asn /tmp/GeoLite2-ASN-Test.mmdb \ -trusted-port-header X-Real-Port \ -trusted-header X-Real-IP
注意,若需要呈現地理位置相關資訊,還須事先準備好 MaxMind GeoLite2 資料庫檔案,並放至在主機的 /opt/geodata/ 資料夾。相關申請與下載程序請參考 MaxMind 網站,下一節參考資料中有提供連結。
另外,如果您的建置環境有經過反向代理或者 CDN 伺服器,則最後兩行 -trusted-header X-Real-Port 以及 -trusted-header X-Real-IP 需要加上,反之則不需要。
當 docker 容器正確啟動後,以瀏覽器開啟此主機的 http://ip:8080 即可順利進入使用,而我的站台是經過掛上 SSL 憑證的反向代理伺服器,所以採用 https://ip.jason.tools 進入。
題外話,這個套件就算架好了沒有對外網服務,它也可以做為一個企業內部網路找問題時相當棒的工具。
想想一種場景:使用者說無法連到伺服器,而你想要確認使用者的電腦到底有沒有設定或取得正確的 IP 時,只要請它敲入這個網址再念給你聽,不就迎刃而解了嗎?不需要教它點選那裡、再那邊開啟... 等等複雜的操作方式。
參考資料
- dcarrillo/whatismyip: Just another "what is my IP address" service, including geolocation and headers information. Written in go with high performance in mind.
https://github.com/dcarrillo/whatismyip
- whatismyip - 節省工具箱站台
https://ip.jason.tools/ - whatismyip - 官方展示站台
https://ifconfig.es/
- MaxMind GeoLite2 免費版地理資料庫申請
https://dev.maxmind.com/geoip/geolite2-free-geolocation-data?lang=en