mirror of
https://github.com/andrey271192/keenetic_ssh-web.git
synced 2026-09-20 14:42:01 +00:00
tunnel: WireGuard VPS↔роутер для серых IP, без правки других сервисов
Решает доступ к роутеру с серым IP через белый VPS — поднимаем WG-туннель (UDP 51820, подсеть 10.99.0.0/24), и любой сервис на VPS обращается к роутеру по 10.99.0.X. SSH, HTTP, что угодно — без проброса портов и без изменений в keenetic_ssh-web/keenetic-unified/Domain Hydra/etc. Что добавлено: - tunnel/server-install.sh — установка WG-сервера на Ubuntu VPS, генерация ключей, запуск wg-quick@wg0, открытие 51820/udp в ufw. - tunnel/kssh-tun — утилита управления peer-ами на VPS: add/list/show/remove. add генерит ключи и IP, печатает ENV-блок с одной командой для роутера. - tunnel/tunnel-install.sh — клиент для роутера (Entware), принимает 4 ENV (VPS_ENDPOINT/VPS_PUBKEY/CLIENT_IP/CLIENT_PRIVKEY), ставит wireguard-tools, поднимает wg0 и init-скрипт автозапуска. - tunnel/README.md — пошаговая инструкция массовой установки. - README.md: краткая ссылка из основного раздела. Параметры подсети/порта/имени репо — через ENV для масштабной установки.
This commit is contained in:
168
tunnel/README.md
Normal file
168
tunnel/README.md
Normal file
@@ -0,0 +1,168 @@
|
||||
# tunnel/ — WireGuard-туннель VPS ↔ роутер
|
||||
|
||||
Решает задачу: у вас на роутере **серый IP** (нет публичного), но есть **VPS с белым IP**. Поднимаем WireGuard, и любой сервис на VPS обращается к роутеру по адресу из туннельной подсети (`10.99.0.X`), как если бы они были в одной LAN. SSH, HTTP, что угодно — без проброса портов и без переписывания других сервисов (`Domain Hydra`, `keenetic-unified`, `keenetic_ssh-web`, …).
|
||||
|
||||
```
|
||||
[VPS, белый IP] [Роутер, серый IP]
|
||||
:443 Caddy/Nginx → wg0 10.99.0.1 ⇄ wg0 10.99.0.X → 127.0.0.1:2001 (kssh-web)
|
||||
127.0.0.1:22 (SSH)
|
||||
…и т. д.
|
||||
```
|
||||
|
||||
UDP `51820`, подсеть `10.99.0.0/24`. Параметры можно поменять через ENV.
|
||||
|
||||
---
|
||||
|
||||
## 1. На VPS (Ubuntu) — один раз
|
||||
|
||||
```sh
|
||||
curl -fsSL https://raw.githubusercontent.com/andrey271192/keenetic_ssh-web/main/tunnel/server-install.sh | sudo sh
|
||||
```
|
||||
|
||||
Что делает:
|
||||
|
||||
- `apt install wireguard wireguard-tools curl`
|
||||
- генерит серверные ключи (`/etc/wireguard/server_{private,public}.key`)
|
||||
- создаёт `/etc/wireguard/wg0.conf` (UDP 51820, IP `10.99.0.1/24`)
|
||||
- ставит утилиту `kssh-tun` в `/usr/local/bin/`
|
||||
- открывает `51820/udp` в `ufw`, если он активен
|
||||
- запускает `wg-quick@wg0` и ставит на автозапуск (`systemctl enable`)
|
||||
|
||||
В конце выводит:
|
||||
|
||||
```
|
||||
Endpoint: <PUBLIC_IP>:51820/udp
|
||||
PublicKey: <SERVER_PUB>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. На VPS — добавление каждого роутера
|
||||
|
||||
```sh
|
||||
sudo kssh-tun add router-andrey-1
|
||||
```
|
||||
|
||||
Утилита:
|
||||
|
||||
- генерит пару ключей клиента
|
||||
- выделяет следующий свободный IP в подсети (`10.99.0.2`, `10.99.0.3`, …)
|
||||
- сохраняет peer-файл в `/etc/wireguard/peers/<name>.peer`
|
||||
- регенерирует `wg0.conf` и применяет без рестарта (`wg syncconf`)
|
||||
- **печатает готовую команду для роутера** — четыре `ENV=…` + `curl …` одной портянкой
|
||||
|
||||
Дополнительно:
|
||||
|
||||
```sh
|
||||
sudo kssh-tun list # список peer-ов
|
||||
sudo kssh-tun show router-andrey-1 # повторно вывести ENV-блок
|
||||
sudo kssh-tun remove router-andrey-1 # удалить peer
|
||||
sudo kssh-tun status # wg show wg0
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. На роутере (Keenetic + Entware)
|
||||
|
||||
Скопируйте блок из `kssh-tun add` и выполните на роутере. Пример (значения подставит `kssh-tun add`):
|
||||
|
||||
```sh
|
||||
VPS_ENDPOINT=SERVER_IP:51820 \
|
||||
VPS_PUBKEY='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=' \
|
||||
CLIENT_IP=10.99.0.5 \
|
||||
CLIENT_PRIVKEY='yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy=' \
|
||||
sh -c "curl -fsSL https://raw.githubusercontent.com/andrey271192/keenetic_ssh-web/main/tunnel/tunnel-install.sh | sh"
|
||||
```
|
||||
|
||||
Что делает:
|
||||
|
||||
- `opkg install wireguard-tools` (если ещё нет)
|
||||
- пишет `/opt/etc/wireguard/wg0.conf`
|
||||
- поднимает интерфейс `wg0` с адресом `CLIENT_IP/24`
|
||||
- маршрутизирует `10.99.0.0/24` через `wg0`
|
||||
- ставит init-скрипт `/opt/etc/init.d/S50kssh-tunnel` ({start|stop|restart|status}) и rc.d-симлинк автозапуска
|
||||
- в конце пингует `10.99.0.1` (VPS) для проверки
|
||||
|
||||
Если ping не прошёл — почти всегда дело в фаерволе VPS: `sudo ufw allow 51820/udp` (или эквивалент для iptables/firewalld).
|
||||
|
||||
---
|
||||
|
||||
## 4. Использование туннеля
|
||||
|
||||
После запуска любые сервисы на VPS обращаются к роутеру по `10.99.0.X`:
|
||||
|
||||
```sh
|
||||
# С VPS — веб-панель keenetic_ssh-web
|
||||
curl http://10.99.0.5:2001/
|
||||
|
||||
# SSH на роутер с VPS (если у роутера включён SSH)
|
||||
ssh root@10.99.0.5
|
||||
|
||||
# Reverse-proxy на VPS: keenetic.example.com → http://10.99.0.5:2001
|
||||
# (Caddy/Nginx — прозрачно)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Параметры (ENV)
|
||||
|
||||
### `server-install.sh`
|
||||
|
||||
| Переменная | По умолчанию | Описание |
|
||||
|---|---|---|
|
||||
| `WG_PORT` | `51820` | UDP-порт сервера. |
|
||||
| `WG_SUBNET_PREFIX` | `10.99.0` | Первые три октета подсети `/24`. |
|
||||
| `WG_SERVER_LAST_OCTET` | `1` | Последний октет адреса сервера в туннеле. |
|
||||
| `KSSH_REPO` | `andrey271192/keenetic_ssh-web` | Репо, из которого ставить `kssh-tun` и `tunnel-install.sh`. |
|
||||
| `KSSH_BRANCH` | `main` | Ветка. |
|
||||
|
||||
### `tunnel-install.sh` (на роутере)
|
||||
|
||||
| Переменная | Обязательная | Описание |
|
||||
|---|---|---|
|
||||
| `VPS_ENDPOINT` | да | `<публичный IP>:<порт>`, UDP. |
|
||||
| `VPS_PUBKEY` | да | PublicKey сервера. |
|
||||
| `CLIENT_IP` | да | IP роутера в туннельной подсети, например `10.99.0.5`. |
|
||||
| `CLIENT_PRIVKEY` | да | PrivateKey роутера (выдаёт `kssh-tun add`). |
|
||||
| `WG_IF` | `wg0` | Имя интерфейса. |
|
||||
| `WG_SUBNET` | `10.99.0.0/24` | AllowedIPs клиента (что маршрутизировать в туннель). |
|
||||
| `WG_KEEPALIVE` | `25` | `PersistentKeepalive` в секундах (нужен из-за NAT провайдера). |
|
||||
|
||||
---
|
||||
|
||||
## Безопасность
|
||||
|
||||
- WireGuard сам по себе шифрует трафик; но peer-файлы (`/etc/wireguard/peers/*.peer`) содержат **приватные ключи клиентов** в открытом виде — храните VPS чистым.
|
||||
- Закройте `tunnel-install.sh`-команду от посторонних (там есть `CLIENT_PRIVKEY`). В Telegram/мессенджеры лучше не пересылать.
|
||||
- `kssh-tun show <name>` всегда покажет ENV-блок снова — пароль не нужен, повторно сгенерировать ключ не получится. Если ключ утёк — `remove` и заново `add`.
|
||||
- На стороне роутера `tunnel-install.sh` пишет конфиг в `/opt/etc/wireguard/wg0.conf` с правами `600`.
|
||||
|
||||
---
|
||||
|
||||
## Удаление
|
||||
|
||||
На VPS:
|
||||
|
||||
```sh
|
||||
sudo kssh-tun remove <name> # для каждого клиента
|
||||
sudo systemctl disable --now wg-quick@wg0
|
||||
sudo apt remove --purge wireguard wireguard-tools
|
||||
sudo rm -rf /etc/wireguard /usr/local/bin/kssh-tun
|
||||
```
|
||||
|
||||
На роутере:
|
||||
|
||||
```sh
|
||||
/opt/etc/init.d/S50kssh-tunnel stop
|
||||
rm -f /opt/etc/rc.d/S50kssh-tunnel /opt/etc/init.d/S50kssh-tunnel
|
||||
rm -rf /opt/etc/wireguard
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Что не входит в этот туннель
|
||||
|
||||
- **NAT с роутера в интернет через VPS**. Здесь VPS лишь видит роутер; чтобы роутер выходил в интернет через VPS, на сервере нужен `MASQUERADE` и `ip_forward`. Не наша цель.
|
||||
- **Доступ из VPS в LAN роутера** (`192.168.1.0/24`). Если нужно — расширьте `AllowedIPs` peer-а на стороне сервера и включите `ip_forward` на роутере.
|
||||
|
||||
В обоих случаях скажите — добавлю в установщик ENV-флаги.
|
||||
Reference in New Issue
Block a user