Skip to content

Repository files navigation

ksd — демон Killswitch для OpenWrt

Русский English 中文

KSD

Go OpenWrt Status

Демон на Go, реализующий fail-close killswitch для OpenWrt поверх nftables. Предназначен для использования с Passwall2: весь немаркированный трафик блокируется, если он не идёт к разрешённым VPS-адресам.

Возможности

  • Атомарное применение правил nftables (nft transaction)
  • Автоматический rollback в baseline при ошибках
  • Блокировка DNS / DoT / DoQ / DoH утечек
  • Опциональная блокировка QUIC (UDP/443)
  • Защита LAN-клиентов через forward-хук
  • ARP-защита от спуфинга
  • MSS clamp и опциональный TTL set
  • Периодическая верификация правил в ядре
  • Нулевые внешние зависимости (CGO_ENABLED=0, статическая сборка)

Совместимо с:

Passwall2 — считывает inet passwall2 psw2_vps (проверено).

Mihomo / OpenClash — source_set none + allowed_mark '<routing-mark>'
(принимаются десятичные метки: 6666).

mwan3 — source_set none + allowed_mark '<value>/<mask>'
(например, 0xff/0xff).

Nikki, sing-box, пользовательские скрипты — source_set none + allowed_mark.

Скачивание

Выбери файл под архитектуру роутера (uname -m):

uname -m Файл
aarch64 ksd-arm64
x86_64 ksd-amd64
mips ksd-mips
mipsel ksd-mipsle

Скачай со страницы релиза: https://github.com/Artronah1/KSD/releases/latest

Проверь sha256: sha256sum ksd-arm64

Сборка

go build -o ksd ./...

Кросс-компиляция под OpenWrt (пример для ARM64):

GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o ksd-arm64 ./...

Установка

⚠ Держи UART или вторую SSH-сессию открытой. Если ksd заблокирует доступ — восстановишь оттуда.

  1. Скачать бинарник под архитектуру роутера (uname -m):

    wget https://github.com/Artronah1/KSD/releases/latest/download/ksd-arm64
    sha256sum ksd-arm64
    

    Хеш должен совпасть с sha256 на странице релиза.

  2. Скопировать файлы на роутер:

    scp ksd-arm64 root@192.168.1.1:/tmp/ksd
    scp openwrt/killswitch.config root@192.168.1.1:/etc/config/killswitch
    scp openwrt/ksd root@192.168.1.1:/etc/init.d/ksd
    scp openwrt/ksd-boot root@192.168.1.1:/etc/init.d/ksd-boot
    scp openwrt/emergency.nft root@192.168.1.1:/etc/ksd/emergency.nft
    
  3. Установить на роутере:

    ssh root@192.168.1.1
    
    cp /tmp/ksd /usr/sbin/ksd
    chmod +x /usr/sbin/ksd /etc/init.d/ksd /etc/init.d/ksd-boot
    /etc/init.d/ksd-boot enable
    /etc/init.d/ksd enable
    
  4. Проверить конфиг /etc/config/killswitch:

    nano /etc/config/killswitch
    

    Убедиться, что корректны: source_set, wan_interface / wan_device, allowed_iface, arp_protection и arp_gateway_mac.

  5. Первый запуск:

    /usr/sbin/ksd install -config /etc/config/killswitch
    
  6. Запустить сервис:

    /etc/init.d/ksd start
    
  7. Проверка:

    /usr/sbin/ksd status -config /etc/config/killswitch
    /usr/sbin/ksd self-test -config /etc/config/killswitch
    

Автоматическая установка

Универсальный installer: сам определяет архитектуру, WAN, LAN-бриджи, шлюз и его MAC, источник VPS, генерирует /etc/config/killswitch, скачивает подходящий бинарник и устанавливает сервис.

На роутере:

wget -O /tmp/install.sh https://raw.githubusercontent.com/Artronah1/KSD/main/scripts/install.sh
sh /tmp/install.sh

Опции:

sh /tmp/install.sh -v v1.1.4        # конкретная версия
sh /tmp/install.sh -f /tmp/ksd-arm64  # локальный бинарник

Если конфиг /etc/config/killswitch уже существует — installer его сохранит и не тронет. Проверь значения source_set, wan_device, arp_gateway вручную.

После установки — restart:

/etc/init.d/ksd restart

Документация

Лицензия

木兰公共许可证第 2 版 (Mulan PubL v2) — подробности в LICENSE.

Copyleft с сетевой оговоркой: производные работы, включая предоставление сервисов через сеть, должны распространяться под той же лицензией с открытым исходным кодом.

Статус

  • v3.5 (shell) — reference implementation, frozen 2026-08-30
  • v1.3.x (Go) — current stable release

About

"Fail-close killswitch daemon for Passwall2 on OpenWrt. Prevents IP/DNS leaks when proxy source fails. Atomic nftables, 30s polling, real-time verification."

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages