{"id":23009208,"url":"https://github.com/matveynator/chicha-whois","last_synced_at":"2025-04-02T16:13:03.285Z","repository":{"id":263619387,"uuid":"890922366","full_name":"matveynator/chicha-whois","owner":"matveynator","description":"whois world ip database tool","archived":false,"fork":false,"pushed_at":"2024-12-31T15:57:13.000Z","size":375,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-08T06:43:25.271Z","etag":null,"topics":["acl","bind9","dns","goland","ripe","whois"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/matveynator.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-19T12:20:35.000Z","updated_at":"2024-12-31T15:57:16.000Z","dependencies_parsed_at":"2024-12-31T13:18:04.509Z","dependency_job_id":"4078634f-c67d-4187-ba1f-ee1c387d8120","html_url":"https://github.com/matveynator/chicha-whois","commit_stats":null,"previous_names":["matveynator/ripe-country-list","matveynator/chicha-whois"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matveynator%2Fchicha-whois","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matveynator%2Fchicha-whois/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matveynator%2Fchicha-whois/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matveynator%2Fchicha-whois/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/matveynator","download_url":"https://codeload.github.com/matveynator/chicha-whois/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246847138,"owners_count":20843444,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["acl","bind9","dns","goland","ripe","whois"],"created_at":"2024-12-15T09:13:05.842Z","updated_at":"2025-04-02T16:13:03.262Z","avatar_url":"https://github.com/matveynator.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"https://raw.githubusercontent.com/matveynator/chicha-whois/refs/heads/master/chicha-whois-logo.png\" alt=\"chicha-whois\" width=\"50%\" align=\"right\" /\u003e\n\n# chicha-whois\n\n**chicha-whois** — это небольшая, но мощная CLI-утилита на Go для работы с офлайн-базой RIPE NCC и генерации:\n1. ACL (Access Control Lists) для DNS-сервера BIND  \n2. Списков маршрутов для OpenVPN (exclude-route)  \n3. Избирательных («точечных») поисков по IP-блокам для любых комбинаций [страна/ключевые слова].  \n\nОсобенно полезно, если нужно:\n- Исключить **целую страну** или конкретные сервисы (по ключевым словам) из VPN-трафика (так называемая «раздельная маршрутизация», чтобы, например, сайт drive2.ru ходил напрямую, а остальной трафик — через VPN).  \n- Автоматически вести «белые/чёрные» списки IP-адресов в BIND с учётом геолокации или поиска по организациям.  \n\nУтилита умеет работать офлайн: один раз скачивает свежую базу `ripe.db.inetnum` из RIPE NCC, после чего все операции (генерация списков, поиск) происходят локально.\n\n---\n\n## Скачивание\n\nВыберите нужную вам сборку:\n\n- [Linux AMD64](https://files.zabiyaka.net/chicha-whois/latest/no-gui/linux/amd64/chicha-whois)  \n- [Windows AMD64](https://files.zabiyaka.net/chicha-whois/latest/no-gui/windows/amd64/chicha-whois.exe)  \n- [macOS (Intel) AMD64](https://files.zabiyaka.net/chicha-whois/latest/no-gui/mac/amd64/chicha-whois)  \n- [Linux ARM64](https://files.zabiyaka.net/chicha-whois/latest/no-gui/linux/arm64/chicha-whois)  \n\nДругие варианты смотрите в [каталоге всех бинарников](https://files.zabiyaka.net/chicha-whois/latest/no-gui/).\n\n---\n\n## Установка\n\n### Linux (AMD64)\n\n```bash\nsudo curl -L https://files.zabiyaka.net/chicha-whois/latest/no-gui/linux/amd64/chicha-whois -o /usr/local/bin/chicha-whois\nsudo chmod +x /usr/local/bin/chicha-whois\nchicha-whois --version\n```\n\n### macOS (Intel)\n\n```bash\nsudo curl -L https://files.zabiyaka.net/chicha-whois/latest/no-gui/mac/amd64/chicha-whois -o /usr/local/bin/chicha-whois\nsudo chmod +x /usr/local/bin/chicha-whois\nchicha-whois --version\n```\n\n### macOS (Apple Silicon, ARM64)\n\n```bash\nsudo curl -L https://files.zabiyaka.net/chicha-whois/latest/no-gui/mac/arm64/chicha-whois -o /usr/local/bin/chicha-whois\nsudo chmod +x /usr/local/bin/chicha-whois\nchicha-whois --version\n```\n\nПроверить установку:\n```bash\nchicha-whois -h\n```\n\n---\n\n## Основные возможности\n\n1. **Локальная база RIPE NCC**  \n   Для офлайн-работы вам нужно один раз скачать базу (ключ `-u`). Файл `ripe.db.inetnum.gz` скачивается и сохраняется в `~/.ripe.db.cache/`, а затем распаковывается.\n\n2. **Генерация DNS ACL (BIND)**  \n   Можно создать ACL-файл по коду страны (например, `RU`) — будет готовый список IP-сетей, чтобы прописать их в `named.conf`.  \n   - Без фильтрации (ключ `-dns-acl COUNTRYCODE`)  \n   - С фильтрацией вложенных CIDR (ключ `-dns-acl-f COUNTRYCODE`)  \n\n3. **Генерация списков маршрутов для OpenVPN**  \n   Аналогично:  \n   - `-ovpn COUNTRYCODE` — полный список сетей, «выкладываем» (exclude-route) их из VPN-туннеля.  \n   - `-ovpn-f COUNTRYCODE` — оптимизированный список (без вложенных подсетей).  \n   - Результат пишется в файл `~/openvpn_exclude_\u003cCOUNTRYCODE\u003e.txt`.  \n\n4. **Точечный поиск (`-search`)**  \n   Ищем IP-блоки в базе RIPE по коду страны **и/или** по ключевым словам.  \n   - Пример: `chicha-whois -search -ovpn RU:ok.ru,drive2.ru` найдёт все блоки в `country: RU`, у которых встречаются слова «ok.ru» или «drive2.ru» в описаниях, организации и т.д.  \n   - Можно вообще не указывать страну: `chicha-whois -search -ovpn-push :cloudflare,amazon` — ищем по всем странам, но только те блоки, где есть «cloudflare» или «amazon».  \n   - Есть три формата вывода: `-dns` (BIND-ACL), `-ovpn` (OpenVPN-клиентский), `-ovpn-push` (OpenVPN-серверный).  \n\nВсе нужные CIDR-диапазоны вы получаете или в виде файла, или сразу в консоль (если используете `-search`).\n\n---\n\n## Таблица опций\n\n| **Опция**                                     | **Описание**                                                                                                                           |\n|-----------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------|\n| `-u`                                          | Загрузить / обновить локальную базу RIPE NCC (скачивает `ripe.db.inetnum.gz` в `~/.ripe.db.cache/`, распаковывает).                  |\n| `-dns-acl COUNTRYCODE`                        | Сгенерировать ACL для BIND (пример: `-dns-acl RU`) и сохранить в файл `acl_RU.conf` в домашнюю папку.                                |\n| `-dns-acl-f COUNTRYCODE`                      | То же самое, но с фильтрацией вложенных подсетей (получается меньше записей).                                                         |\n| `-ovpn COUNTRYCODE`                           | Создать список маршрутов для OpenVPN (exclude-route) и сохранить в файл `openvpn_exclude_RU.txt` (без фильтрации).                   |\n| `-ovpn-f COUNTRYCODE`                         | Аналогично, но с фильтрацией вложенных сетей.                                                                                         |\n| `-l`                                          | Показать список доступных кодов стран (упорядоченных по названию).                                                                   |\n| `-h` или `--help`                             | Вывести справку (этот список).                                                                                                        |\n| `-v` или `--version`                          | Показать версию приложения.                                                                                                           |\n| `-search [-dns \\| -ovpn \\| -ovpn-push] CC:kw1,kw2,...` | Расширенный поиск по коду страны (опционально) **и/или** ключевым словам (нечувствительно к регистру).  Результат выводится в консоль. |\n\n---\n\n## Примеры использования\n\n### 1. Обновить базу RIPE\n```bash\nchicha-whois -u\n```\nТеперь все дальнейшие команды работают локально, без внешних запросов к RIPE.\n\n### 2. DNS ACL для России (BIND)\n```bash\nchicha-whois -dns-acl RU\n```\nРезультат: файл `acl_RU.conf` со всеми IP-сетями (без фильтра).\n\n### 3. Оптимизированный DNS ACL\n```bash\nchicha-whois -dns-acl-f RU\n```\nТо же самое, но с вырезанием вложенных CIDR — выходит более компактный список.\n\n### 4. Список кодов стран\n```bash\nchicha-whois -l\n```\nНапример: `RU - Russia`, `UA - Ukraine`, `BY - Belarus`, `KZ - Kazakhstan`, и т.д.\n\n### 5. OpenVPN exclude-route для RU\n```bash\nchicha-whois -ovpn RU\n```\nСгенерирует `openvpn_exclude_RU.txt`, где каждая строка вида:\n```\nroute 1.2.3.0 255.255.255.0 net_gateway\nroute 5.6.7.0 255.255.255.0 net_gateway\n...\n```\nВставьте это в ваш `.ovpn`, если хотите, чтобы трафик в эти сетки шёл напрямую (в обход VPN).\n\n### 6. Фильтрация для OpenVPN\n```bash\nchicha-whois -ovpn-f RU\n```\nАналогично п.5, но без дубликатов из-за вложенных подсетей.\n\n### 7. Поиск по стране и ключевым словам\n```bash\n# Найдём IP-блоки в country: UA, где есть \"google.com\" или \"kyivstar\" или \"mts\", и выведем результат в стиле DNS-ACL (прямо в консоль):\nchicha-whois -search -dns UA:google.com,kyivstar,mts\n```\n- Все найденные CIDR будут отфильтрованы от вложений.\n- Вывод будет примерно в таком стиле:\n  ```bind\n  acl \"UA\" {\n    91.200.0.0/16;\n    91.202.128.0/19;\n    ...\n  };\n  ```\n\n### 8. Поиск **без указания страны**\n```bash\n# Ищем \"cloudflare\" или \"amazon\" во всех countries:\nchicha-whois -search -ovpn-push :cloudflare,amazon\n```\n- Утилита найдёт все сети, где в `organization`, `descr`, `address` и пр. есть упоминание cloudflare/amazon.  \n- Выведет результат в формате:\n  ```\n  push \"route 104.16.0.0 255.255.240.0\"\n  push \"route 13.32.0.0 255.255.0.0\"\n  ...\n  ```\n\n---\n\n## Настройка OpenVPN для исключений\n\n### Клиентский конфиг (пример)\n\nЕсли хотите пускать **весь** трафик через VPN, но **исключить** какие-то IP-блоки (чтобы шли напрямую), добавьте в `.ovpn` (клиентский):\n\n```bash\n# Пропустить всё через VPN:\nredirect-gateway def1\n\n# Исключаем (пусть идёт вне VPN):\nroute 1.2.3.0 255.255.255.0 net_gateway\nroute 100.43.64.0 255.255.255.0 net_gateway\n...\n```\nТакой список можно сгенерировать командой:\n```bash\nchicha-whois -ovpn RU\n```\nЛибо, если хотите исключить лишь конкретные организации или сайты:\n```bash\n# Ищем в стране RU упоминание drive2, ok.ru:\nchicha-whois -search -ovpn RU:drive2,ok.ru\n```\nСкопируйте строчки `route ... net_gateway` в клиентский `.ovpn`.\n\n### Серверный конфиг (пример)\n\nЕсли вам нужно **на сервере** OpenVPN «толкать» (push) маршруты клиентам, используйте формат `-ovpn-push`. Полученный вывод можно вставить в `server.conf`:\n\n```bash\npush \"redirect-gateway def1\"\npush \"route 100.43.64.0 255.255.255.0\"\npush \"route 100.43.65.0 255.255.255.0\"\n...\n```\nИли по ключевым словам, например:\n```bash\n# Находим блоки, в которых фигурирует \"amazon\":\nchicha-whois -search -ovpn-push :amazon\n```\nСкопируйте результат в конфиг сервера.\n\n---\n\n## Настройка BIND\n\n### Пример\n\nЕсли вы сгенерировали файлы `acl_RU.conf` и `acl_UA.conf` в домашней папке, перенесите их в `/etc/bind/` (или любой другой путь по вкусу) и используйте в `named.conf` или в отдельном файле конфигурации:\n\n```bind\ninclude \"/etc/bind/acl_RU.conf\";\ninclude \"/etc/bind/acl_UA.conf\";\n\nview \"Russia\" {\n    match-clients { RU; };\n    zone \"example.com\" {\n        type master;\n        file \"/etc/bind/zones/db.example.com.RU\";\n    };\n};\n\nview \"Ukraine\" {\n    match-clients { UA; };\n    zone \"example.com\" {\n        type master;\n        file \"/etc/bind/zones/db.example.com.UA\";\n    };\n};\n\nview \"default\" {\n    match-clients { any; };\n    zone \"example.com\" {\n        type master;\n        file \"/etc/bind/zones/db.example.com.default\";\n    };\n};\n```\nВнутри `acl_RU.conf` будет что-то вида:\n```bind\nacl \"RU\" {\n    1.2.3.0/24;\n    2.3.4.0/16;\n    ...\n};\n```\n\n---\n\n## Зачем это нужно?\n\n- **Разделение трафика в OpenVPN**. Например, вы хотите, чтобы *весь мир* шёл через VPN (для безопасности), но доступ к локальным ресурсам (внутри страны или конкретным сайтам) шёл напрямую. Утилита `chicha-whois` сгенерирует нужные `route ... net_gateway` или `push \"route ...\"` строки.  \n- **Гео-ориентированный DNS**. BIND можно «разделить» на разные views по странам, перенаправляя российский трафик на один контент, украинский на другой, остальной на третий. Нужно лишь поддерживать ACL для RU, UA и т.д.  \n- **Геолокационная фильтрация**. В корпоративных сетях бывает, что вы не хотите принимать DNS-запросы/соединения от IP определённых стран. Опять же, `chicha-whois` создаёт нужные ACL.  \n- **Поиск IP-блоков по ключевым словам**. Если вы расследуете спам/атаки, иногда нужно найти все IP-диапазоны, упомянутые под каким-то `organization` или `descr`. Утилита позволяет (офлайн!) найти и отфильтровать нужные CIDR в RIPE-базе.\n\n---\n\n## Куда складываются файлы?\n\n- **RIPE-база**: `~/.ripe.db.cache/ripe.db.inetnum`  \n- **DNS ACL** (`-dns-acl`/`-dns-acl-f`): `~/acl_\u003cCOUNTRYCODE\u003e.conf`  \n- **OpenVPN** (`-ovpn`/`-ovpn-f`): `~/openvpn_exclude_\u003cCOUNTRYCODE\u003e.txt`  \n- **Поиск** (`-search`): вывод *только в консоль*, в файл не пишет.\n\n---\n\n## Итог\n\n**chicha-whois** — очень удобный инструмент, если вам нужно:\n\n1. Генерировать ACL для BIND (по странам или конкретным ключевым словам).  \n2. Делать исключения (exclude-routes) для OpenVPN: «Routing by country» или «Routing by organization/keywords».  \n3. Производить быстрый офлайн-поиск по базе RIPE: по стране, по имени организации, по адресу и т.д.  \n\nУстановка и использование просты, база скачивается один раз, дальше всё работает локально.  \nЕсли есть вопросы или улучшения — открывайте Issue или Pull Request в [репозитории](https://github.com/matveynator/chicha-whois).  \n\nПриятной работы с **chicha-whois**!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatveynator%2Fchicha-whois","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatveynator%2Fchicha-whois","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatveynator%2Fchicha-whois/lists"}