
Когда очень хочется экспериментов и не хочется вкладываться финансово.
Исходные данные:
мобильный телефон с сим-картой;
домашний сервер;
интернет с выделенным IP.
Цель: сделать мобильный прокси.
Замысел применения в некоторых случаях преодолеть ограничения статического IP в домашнем интернете, который мне нужен для работы.
1. Подготовка сервера.
Этот раздел не представляет особенных сложностей, поэтому просто приведу конфиг для compose.yml для запуска FRP.
1.1. Настройка FRPS
Скрытый текст
[common] bind_port = 7000 dashboard_port = 7500 dashboard_user = admin dashboard_pwd = strongpassword # чтобы сервер мог принимать reverse-proxy от телефона token = mysecret
1.2. Docker-compose.yml (для Swarm)
Скрытый текст
services: frps: image: ghcr.io/fatedier/frps:v0.68.1 command: ["-c", "/etc/frp/frps.ini"] restart: always ports: - "7000:7000" # основной порт FRP - "7500:7500" # dashboard - "2001:2001" # socks5-выход через phone-1 - "2002:2002" # socks5-выход через phone-2 configs: - source: frps-conf target: /etc/frp/frps.ini configs: frps-conf: name: frps-conf-${TIMESTAMP} file: ./prod.ini
1.3. Скрипт для запуска
Скрытый текст
#!/bin/bash set -e TIMESTAMP=$(date +%s) export TIMESTAMP cd frps docker context use swarm docker stack deploy --with-registry-auth --compose-file docker-compose.yml frps
docker context create - технология, которую предлагается освоить самостоятельно.
2. Подготовка телефона
Здесь сложнее: нам нужно собрать FRPC (Client) для валяющегося дома телефона на Android. Готовых сборок не нашёл.
2.1. Установка Termius.
С любого маркета - сложностей не возникает.
2.2. Сборка FRPC
Проблема: FRP актуальных версий несовместим с Android. Причина: современные версии FRP используют библиотеку anet, которая обращается к внутреннему полю net.zoneCache. В Android‑сборках Go это поле отсутствует, поэтому сборка падает.
Решение: использовать FRP 0.51.3 — последнюю совместимую версию.
pkg update pkg install golang git git clone --branch v0.51.3 https://github.com/fatedier/frp ~/frp cd ~/frp
Создаём фиктивный dist для embed.go (FRP использует go:embed, который не допускает пустых директорий.)
mkdir -p web/frpc/dist echo “dummy” > web/frpc/dist/index.html
Собираем frpc под Android ARM64
GOOS=android GOARCH=arm64 CGO_ENABLED=0 go build -tags no_ui -o frpc-android ./cmd/frpc
Проверяем результат
./frpc-android -v
Если всё прошло успешно, вы увидите:
frpc version 0.51.3
2.3. Запуск FRPC
Готовим конфиг:
nano phone1.ini
содержимое файла:
[common] server_addr = yourdomain server_port = 7000 token = super_secret # SOCKS5 наружу [socks] type = tcp remote_port = 2001 plugin = socks5 # plugin = http_prox plugin_user = login plugin_passwd = password
для ручного запуска:
./frpc-android -c phone1.ini
но нам это не нужно - гораздо интересней автозапуск.
2.4. Автозапуск и работа в фоне.
Прежде всего работа Termux при выключенном экране
termux-wake-lock
Автоматическое переподключение при обрыве
nano ~/frp/run_frpc.sh
Содержимое файла:
#!/data/data/com.termux/files/usr/bin/sh cd $HOME/frp while true do echo "Starting FRPC..." ./frpc-android -c phone1.ini echo "FRPC stopped. Restarting in 1 second..." sleep 1 done
и конечно, не забываем поменять права:
chmod +x ~/frp/run_frpc.sh
Автозапуск FRPC при старте телефона (Termux:Boot)
mkdir -p ~/.termux/boot nano ~/.termux/boot/frpc.sh
Вставить текст:
#!/data/data/com.termux/files/usr/bin/sh termux-wake-lock cd $HOME/frp nohup ./run_frpc.sh >/dev/null 2>&1 &
и снова не забываем про права:
chmod +x ~/.termux/boot/frpc.sh
Перезапускаем телефон - все стартует автоматически.

3. Пользуемся
curl --socks5-user user:password --socks5 yourdomain:2001 https://ifconfig.me
Остается только следить за тем, чтобы телефон к wi-fi не подключился, а то смысл потеряется ...