MAATRIX / Блог / ChatGPT на Linux через свой сервер

ChatGPT на Linux через свой сервер

ChatGPT на Linux через свой сервер

MAATRIX

На Linux у ChatGPT нет официального десктопного клиента — вход идёт через браузер, а значит обход географической блокировки должен работать на уровне всей системы, а не одной вкладки. Публичные VPN-расширения туннелируют только браузер, и часть трафика, особенно DNS-запросы, нередко уходит в обход. Собственный сервер с WireGuard, поднятый штатными средствами дистрибутива и запускающийся автоматически при загрузке, закрывает это надёжнее — разберём установку и грабельную часть с DNS.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Почему для браузера на Linux нужен отдельный подход

У ChatGPT на iOS и Android есть нативное приложение, которое туннелируется VPN-профилем целиком. На Linux ChatGPT — это сайт chat.openai.com, открытый в Firefox или Chrome. Разница принципиальная: браузер всё чаще использует собственный DNS-резолвер (DNS over HTTPS), который ходит на жёстко прописанный сервер напрямую по HTTPS, независимо от системных настроек сети и даже от поднятого VPN-туннеля. В итоге IP-пакеты идут через WireGuard, а резолвинг имени — по старому пути, и OpenAI по IP, к которому привёл этот резолвинг, определяет исходный регион.

Второй нюанс — разнообразие сетевых стеков Linux. Есть системы с systemd-resolved (Ubuntu, Fedora и большинство современных дистрибутивов), есть минималистичные сборки, где DNS живёт прямо в /etc/resolv.conf. Один и тот же конфиг WireGuard в этих случаях ведёт себя по-разному, и без проверки легко решить, что туннель настроен, хотя утечка DNS осталась.

Что понадобится

Сервер в регионе, откуда OpenAI не блокирует запросы (обычно США или Великобритания), и пара ключей WireGuard — на сервере и на клиенте. Если серверная часть ещё не настроена, команды wg genkey, wg pubkey и структура серверного конфига разобраны в статье про установку WireGuard на VPS. Здесь — про клиента, Linux-машину, с которой вы заходите в ChatGPT через браузер. От сервера нужны публичный ключ, внешний IP или домен, порт (обычно 51820) и внутренний адрес, который сервер выдаст клиенту, например 10.66.0.2/32.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер в США

Установка WireGuard: apt и dnf

На Debian/Ubuntu:

sudo apt update
sudo apt install -y wireguard wireguard-tools resolvconf

Пакет resolvconf нужен не всегда — на Ubuntu 22.04+ и Debian 12 сетью обычно управляет systemd-resolved, и его можно пропустить, если служба активна (systemctl status systemd-resolved).

На Fedora, RHEL, AlmaLinux и других RPM-дистрибутивах:

sudo dnf install -y wireguard-tools

Начиная с ядра 5.6 модуль WireGuard входит в состав самого ядра, поэтому на актуальных версиях Fedora, AlmaLinux 9, Debian 12 и Ubuntu 22.04+ отдельно собирать wireguard-dkms не требуется. Проверить, что модуль виден системе:

sudo modprobe wireguard && echo "модуль загружен"

Если команда вернула ошибку — либо старое ядро (тогда нужен пакет wireguard-dkms), либо ядро собрано без поддержки модулей.

Конфигурация клиента и запуск через wg-quick

Файл конфигурации создаётся с правами только для root:

sudo touch /etc/wireguard/wg0.conf
sudo chmod 600 /etc/wireguard/wg0.conf
sudo nano /etc/wireguard/wg0.conf

Содержимое — стандартный клиентский профиль:

[Interface]
PrivateKey = <приватный_ключ_клиента>
Address = 10.66.0.2/32
DNS = 10.66.0.1

[Peer]
PublicKey = <публичный_ключ_сервера>
Endpoint = 203.0.113.10:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

AllowedIPs = 0.0.0.0/0, ::/0 заворачивает в туннель весь трафик — надёжнее для доступа к ChatGPT, чем список отдельных подсетей OpenAI, который к тому же периодически меняется. Строка DNS = 10.66.0.1 — это как раз про сегодняшнюю тему: она указывает резолвить имена через сервер, а не через DNS, прописанный в системе до поднятия туннеля. PersistentKeepalive = 25 держит соединение через NAT, без него туннель на некоторых провайдерах «засыпает» при простое.

Поднять интерфейс и проверить:

sudo wg-quick up wg0
wg show
curl -4 ifconfig.me

Вывод curl должен показать IP сервера. Если показывает домашний адрес — туннель не поднялся или в системе есть более специфичный маршрут, перебивающий маршрут по умолчанию от WireGuard (смотрите ip route).

Автозапуск через systemd

Ручной wg-quick up wg0 после каждой перезагрузки — то, что забывается в первую же неделю, и браузер молча открывает ChatGPT напрямую. wireguard-tools ставит systemd-юнит wg-quick@.service:

sudo systemctl enable --now wg-quick@wg0

Проверить статус и журнал:

systemctl status wg-quick@wg0
journalctl -u wg-quick@wg0 -n 30 --no-pager

Частая причина падения на старте — сетевой интерфейс ещё не готов к моменту запуска юнита (актуально для Wi-Fi на ноутбуках). Лечится добавлением зависимости:

sudo systemctl edit wg-quick@wg0

В открывшемся редакторе:

[Unit]
After=network-online.target
Wants=network-online.target

Дальше — sudo systemctl daemon-reload и перезапуск службы. На ноутбуках, где туннель нужен не всегда, автозапуск можно и не включать, а поднимать его вручную или коротким shell-алиасом.

DNS в браузере: как проверить, что он идёт через туннель

Это главная ловушка на десктопном Linux. Даже при работающем WireGuard браузер может резолвить имена не через туннель — из-за DNS over HTTPS, который Firefox и Chrome включают по умолчанию или предлагают включить.

Системный резолвинг на дистрибутивах с systemd-resolved:

resolvectl status wg0
resolvectl query chat.openai.com

Строка -- link: wg0 во втором выводе подтверждает, что запрос ушёл через туннель. Если резолвер выбрал другой интерфейс — закрепите домены за туннелем командой resolvectl domain wg0 "~.", что делает wg0 резолвером по умолчанию, пока интерфейс поднят.

На системах без systemd-resolved проверяйте /etc/resolv.conf — после поднятия wg0 он должен указывать на DNS-сервер из конфига, а не на резолвер провайдера. Если это не так — wg-quick не смог переписать файл, что случается, когда им управляет NetworkManager.

Отдельно — браузерный DoH, живущий вне системного DNS. В Firefox: about:preferences#privacy → «DNS через HTTPS» → отключить на время работы через туннель. В Chrome: chrome://settings/security → «Использовать безопасный DNS» → отключить. После изменения закройте вкладку ChatGPT полностью и откройте заново — активные соединения браузер не переоткрывает на лету. Финальная проверка — сервис вроде dnsleaktest.com в том же браузере: показанный DNS и IP должны совпадать со страной сервера.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер в США

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Нужно ли на Linux отдельное приложение ChatGPT или достаточно браузера?

Официального Linux-клиента у OpenAI нет, браузер — единственный штатный вариант. Неофициальные Electron-обёртки дают ту же сетевую картину, что и обычная вкладка, и требуют того же туннелирования.

WireGuard поднят, curl показывает IP сервера, а ChatGPT всё равно пишет про регион — почему?

Почти всегда причина в DNS — проверьте resolvectl query chat.openai.com и настройки DoH в браузере. Реже сервер сам оказался в диапазоне, который OpenAI уже пометил как VPN.

Что делать, если после перезагрузки туннель не поднимается сам?

Проверьте systemctl status wg-quick@wg0 и journalctl -u wg-quick@wg0 — чаще всего юнит стартует раньше, чем поднялась сеть, решение с network-online.target описано выше.

Можно ли пускать через туннель только браузер, а остальной трафик — напрямую?

Технически да, через маршрутизацию по cgroup или отдельный сетевой неймспейс, но для одной задачи это несоразмерно сложно. Проще держать AllowedIPs = 0.0.0.0/0 и включать туннель командой wg-quick up/down wg0 по необходимости.

WireGuard или OpenVPN — что лучше для этой задачи?

Для доступа к одному сайту разница некритична, но WireGuard обычно быстрее переподключается после сна ноутбука. Сравнение — в статье WireGuard или OpenVPN: что выбрать для сервера.

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.