
Когда очень хочется экспериментов и не хочется вкладываться финансово.
Исходные данные:
- мобильный телефон с сим-картой;
- домашний сервер;
- интернет с выделенным 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 = mysecret1.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.ini1.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 frpsdocker 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_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 не подключился, а то смысл потеряется ...



























