[2026-09-17] eagle: family/how-to/rasputin-router.md
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
---
|
---
|
||||||
title: Rasputin OpenWrt router
|
title: Rasputin OpenWrt router
|
||||||
created: '2026-07-22'
|
created: '2026-07-22'
|
||||||
updated: '2026-09-15'
|
updated: '2026-09-17'
|
||||||
tags:
|
tags:
|
||||||
- openwrt
|
- openwrt
|
||||||
- router
|
- router
|
||||||
@@ -12,7 +12,7 @@ tags:
|
|||||||
---
|
---
|
||||||
# Rasputin R5S OpenWrt router
|
# Rasputin R5S OpenWrt router
|
||||||
|
|
||||||
> Status as of 2026-07-22: Rasputin is the OpenWrt edge/LAN router, routing normal LAN traffic through a VLESS/Xray tunnel via `tun0`, with explicit direct-WAN exceptions for upstream LAN access and Mac `cloudflared` QUIC traffic.
|
> Status as of 2026-09-17: Rasputin is the OpenWrt edge/LAN router, routing normal LAN traffic through a VLESS/Xray tunnel via `tun0`, with explicit direct-WAN exceptions for upstream LAN access and Mac `cloudflared` QUIC traffic. ⚠️ **WAN переехал на `eth0` (`192.168.2.157/24`, gw `192.168.2.2`)** — см. раздел «WAN-интерфейс изменился» ниже. Транзит в GPON-сегмент `192.168.0.0/24` **сломан** — см. одноимённый раздел.
|
||||||
|
|
||||||
## Identity
|
## Identity
|
||||||
|
|
||||||
@@ -461,6 +461,80 @@ Vr HL TOS Len ID Flg off TTL Pro cks Src Dst
|
|||||||
- Между сегментами есть санитарный `Reject to LAN` в `forward_lan` → произвольные порты не пройдут, ICMP-эхо тоже.
|
- Между сегментами есть санитарный `Reject to LAN` в `forward_lan` → произвольные порты не пройдут, ICMP-эхо тоже.
|
||||||
- Порты HA (`8123`) и SSH (`22`) через транзит роутера **не проверять как индикатор живости** — индикатор это сам факт ответа SSH-сессии.
|
- Порты HA (`8123`) и SSH (`22`) через транзит роутера **не проверять как индикатор живости** — индикатор это сам факт ответа SSH-сессии.
|
||||||
|
|
||||||
|
## 🔴 Транзит Rasputin → 192.168.0.0/24 (GPON-сегмент) НЕ РАБОТАЕТ
|
||||||
|
|
||||||
|
**Наблюдение 2026-09-17.** Симптом: с Мака (LAN `192.168.6.0/24`) трафик на `192.168.0.50` и `192.168.0.1` (80 порт) не проходит.
|
||||||
|
|
||||||
|
### Что подтверждено фактами
|
||||||
|
|
||||||
|
| Тест | Результат |
|
||||||
|
|---|---|
|
||||||
|
| `ping -c2 192.168.0.50` **с Мака** (`192.168.6.173`, en8) | 100% loss |
|
||||||
|
| `ping -c2 192.168.0.50` **с самого Rasputin** | ✅ 0% loss, 2.11–2.79 ms, ttl=63 |
|
||||||
|
| `ping -c2 192.168.2.2` с Мака | 100% loss + `Destination Port Unreachable` от `192.168.6.1` |
|
||||||
|
|
||||||
|
Вывод из таблицы: **L2/L3 от Rasputin до `192.168.0.50` живой** (`ttl=63` — один хоп). Ломается **только транзит из LAN `192.168.6.0/24`**.
|
||||||
|
|
||||||
|
### Три причины
|
||||||
|
|
||||||
|
**1. `ip rule 100` покрывает только `192.168.2.0/24`.**
|
||||||
|
|
||||||
|
Фактические правила на роутере (2026-09-17):
|
||||||
|
|
||||||
|
```text
|
||||||
|
0: from all lookup local
|
||||||
|
98: from 192.168.6.173 ipproto udp dport 7844 lookup main
|
||||||
|
99: from 192.168.6.104 ipproto udp dport 7844 lookup main
|
||||||
|
100: from all to 192.168.2.0/24 lookup main
|
||||||
|
101: from all iif br-lan lookup vpn
|
||||||
|
32766: from all lookup main
|
||||||
|
32767: from all lookup default
|
||||||
|
```
|
||||||
|
|
||||||
|
Для `192.168.0.50` правило `100` **не матчится** → пакет попадает в `101` → `table vpn` → `tun0` (VLESS). Трафик уходит в туннель вместо WAN.
|
||||||
|
|
||||||
|
**2. NAT/masq для зоны `wan` не покрывает `192.168.0.0/24`.**
|
||||||
|
|
||||||
|
Правило firewall уже расширено до GPON-сегмента:
|
||||||
|
|
||||||
|
```text
|
||||||
|
meta l4proto tcp ip daddr { 192.168.0.1, 192.168.0.50, 192.168.2.0/24 } counter packets 19 bytes 1216 jump accept_to_wan comment "!fw4: Allow-upstream-LAN"
|
||||||
|
meta l4proto udp ip daddr { 192.168.0.1, 192.168.0.50, 192.168.2.0/24 } counter packets 0 bytes 0 jump accept_to_wan comment "!fw4: Allow-upstream-LAN"
|
||||||
|
```
|
||||||
|
|
||||||
|
То есть forward разрешён, но пакет уходит с source `192.168.6.x`, а GPON-сегмент не знает обратного маршрута в `192.168.6.0/24`. Ответ вернуться не может. В `forward_lan` **нет NAT-правила** для этого направления.
|
||||||
|
|
||||||
|
**3. ICMP зарезан отдельно.**
|
||||||
|
|
||||||
|
`Allow-upstream-LAN` в nft создан в двух вариантах — `tcp` и `udp`, **без `icmp`** — и стоит выше KillSwitch. Остальной ICMP из LAN падает в `KillSwitch` (`packets 71 bytes 6192`). Отсюда `Destination Port Unreachable` от самого роутера (см. раздел про ICMP ниже).
|
||||||
|
|
||||||
|
> ⚠️ Из-за п.3 **пинг не является индикатором** доступности `192.168.0.0/24` из LAN. Проверять только тем каналом, которым будете работать (SSH/TCP).
|
||||||
|
|
||||||
|
### WAN-интерфейс изменился (факт 2026-09-17)
|
||||||
|
|
||||||
|
Ранее (capture 2026-07-22) WAN был `usb0` с адресом `10.252.240.230`. Сейчас **WAN = `eth0`**:
|
||||||
|
|
||||||
|
```text
|
||||||
|
inet 192.168.2.157/24 scope global eth0
|
||||||
|
default via 192.168.2.2 dev eth0 proto static src 192.168.2.157
|
||||||
|
```
|
||||||
|
|
||||||
|
То есть Rasputin получает адрес `192.168.2.157` **от роутера `192.168.2.2`** и выходит в интернет через него, а `192.168.2.2` — через GPON `192.168.0.1`. Топология запроса подтверждена: `rasputin → 192.168.2.2 → 192.168.0.1 (GPON) → 192.168.0.50`.
|
||||||
|
|
||||||
|
### План ремонта (НЕ применён, ждёт апрува)
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# 1. ip rule — расширить bypass на GPON-сегмент
|
||||||
|
ip rule add to 192.168.0.0/24 lookup main priority 100
|
||||||
|
# 2. та же строка в /etc/rc.local — иначе умрёт после ребута
|
||||||
|
# 3. firewall: Allow-upstream-LAN dest_ip += 192.168.0.0/24, добавить proto icmp
|
||||||
|
# 4. проверить, что masq зоны wan покрывает 192.168.0.0/24 (иначе ответ не вернётся)
|
||||||
|
```
|
||||||
|
|
||||||
|
Порядок работ по боевому конфигу: коммит ДО → правка → заливка → проверка Алекса руками → коммит ПОСЛЕ.
|
||||||
|
|
||||||
|
Три причины: (1) `ip rule 100` покрывает только `192.168.2.0/24` — трафик на `192.168.0.0/24` не матчится и уходит в `table vpn`/`tun0` вместо WAN; (2) нет NAT/masq для GPON-сегмента — пакет уходит с source `192.168.6.x`, ответ не может вернуться; (3) `Allow-upstream-LAN` создан только для `tcp`+`udp`, **без `icmp`** — ICMP из LAN падает в KillSwitch, и роутер сам отдаёт `Destination Port Unreachable`. Поэтому **пинг не индикатор**: для `192.168.0.0/24` он врёт так же, как для `192.168.2.0/24`. Проверять только тем каналом, которым будете работать (SSH/TCP), напр. `nc -zv 192.168.0.50 80` или `ssh -o BatchMode=yes`.
|
||||||
|
|
||||||
## Downstream LAN Access
|
## Downstream LAN Access
|
||||||
|
|
||||||
```text
|
```text
|
||||||
|
|||||||
Reference in New Issue
Block a user