Skip to content

sgawa/pac-ip-manager

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PAC IP Manager

ローカルブレイクアウト(LBO)等の運用で利用するIPアドレス及び、FQDNリストを毎日取得し、共通 JSON フォーマットへ正規化して自動保存します。 スクリプトは、Gituhub Actionでの運用となっています。

IP/FQDN リスト

IP/FQDN リスト

Service
Microsoft 365 microsoft365.json
Microsoft Teams microsoft_teams.json
Zoom zoom.json
Cisco Webex Meetings webex_meetings.json
Windows Update windows_update.json
Apple apple.json
Google Workspace google.json
Google Meet google_meet.json
Box box.json
Netflix netflix.json
Amazon Prime Video prime_video.json
YouTube youtube.json
Instagram instagram.json
TikTok tiktok.json
Adobe Updates adobe_updates.json

取得元ソースURL

サービス ソース Output
Microsoft 365 https://endpoints.office.com/endpoints/worldwide?... urls -> url, ips -> ip_range
Microsoft Teams https://endpoints.office.com/endpoints/worldwide?... Microsoft Teams records only: urls -> url, ips -> ip_range
Zoom https://assets.zoom.us/docs/ipranges/Zoom.txt 各行 -> ip_range
Cisco Webex Meetings https://help.webex.com/en-us/article/WBX264/Network-Requirements-for-Webex-Services CIDR -> ip_range, domains -> url / fqdn
Windows Update https://learn.microsoft.com/en-us/windows/privacy/manage-windows-11-endpoints Windows Update section destinations -> url / fqdn
Apple https://support.apple.com/en-us/101555 ホスト名 -> fqdn / ワイルドカード -> url
Google Workspace https://www.gstatic.com/ipranges/goog.json prefixes[].ipv4Prefix -> ip_range
Google Meet https://support.google.com/a/answer/1279090?hl=en-GB Meet URIs/SNI -> fqdn / url, media CIDR -> ip_range
Box Box firewall support page and https://support.box.com/ips domains -> url / fqdn, CIDR -> ip_range
Netflix Curated primary application domains domains -> fqdn / wildcard domains -> url
Amazon Prime Video Curated primary application domains domains -> fqdn / wildcard domains -> url
YouTube Curated primary application domains domains -> fqdn / wildcard domains -> url
Instagram Curated primary application domains domains -> fqdn / wildcard domains -> url
TikTok Curated primary application domains domains -> fqdn / wildcard domains -> url
Adobe Updates https://helpx.adobe.com/enterprise/kb/network-endpoints.html Deployment and fulfillment services / Updater only -> fqdn / url

Netflix、Amazon Prime Video、YouTube、Instagram、TikTok は固定 IP レンジではなく CDN / クラウド基盤が頻繁に変わるため、広すぎるクラウド/CDN全体の許可を避け、主要ドメインとワイルドカードドメインに絞って収録しています。 Adobe Updates は Adobe 公式ページの Deployment and fulfillment servicesUpdater のみを対象にしています。公式ページ取得に失敗した場合は、同セクションの fallback リストで生成します。

JSON フォーマット

{
  "service": "microsoft365",
  "updated_at": "2026-06-06",
  "schema_version": "1",
  "entries": [
    {
      "type": "url",
      "value": "*.office365.com",
      "action": "DIRECT"
    },
    {
      "type": "ip_range",
      "value": "13.107.6.152/31",
      "action": "DIRECT"
    }
  ]
}

typeurl, ip_range, fqdn のいずれかです。 action は現時点では DIRECT 固定です。

ローカルで実行する場合

python -m pip install -r requirements.txt
python main.py

特定サービスのみ実行する場合:

python main.py --service zoom
python main.py --service microsoft_teams
python main.py --service adobe_updates
python -m fetchers.microsoft365

実行結果は ip-lists/latest/{service}.jsonip-lists/history/{service}/{service}-YYYY-MM-DD.json に保存されます。 既存の latest と比較して内容に差分がない場合は保存をスキップします。差分判定では updated_at のみの変化は無視する実装です。

ログはデフォルトで logs/fetch-YYYY-MM-DD.log に保存されます。

保存先を変更する場合は以下の通り:

PAC_IP_MANAGER_LOG_DIR=/tmp/pac-ip-manager-logs python main.py

テスト

python -m pytest

テストでは実際の HTTP 通信は行わず、各 fetcher の normalize と JSON Schema バリデーションを確認する実装です。

GitHub Actions

.github/workflows/fetch-daily.yml は毎日 21:00 JST に実行するよう設定しています。 手動実行も workflow_dispatch から可能です。

ワークフローの流れ:

  1. リポジトリを checkout
  2. Python 3.11 をセットアップ
  3. 依存関係をインストール
  4. テストを実行
  5. main.py を実行
  6. daily log を artifact として保存
  7. ip-lists に差分があれば github-actions[bot] で commit / push
  8. latest JSON を Cloudflare KV に PUT

Cloudflare KV 連携には以下の GitHub Secrets が必要。

Secret Purpose
CF_ACCOUNT_ID Cloudflare Account ID
CF_API_TOKEN Cloudflare API Token
CF_KV_NAMESPACE_ID KV Namespace ID

KV のキー名はサービス名です。例: microsoft365, microsoft_teams, zoom, webex_meetings, windows_update, apple, google, google_meet, box, netflix, prime_video, youtube, instagram, tiktok, adobe_updates

依存関係の自動更新

.github/dependabot.yml において Dependabot を導入しています。 GitHub Actions と pip 依存関係の更新 PR が週次で作成されるようになっています。

TODO

履歴削除の機能

★90 日以前の履歴削除ワークフロー 現時点では未実装です。(TODO)

About

Global IP and FQDN List Required for Local Breakout (LBO) in PAC File Operations [Auto-Updated]

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages