
После выхода первой части прошло 2 месяца, и наши многоуважаемые американские партнёры из Anthropic и Google что-то подхимичили, и новые версии Claude Code и Antigravity перестали работать.
И нам придётся осваивать новые хитрости для настройки VPS, чтобы быть на острие прогресса. В статье будут настройки для VPS и Linux-десктопа.
Предыстория
В прошлой части статьи с помощью заграничного VPS, ssh и privoxy мы успешно настроили запуск Claude Code. Но время идёт, и прошлая схема почти перестала работать.
В новых версиях Claude Code и Antigravity встроили какую-то дополнительную защиту, и они перестали запускаться. Claude Code ясно говорит, что проблема в стране, а Antigravity падает с неясной ошибкой «Agent terminated due to error».
Когда впервые стали появляться такие проблемы, то я нашёл обходной путь. Дело в том, что вначале Claude Code существовал в виде модуля для Node.JS. То есть, фактически, это был такой исполняемый JavaScript-модуль. Он работал через типовые способы доступа к сети и прекрасно проксировался через privoxy.
Через некоторое время Anthropic сделали его в виде уже нативного бинарника, который умеет самообновляться.
Я подумал, что для меня не так важны какие-то мелкие нововведения и сочетания клавиш и что мне хватит старой версии программы. Я поставил Node.JS и последнюю версию Claude Code v2.1.112, которая умеет работать как модуль Node.JS. В свою пользовательскую папку ~/bin положил скрипт-обёртку claude, а в переменной PATH своего пользователя поставил этот путь первым.
Для перехвата всех запросов из программы Claude Code я использовал программу proxychains. Из-под неё можно запустить что угодно и она будет перехватывать https-запросы.
#!/bin/bash # Запускаем целевую программу # "$@" передаёт все аргументы командной строки "как есть" (с сохранением кавычек) # exec заменяет процесс оболочки процессом программы, экономя ресурсы DISABLE_AUTOUPDATER=1 exec proxychains -q /usr/bin/claude
И всё заработало. Я подумал, ладно — живём дальше. Но не тут-то было.
Квантизация и запланированное устаревание
Через некоторое время Opus 4.7, который воспринимался как откровение богов, как Deus ex Machina, который решал сложнейшие задачи с пары попыток, стал подтупливать. И чем дальше, тем сильнее.
Он стал предлагать какие-то халявные лёгкие пути вместо решения проблем, маскировку проблем, а не их решение. Или стал говорить: «Программа зависает всего в 3% случаев, это хороший показатель, давай двигаться дальше». Требования, записанные в CLAUDE.md, стали выполняться не все. Дошло даже до галлюцинаций.
То, что каждый запрос занимает минуты, — с этим я ещё как-то смирился, ведь у Anthropic не хватает вычислительных мощностей, они даже у Маска арендуют Colossus в Мемфисе.
Я понял, что всякие меняющиеся строчки с красивыми формами глаголов типа Frosting…, Blanching…, Schlepping…, переливающиеся всеми оттенками цветов, это просто мишура, создающая видимость работы, пока запрос стоит в очереди к нейросети.
Но, видимо, им очень нужно переводить клиентов на новые версии программ и новые модели, поэтому старые модели они стали квантизировать. Некоторые авторы на Хабре считают, что они идут на прямой обман и подсовывают Sonnet вместо Opus. Я не думаю, что они идут на прямой обман. Зачем? Ведь есть же квантизация! Достаточно умную модель пропустить через её мясорубку — уменьшить точность каждого параметра с 4 байт до 4-8 бит и она будет запускаться на более дешёвом железе.
Это не является обманом. Opus остаётся Opus`ом. Но просто более тупым. И чем нужнее переход на новые модели, тем можно сильнее квантизировать. Вплоть до 4 бит, что для Opus уже что-то лоботомии.
Конечно, всё это мои домыслы. Но выглядит как весьма правдоподобное объяснение.
Итак, я пользовался Opus 4.7. Всё было нормально. Но появился Opus 4.8. В моей старой версии Claude Code по какой-то причине его не было. И я думал, что ничего страшного. Но он стал работать хуже, и я стал задумываться, как заставить свежие версии Claude Code работать.
Суть проблемы
Очевидно, что разработчики встроили дополнительные механизмы проверки географических ограничений. Скорее всего, используется какой-то нестандартный запрос, что-то типа ping.
Встала задача запуска программы в некотором изолированном пузыре, в котором будет полностью свой сетевой стек. Я не хочу абсолютно весь трафик пускать через VPS, мне нужно чтобы конкретная программа, находясь в пузыре, могла слать UDP, ICMP, HTTP и HTTPS-запросы с заграничного IP.
Самое простое решение
В прошлой части мы тщательно выбирали VPS для максимально быстрой работы с Claude Code. И даже было видно, что у него есть серверы в Северной Европе. Скорее всего, в дата-центрах Nebius в Финляндии.
Поэтому мы можем просто запускать Claude Code внутри VPS. И работать удалённо через SSH. Это прекрасная опция, если всё, что нам нужно, можно поставить на VPS.
Для такого стиля работы достаточно выбирать сервер с оплатой «За ресурсы», а не помесячной. Выбрать побольше ядер. Когда вам потребуются дополнительные ядра для быстрой компиляции программ, то они у вас будут.
Но как быть, если вы хотите работать со своей файловой системой или пишете ядра CUDA, которые можно протестировать только локально? Хотелось бы, чтобы и локально всё работало.
Делаем изолированный сетевой пузырь для Claude
Скажу сразу, хоть я и пишу для блога RUVDS, у меня есть разные VPS. В том числе американских провайдеров. И настроить виртуальный сервер от RUVDS оказалось настолько проще, что в итоге я пользуюсь именно им, несмотря на имеющийся выбор.
Для начала обновим и установим curl на VPS:
apt update apt install curl -y curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
1. Быстрая установка WireGuard на сервер
На удалённом сервере выполняем скрипт автоустановки от angristan, который сам сгенерирует ключи и конфиг для клиента. Я на все вопросы отвечал Yes или Enter. Там предложат ввести имя — введите что-то короткое в нижнем регистре без цифр до 15 символов.
curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh chmod +x wireguard-install.sh ./wireguard-install.sh
Копируем полученный клиентский конфиг (например, wg0-ruvds.conf) на локальный ПК в папку /home/$USER/conf. Имя пользователя своё подставляем.
В конфиге смотрим порт, на котором будет висеть WireGuard. Этот порт нужно открыть на VPS и разрешить его использовать как NAT. Например, порт 55555.
iptables-legacy -I INPUT -p udp --dport 55555 -j ACCEPT # Это менять не придётся. Типовой ip iptables-legacy -I FORWARD -s 10.66.66.0/24 -j ACCEPT iptables-legacy -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables-legacy -t nat -I POSTROUTING -o eth0 -j MASQUERADE
2. Запуск Claude в изолированном сетевом пространстве
Ставим локально пакет wireguard-tools. На моём Calculate Linux это команда:
emerge -av net-vpn/wireguard-tools
Вместо использования стандартной команды wg-quick up, так как она завернёт в туннель трафик всего ПК, мы создадим скрипт, который поднимет интерфейс в изолированном «пузыре» специально для Claude.
Я сохранил следующий скрипт в папке /usr/local/bin/claude, подставив свой IP из конфига wg0.conf:
#!/bin/bash USER="Ваш линукс пользователь" # Имя сетевого пространства nbb (network bubble) SPACE="nbb" # Конфигурация WG_CONF="/home/$USER/conf/wg0-ruvds.conf" # Важно: имя файла (wg0-ruvds) не должно превышать 15 символов! # 0. Очистка "хвостов" от предыдущих неудачных запусков ip netns del $SPACE 2>/dev/null # 1. Создаем сетевое пространство (namespace) с именем "vpn" ip netns add $SPACE ip -n vpn link set lo up # 2. Изолируем DNS (чтобы приложение использовало DNS туннеля) mkdir -p /etc/netns/$SPACE echo "nameserver 1.1.1.1" > /etc/netns/$SPACE/resolv.conf # Или DNS из вашего wg0.conf echo "nameserver 1.0.0.1" >> /etc/netns/$SPACE/resolv.conf # 3. Создаем интерфейс WireGuard и закидываем его в namespace ip link add wg1 type wireguard ip link set wg1 netns $SPACE # 4. Применяем конфигурацию ключей wg-quick strip "$WG_CONF" | ip netns exec $SPACE wg setconf wg1 /dev/stdin # 5. ВАЖНО: Укажите здесь Address= из вашего wg0.conf ip -n $SPACE addr add 10.66.66.2/32 dev wg1 # 6. Включаем интерфейс и маршрутизацию внутри "пузыря" ip -n $SPACE link set wg1 up ip -n $SPACE route add default dev wg1 echo "Туннель изолированно запущен! Запускаем shell внутри туннеля..." # 7. Открываем bash от имени обычного пользователя внутри VPN-пространства cd /home/$USER ip netns exec $SPACE sudo -u $USER bash # /home/$USER/.local/bin/claude — это оригинальный исполняемый файл #ip netns exec $SPACE sudo -u $USER bash -c /home/$USER/.local/bin/claude # 8. Корректное завершение (выполнится только после закрытия bash) echo "Закрытие сессии. Очистка сетевого пространства..." ip netns del $SPACE ip link del wg1 2>/dev/null echo "Готово."
Запускаем из под root: claude
Мы оказываемся внутри пузыря. Проверка работы:
ping 8.8.8.8 curl https://ifconfig.me
Видим пинги и IP-адрес VPS.
Далее в скрипте комментируем bash и раскомментируем claude:
#ip netns exec vpn sudo -u $USER bash ip netns exec vpn sudo -u $USER bash -c /home/$USER/.local/bin/claude
That’s all, folks!
3. Адаптация пузыря под Antigravity
Меняем одну строку в скрипте:
ip netns exec vpn sudo -u $USER bash -c "/home/$USER/Programs/Antigravity\ IDE/bin/antigravity-ide"
Запускаем любую программу в пузыре
Поскольку иногда нужно запускать в сетевом пузыре разные программы, я придумал универсальный скрипт nbb — от «network bubble».
Идея такая:
Запускаем пузырь при старте компьютера
Запускаем любую программу в пузыре командой
sudo nbb program_name argsУничтожаем пузырь при выключении компьютера (необязательно)
Скрипт старта пузыря /etc/local.d/nbb.start
#!/bin/bash SPACE=nbb # Конфигурация WG_CONF="/home/inetstar/conf/wg0-ruvds.conf" # Важно: имя файла (wg0-veter) не должно превышать 15 символов! # 0. Очистка "хвостов" от предыдущих неудачных запусков ip netns del $SPACE 2>/dev/null # 1. Создаем сетевое пространство (namespace) с именем "vpn" ip netns add $SPACE ip -n $SPACE link set lo up # 2. Изолируем DNS (чтобы приложение использовало DNS туннеля) mkdir -p /etc/netns/nbb echo "nameserver 1.1.1.1" > /etc/netns/nbb/resolv.conf # Или DNS из вашего wg0.conf echo "nameserver 1.0.0.1" >> /etc/netns/nbb/resolv.conf # 3. Создаем интерфейс WireGuard и закидываем его в namespace ip link add wg1 type wireguard ip link set wg1 netns nbb # 4. Применяем конфигурацию ключей wg-quick strip "$WG_CONF" | ip netns exec nbb wg setconf wg1 /dev/stdin # 5. ВАЖНО: Укажите здесь Address= из вашего wg0.conf ip -n $SPACE addr add 10.66.66.2/32 dev wg1 # 6. Включаем интерфейс и маршрутизацию внутри "пузыря" ip -n $SPACE link set wg1 up ip -n $SPACE route add default dev wg1
Скрипт уничтожения пузыря /etc/local.d/nbb.start
#!/bin/bash SPACE=nbb ip netns del $SPACE ip link del wg1 2>/dev/null
Даём права утилите nbb в файле /etc/sudoers.d/nbb:
your_linux_user_name ALL=(ALL) NOPASSWD: /usr/local/bin/nbb
Утилита nbb в файле /usr/local/bin/nbb:
#!/bin/bash ip netns exec nbb sudo -u your_linux_user_name "$@"
Теперь для запуска любой программы в сетевом иностранном пузыре нужно набрать:
sudo nbb program_name arguments_of_program
Заставляем claude работать как родного
Берём подход из предыдущей части статьи. В файле ~/.bashrc прописываем приоритет пользовательской папки ~/bin и путь к папке с claude:
export PATH="$HOME/bin:$PATH:$HOME/.local/bin"
В файле /home/username/bin/claude пишем:
#!/bin/bash sudo nbb ~/.local/bin/claude "$@"
Теперь для нас использование claude в терминале из любой папки ничем не отличается от родного использования.
claude --resume "Поехали!"
Заключение
Хоть и не хотелось повышать свою грамотность в области сетевых технологий, но пришлось. И успешно!
На удивление, RUVDS продают очень хорошие VPS, на которых с первой попытки у меня завелось всё что нужно, в отличие от одного именитого американского провайдера.
Вообще VPS — отличная вещь в наше время, я их использую для многих целей.
Ну что же, я пошёл осваивать Fable 5.
Всех благ и хорошего вайбкодинга!
© 2026 ООО «МТ ФИНАНС»

