Введение
Предположим, что вы хотите получить доступ к своей локальной сети из интернета, но у вас нет “белого” IP-адреса.
В моём случае в локальной сети постоянно работает Orange Pi 4A с установленной Ubuntu Server. На нём настроены miniDLNA, Jellyfin и Transmission — всё работает стабильно, и трогать уже настроенную систему не хотелось бы, чтобы случайно не нарушить её работу.
Поэтому я решил не вмешиваться в уже работающий сервер, а добавить в схему дополнительное устройство которое было под рукой — Orange Pi RV2. Оно будет использоваться как мост между интернетом и локальной сетью, через который можно безопасно получить доступ по SSH (и не только) к другим устройствам в сети.
Моя задача — получить доступ по SSH с любого компьютера/телефона к Orange Pi 4a (Ubuntu Server) через VPS и проброс портов с помощью FRP (Fast Reverse Proxy).
Особенность: Orange Pi RV2 работает на архитектуре riscv64, для которой нет готовых бинарников frp. Поэтому мы будем собирать frp самостоятельно.

Шаг 1. Подготовка VPS (сервер FRP)
- На VPS скачиваем готовый бинарник FRP для amd64:
cd /opt
wget https://github.com/fatedier/frp/releases/download/v0.62.1/frp_0.62.1_linux_amd64.tar.gz
tar -xzf frp_0.62.1_linux_amd64.tar.gz
mv frp_0.62.1_linux_amd64 frp
cd frp
2. Создаём конфиг сервера frps.ini с примером (открываем порт 7000 и проброс портов):
[common]
bind_port = 7000
# Настройка dashboard (опционально)
dashboard_port = 7500
dashboard_user = admin # пользователя вписываете любого
dashboard_pwd = admin # Ваш сложный пароль
В дальнейшем можно будет попасть в dashboard по пути https://ip-сервера:7500


3. Запускаем сервер:
./frps -c ./frps.ini
Для автозапуска лучше сделать systemd-сервис, например:
# /etc/systemd/system/frps.service
[Unit]
Description=FRP Server Service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/opt/frp/frps -c /opt/frp/frps.ini
Restart=on-failure
[Install]
WantedBy=multi-user.target
И активируем:
sudo systemctl daemon-reload
sudo systemctl enable frps
sudo systemctl start frps
Шаг 2. Подготовка Orange Pi RV2 (клиент FRP)
2.1 Установка Go для riscv64
1.Скачиваем Go для riscv64 (пример для Go 1.21.1):
cd /tmp
wget https://go.dev/dl/go1.21.1.linux-riscv64.tar.gz
sudo tar -C /usr/local -xzf go1.21.1.linux-riscv64.tar.gz
echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.profile
source ~/.profile
go version
2.2 Клонирование исходников frp и сборка
cd /opt
git clone https://github.com/fatedier/frp.git
cd frp
GOARCH=riscv64 GOOS=linux go build -o ./bin/frps ./cmd/frps
GOARCH=riscv64 GOOS=linux go build -o ./bin/frpc ./cmd/frpc
Проверяем бинарник:
file ./bin/frpc
# Должно быть: ELF 64-bit LSB executable, UCB RISC-V...
Шаг 3. Настройка конфигурации клиента (frpc.ini) на Orange Pi RV2
Создаём файл /opt/frp/frpc.ini:
[common]
server_addr = <IP_или_домен_VPS>
server_port = 7000
[ssh]
type = tcp
local_ip = 192.168.1.145 # в моем случае IP адрес Orange Pi 4A в локальной сети
local_port = 22
remote_port = 6000
- server_addr — IP или домен VPS.
- remote_port — порт, который будет слушать VPS для проброса SSH к Orange Pi.
Шаг 4. Запуск клиента FRP
Запускаем клиент:
cd /opt/frp
./bin/frpc -c ./frpc.ini
Шаг 5. Проверка подключения
С любого компьютера:
ssh -p 6000 <пользователь>@<IP_VPS>
Должен установиться SSH-туннель к Orange Pi 4a (через VPS).
Шаг 6. Автозапуск frpc на Orange Pi
Создаём systemd-сервис /etc/systemd/system/frpc.service:
[Unit]
Description=FRP Client Service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/opt/frp/bin/frpc -c /opt/frp/frpc.ini
Restart=on-failure
[Install]
WantedBy=multi-user.target
Активируем:
sudo systemctl daemon-reload
sudo systemctl enable frpc
sudo systemctl start frpc
Резюме
- На VPS запускаем frps (сервер).
- На Orange Pi RV2 (riscv64) компилируем frp из исходников с помощью Go.
- Настраиваем frpc.ini для проброса SSH.
- Запускаем клиента и проверяем доступ.
- Для удобства настраиваем автозапуск через systemd.