Удалённый SSH-доступ в локальную сеть через FRP и VPS (на примере Orange Pi RV2)

Введение

Предположим, что вы хотите получить доступ к своей локальной сети из интернета, но у вас нет “белого” 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)

  1. На 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.

Полезные ссылки