Эта статья не содержит описания способов обхода блокировок для доступа к противоправому контенту. Socks-прокси нужны исключительно для того чтобы смотреть YouTube и просить ChatGPT писать за тебя домашние задания!!! У первого какие-то проблемы со скоростью последнее время, говорят, что из-за отключения кеширующих серверов, а второй сам заблокировал жителей из России, Беларуси и Китая…
Socks — это протокол, подходящий для доступа к ChatGPT, так как позволяет скрыть российский ip-адрес. При этом socks-туннели не шифруют трафик, они передают его как есть, поэтому рекомендуется их использовать только с https://
(через http://chatgpt.com/
бот работать не будет). В настройках браузера можно включить принудительное использование https, а так же отключить WebRTC с помощью расширения WebRTC Control (чтобы ChatGPT не спалил вас, что вы из России). Данный метод сравнительно простой и не требует наличия своего сервера, socks-прокси продаются за копейки, но сайты, продающие их в основном заблокированы. Из недостатков следует отметить, что socks4 не поддерживает UDP в отличие от socks5 (WebRTC работает через UDP, поэтому мы его и блочим). Так же требуется включить dns over socks, в случае с огнелисом. Chromium не поддерживает авторизацию через socks, поэтому нужно использовать PAC-файлы либо что-то универсальное типа proxychains-ng
:
$ yay -S proxychains-ng
$ sudo -e /etc/proxychains.conf
# находим
[ProxyList]
# записываем что-то вроде
socks5 X.X.X.X 1080 proxy_user proxy_pass
Проверим наш айпи:
proxychains -q curl -s https://ipinfo.io
А так запускаем браузер:
proxychains -q chromium --incognito https://2ip.ru
Не забудьте настроить браузер чтобы он использовал DNS-Over-TLS (DOT) или DNS-over-HTTPs (DOH), чтобы скрыться от всевидящего 👁️ ChatGPT.
Как выше написано, шифрование используется только при доступе к сайтам через https://
, а что делать, если нужно гарантированное шифрование всего трафика? — Нам придется запустить локальный прокси-сервер, который будет шифровать запросы на целевой.
👨💻 -> 💻 localhost:1080 -> 🔐 encryption layer -> 🖥 remote-server -> 🌎 clearnet
Далее рассмотрим методы создания шифрованный туннелей.
SSH-Туннели
Это самый простой метод и самый ненадежный, так как часто приходят пустые ответы. Подойдет только для браузера.
# предварительно нужно скопировать публичный ключ на сервер чтобы постоянно не спрашивало пароль
# ssh-keygen -t rsa - для генерации оного
ssh-copy-id -i ~/.ssh/id_rsa.pub user@ssh-server
# создать туннель можно так
ssh -fND 1080 user@ssh-server
# но первый способ требует ручного перезапуска в случае падения
# для поддержания постоянного соединения
yay -S autossh
# данную команду можно запускать через cronie (в KDE таски создаются через интерфейс) либо создать сервис systemd
autossh -M 0 -o TCPKeepAlive=yes -o "ServerAliveInterval 15" -o "ServerAliveCountMax 3" -fND 1080 user@ssh-server
Shadow Socks
Данный метод был придуман в Китае на случай если китайцам заблокируют доступ к ChatGPT. Он хорош тем, что у нас будет стабильное шифрованное соединение.
Удаленный сервер
Для начала зайдем на целевой сервер и установим shadowsocks-сервер.
На debian можно установить shadowsocks-libev
— это C-реализация пакета shadowsocks
, написанного на Python.
# Устанавливаем shadowsocks-libev
apt install shadowsocks-libev
# Генерируем случайный пароль длиной 40 символов, состоящий из букв и цифр
password=$(tr -dc '[:alnum:]' </dev/urandom | head -c 40)
# Создаем файл конфигурации для сервера Shadowsocks
cat <<EOF> /etc/shadowsocks-libev/server.json
{
"server":["[::0]", "0.0.0.0"],
"mode":"tcp_and_udp",
"server_port":8488,
"password":"$password",
"timeout":300,
"method":"aes-128-gcm",
"nameserver":"1.1.1.1"
}
EOF
# Включаем и запускаем службу shadowsocks-libev-server с конфигурацией 'server'
systemctl enable --now shadowsocks-libev-server@server
# Проверяем статус службы, чтобы убедиться, что она запущена
systemctl status shadowsocks-libev-server@server
# Выведем ip сервера и пароль от него
echo "Ip: $(curl -s https://api.ipify.org)"
echo "Password: $password"
Для других дистрибутивов, где нет shadowsocks
в репозиториях, я советую go-реализацию, объясню почему: Go — это язык, который тащит с собой рантайм, ему не нужны системные зависимости типа libastral.so
, если бинарь собран с CGO_ENABLED=0
, те любой такой гошный бинарник гарантированно запустится на любом линукс-сервере даже если там старое ядро (с 3 точно запускается).
# для начала получим ссылку на последний бинарный релиз, благо эта ссылка всегда первая
download_url=$(wget -qO- https://api.github.com/repos/shadowsocks/go-shadowsocks2/releases | grep -oP 'http.+linux\.gz(?=")' | head -1)
# выкачаем и распакуем
wget -qO- $download_url | gzip -d > go-shadowsocks2
# сделаем исполняемым
chmod +x go-shadowsocks2
# почитайте справку
./go-shadowsocks2 -h
# сгенерируем пароль
password=$(tr -dc '[:alnum:]' </dev/urandom | head -c 40)
# выведем пароль, чтобы скопировать
echo "Generated Password: $password"
# но лучше всего это дело засунуть в systemd service
# $PWD будет заменен на текущий рабочий каталог, в случае необходимости пропишите другой путь
cat << __EOF__ > /etc/systemd/system/shadowsocks-server.service
[Unit]
Description=Shadowsocks Server
After=network.target
[Service]
Type=simple
ExecStart=$PWD/go-shadowsocks2 -s "ss://AEAD_AES_128_GCM:${password}@0.0.0.0:8488"
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
__EOF__
# для запуска сервиса
systemctl enable --now shadowsocks-server
Не забудьте открыть порты. Например, на Digital Ocean они все кроме 22,80,443… закрыты.
Пример с использованием ufw:
ufw allow 8488/tcp
ufw allow 8488/udp
Локальный сервер
На хосте можно поставить любую реализацию клиента, главное, чтобы через пакетный менеджер иначе система превратится в конюшню:
# можно установить питонячью реализацию, так как она не ставит всякое говно типа Rust или Go, которые весят по 500 мегабайт + столько же с собой тянут
$ yay -S shadowsocks
# справка по локальному серверу
$ sslocal -h
$ sudo cp /etc/shadowsocks/{example,server}.json
# тут нужно вписать данные от сервера
$ sudo -e /etc/shadowsocks/server.json
{
"server":"<server-ip>",
"password":"<password>",
"server_port":8488,
"local_address": "127.0.0.1",
"local_port":1080,
"timeout":300,
"method":"aes-128-gcm",
"workers": 10
}
# запускаем локальный сервер, где через @ указывается имя json-конфига
$ sudo systemctl start shadowsocks@server.service
# проверяем
# должен быть: active (running)
$ systemctl status shadowsocks@server.service
# можно еще раз удостовериться
$ curl --socks5 localhost:1080 https://ipinfo.io
# в случае кривых рук, запустите локальный сервер напрямую и посмотрите ошибки, возможно, занят порт или допущена иная ошибка
$ sslocal -c /etc/shadowsocks/server.json
Дополнения
В KDE socks5 можно сделать системными в настройках (как и в Windows, мало того для него есть и клиенты shadowsocks, так что инструкция почти универсальна).
Если же прокси нужен только для браузера:
# Учтите, что файл с флагами по умолчанию не должен содержать кавычек типа `--arg="value"`
echo '--proxy-server=socks5://localhost:1080' >> ~/.config/chromium-flags.conf
Для лучшей защиты нужна цепочка прокси, так как провайдер ведет логи ваших подключений к тому или иному адресу и может их передать ChatGPT. У вас трафик должен шифроваться только до промежуточного сервера, естественно, сервера должны быть не из этой страны.