linux-routing · git:20260919.c5defa2 · 2026-09-19 · sha256 8b4efd413e1ab797
linux-routing git:20260919.c5defa2A
Immutable. This exact content never changes and is served at /api/v1/blob/8b4efd413e1ab797.
--- name: linux-routing description: "Linux split-tunnel и policy routing: ip rule, fwmark, WAN, awg0, default via VPN, nft masquerade, rp_filter, conntrack. Не OpenWrt, не podkop, не UCI. Триггеры: split-tunnel, ip rule, fwmark, multiple default, rt_tables, source-based routing." --- # Linux Routing Skill про маршрутизацию и NAT на Linux-хосте (iproute2 + nftables). Пиши команды `ip`/`nft`, которые можно вставить в консоль или unit. Не используй для: - OpenWrt + podkop/sing-box → `podkop-openwrt-guide` - zapret DPI → `zapret-openwrt-guide` - Docker bridge overlay как основной предмет → `docker-ops` - Amnezia ключи/handshake → `amnezia-vpn`, сюда только OS-routes/NAT ## Когда использовать - Два default route, VPN + WAN, split-tunnel. - `ip rule`, таблицы, fwmark, source-based routing. - NAT/masquerade, port forward, conntrack. - Пакет уходит в VPN, ответ не возвращается; asymmetric routing. - WireGuard/AWG `AllowedIPs` vs `ip route`. ## Workflow 1. Сними картину: `ip -br addr`, `ip route`, `ip rule`, `nft list ruleset`. 2. Отдели L3 (route/rule) от L4 NAT (nft) и от firewall drop. 3. Меняй одну таблицу/rule за раз. Не сноси default в main вслепую. 4. Проверяй `ip route get <dst> from <src> iif <if> mark <hex>`. 5. Persistence: `/etc/iproute2/rt_tables`, netplan/NM dispatcher, nftables.conf — не «команды в истории SSH». ## Быстрый снимок ```bash ip -br addr ip route show table all ip rule show ip route get 1.1.1.1 nft list ruleset sysctl net.ipv4.ip_forward net.ipv4.conf.all.rp_filter conntrack -S 2>/dev/null ``` ## Модель Пакет идёт так: **rule → table → route → nft (filter/nat) → device**. `AllowedIPs` в WG/AWG — это cryptokey routing внутри интерфейса, не замена `ip rule`. Если OS не отправила пакет в `awg0`, туннель ни при чём. ## Companion skills - Host systemd/sshd/disk → `administering-linux`. - Docker published ports vs iptables-nft → вместе с `docker-ops`. - AWG handshake/keys → `amnezia-vpn`. ## References - `references/policy-routing.md` — tables, rules, fwmark, split-tunnel. - `references/nftables.md` — NAT, forward, conntrack, rp_filter. <!-- A-EVOLVE-ROUTING-SIGNALS:START --> ## Routing signals: ip route ip rule policy routing fwmark rt_tables nftables masquerade conntrack rp_filter split tunnel vrf allowedips multiple wan <!-- A-EVOLVE-ROUTING-SIGNALS:END -->