В Кинетеке есть простая поддержка ZeroTier, а вот Tailscale нужно делать через консоль.

Нужно сначала настроить Opkg.

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

Особенности:

  • Keenetic не любит когда другие приложения меняют роуты или DNS. Поэтому отключим.
  • Нужны роуты – можно прописать через Keenetic или воспользоваться скриптами по ссылкам выше.
  • --netfilter-mode=off --accept-dns=false – секрет успешной работы
  • exit node (--advertise-exit-node) тоже лучше не делать, но это не мешает аналогично роутить вручную (все же машины в одной сети, а роутеры уже настроены роутить вовне)
  • Имя машины – как имя хоста, но можно и отдельно менять.

Ставим

opkg install tailscale ip-full iptables
/opt/etc/init.d/S06tailscaled start
vi /opt/etc/ndm/netfilter.d/050-tailscale.sh
chmod +x /opt/etc/ndm/netfilter.d/050-tailscale.sh

tailscale up --login-server=https://... --authkey hskey-auth-... --netfilter-mode=off --accept-dns=false
tailscale set --advertise-routes 192.168.1.0/24
# reboot or something to apply netfilter for correct routing

ip route show table all
iptables -L FORWARD -n -v | grep tailscale
iptables -t nat -L POSTROUTING -n -v | grep tailscale

В админке сети нужно разрешить роутить в эту подсеть, если всю подсеть хочется выставить:

#!/bin/sh

IPT=/opt/sbin/iptables

[ "$type" = "ip6tables" ] && exit 0

if [ "$table" = "filter" ]; then
    $IPT -C FORWARD -i tailscale0 -j ACCEPT 2>/dev/null || \
        $IPT -I FORWARD -i tailscale0 -j ACCEPT
    $IPT -C FORWARD -o tailscale0 -j ACCEPT 2>/dev/null || \
        $IPT -I FORWARD -o tailscale0 -j ACCEPT
fi

# not needed if --advertise-routes 192.168.1.0/24 present
if [ "$table" = "nat" ]; then
    $IPT -t nat -C POSTROUTING -o tailscale0 -j MASQUERADE 2>/dev/null || \
        $IPT -t nat -A POSTROUTING -o tailscale0 -j MASQUERADE
fi

exit 0

DNS

DNS имена меняются крайне редко, можно из-за --accept-dns=false их явно прописать:

ip host mydomain.example.com 100.64.0.123
ip host mydomain2.example.com 100.64.0.123

system configuration save