2023年5月23日 星期二

[實用套件] 自架 whatismyip 快速查詢服務

 



在企業網路進行問題排除時,有時候常會搞不清楚現在是走那一條線路出去,或者不確定自己是拿到什麼 IP,這時就需要外部的 IP 來源查詢服務協助我們快速判斷出口 IP,例如 ifconfig.me、whatismyip.com ... 等等,而這些服務甚至還能由 IP 反查地理位置等資訊,相當方便。

若因各種因素考量,想要建置一個自己的類似服務時要怎麼進行呢?




開源套件

要開發出類似功能其實並不困難,但開源軟體世界的神奇之處就在於有人已經做好了這樣的套件啦!

whatismyip



whatismyip 這個套件,採用 Go 語言賺寫,執行速度非常高效,而用法也相當簡單,只要瀏覽架好的網站即可取回所需資訊:



whatismyip 執行結果



儘管如此,但它所能提供的資訊卻是不少:

輸出格式
  • Html
  • Json
  • Text (純文字)
  • Html Template (可自訂 Html 輸出樣式與排版)

取得資訊
  • Client Port (若經過 CDN 則無法取得)
  • Host (安裝 whatismyip 的主機)
  • Geolocation (由 IP 資料庫取得地理資訊,包括國家、城市、經緯度、時區等等)
  • Autonomous System (ASN 號碼與組織)
  • Http Header (多括多種 http 標頭資訊,例如使用者端的瀏覽器資訊)










使用方式

要使用它查詢您的出口 IP,可以使用我已經建置好的站台:
https://ip.jason.tools

(由於資源有限,有限制單一 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 時,只要請它敲入這個網址再念給你聽,不就迎刃而解了嗎?不需要教它點選那裡、再那邊開啟... 等等複雜的操作方式。







參考資料