Jump to content

tailscale – сеть VPN, которая не нуждается в конфигурировании


Recommended Posts

Tailscale это новый проект - https://tailscale.com/ . Аналоги ngrok и ZeroTier. С помощью tailscale можно объединять в единую сеть разные устройств (в том числе и с "серыми" ip), давать доступ к другим устройствам, расположенным в одной сети с узлом tailscale, выходить в интернет через другой узел tailscale. Есть и другие функции - Magik DNS и т.д. Подробнее читайте на оффсайте. Есть версии под все современные операционные системы, а теперь и пакет Entware.
Исходный код проекта - https://github.com/tailscale/tailscale

Главное удобство - простота настройки.

Об опыте (положительном и отрицательном) делимся тут.

Link to comment
Share on other sites

  • zyxmon changed the title to tailscale – сеть VPN, которая не нуждается в конфигурировании

Спасибо!

 

А какие отличия от ZeroTier?

ZeroTier вроде тоже на mipsel ставится, даже была инструкция где-то здесь на форуме.

Есть инфа сколько занимает установка ZeroTier? Поднимется на внутреннем nand для прошивки 3.7.*

 

Пользую ZeroTier дома (но не на кинетике пока)

Link to comment
Share on other sites

Я с этим проектом не знаком. Попросили - собрал. Проверяющий ответил, что вроде работает, но инструкцию, что делал, написать не может. Да - это альтернатива ZeroTier.

 

Что делал я.

0. установил пакет iproute2, busybox похоже не достаточно.

 opkg install ip-full

А вот tun уже входит у меня в ядро, модуль не нужен.

1. В отдельной консоли запустил сервис

tailscaled -state=/opt/var/tailscaled.state

По идее нужно запускать в фоне с перенаправлением stdout и stderr в /dev/null. Я решил оставить лог в консоли для отладки.

2. Поднял tailscale в другой консоли. Тут два варианта - интерактивный или через постоянный ключ

Интерактивно:
tailscale up
Или через ключ (нужно создать постоянный на несколько хостов на tailscale.com
tailscale up --authkey=tskey-........

3. Проверить через ping 100.101.102.103, что соединение рабочее.

Я еще через

iptables -nvL
ip route show table all

смотрел, что там с маршрутизацией и правилами netfilter. Нет уверенности, что для кинетика все тут правильно. Дальше, надеюсь, кому интересно дальше покопают.

Link to comment
Share on other sites

5 минут назад, Andrey Che сказал:

На KN-1010 запустилось и работает.

Что с потреблением памяти. Как то до этого считалось, что программы на go очень ресурсоемкие. По моим прикидкам демон tailscaled потребляет 20МБ и немного CPU.
Проверял через free с запущенным демоном и после его выгрузки.

Link to comment
Share on other sites

2 hours ago, zyxmon said:

Поднял tailscale в другой консоли.

Что-то у меня не поднимается... 

Висит "tailscale up" команда:

/storage/tmp # tailscale up

 

В другом терминале крутится "tailscaled -state=/opt/var/tailscaled.state"

Но там вижу ошибки:

control: authRoutine: state:authenticating; wantLoggedIn=true
control: direct.TryLogin(token=false, flags=0)
control: doLogin(regen=false, hasUrl=false)
Received error: TryLogin: fetch control key: Get "https://login.tailscale.com/key": x509: certificate signed by unknown authority
control: authRoutine: backoff: 5664 msec
monitor: RTM_NEWROUTE: src=, dst=64.233.164.102/32, gw=192.168.8.1, outif=24, table=10
monitor: RTM_NEWROUTE: src=, dst=64.233.164.138/32, gw=192.168.8.1, outif=24, table=10
[RATE LIMITED] format string "monitor: %s: src=%v, dst=%v, gw=%v, outif=%v, table=%v" (example: "monitor: RTM_NEWROUTE: src=, dst=64.233.164.101/32, gw=192.168.8.1, outif=24, table=10")
logtail: dialed "log.tailscale.io:443" in 230ms
logtail: upload: log upload of 889 bytes compressed failed: Post "https://log.tailscale.io/c/tailnode.log.tailscale.io/f8a6e474728ab83a276b3e56fb41ab9f8fd18270b35dc0a5b8e19d3ae852d972": x509: certificate signed by unknown authority
logtail: backoff: 3586 msec

 

Видать логин не прописал... Но куда его прописать? Пока не вижу...

Link to comment
Share on other sites

2 minutes ago, zyxmon said:

Пакеты с сертификатами установлены? `opkg install ca-bundle`

Нет, действительно

/storage/tmp # opkg install ca-bundle
Installing ca-bundle (20210119-1) to root...
Downloading http://bin.entware.net/mipselsf-k3.4/ca-bundle_20210119-1_all.ipk
Configuring ca-bundle.
/storage/tmp #

До этого и iptables не стоял... но это сам понял по ошибке раньше:

~ # tailscaled -state=/opt/var/tailscaled.state
...
Creating router...
wgengine.NewUserspaceEngine(tun "tailscale0") error: exec: "iptables": executable file not found in $PATH
wgengine.New: exec: "iptables": executable file not found in $PATH
flushing log.
logger closing down

 

Теперь нормально и заработало!

/storage/tmp # tailscale up

To authenticate, visit:

        https://login.tailscale.com/a/111111111

Success.
/storage/tmp #

 

Пинги пошли:

~ # ping 100.101.102.103
PING 100.101.102.103 (100.101.102.103): 56 data bytes
64 bytes from 100.101.102.103: seq=3 ttl=64 time=90.169 ms

(связь через 4G, поэтому и задержки большие)

Спасибо!

Link to comment
Share on other sites

12 минуты назад, Vladislav Proskuryakov сказал:

Теперь нормально и заработало!

Не все так просто. Я поставил tailscale на НАС в домашней сети и на кинетик (в режиме точки доступа). На НАС с работы захожу без проблем. А на кинетик не могу. Скорее всего - причина с правилами iptables на кинетике, не хватает тех, что добавляет tailscale. Позже может проверю и с роутером, там немного все иначе. Но у роутера белый ip - интереснее соединяться с устройствами с серыми ip.

Link to comment
Share on other sites

15 minutes ago, zyxmon said:

Не все так просто. Я поставил tailscale на НАС в домашней сети и на кинетик (в режиме точки доступа). На НАС с работы захожу без проблем. А на кинетик не могу. Скорее всего - причина с правилами iptables на кинетике, не хватает тех, что добавляет tailscale. Позже может проверю и с роутером, там немного все иначе. Но у роутера белый ip - интереснее соединяться с устройствами с серыми ip.

Подтверждаю... Сейчас поставил tailscale на телефон и зайти не могу на кинетик по ssh :(

Link to comment
Share on other sites

Заметил, что когда стопаешь процесс "tailscaled -state=/opt/var/tailscaled.state" то видны ошибки по iptables:

^Ctailscaled got signal interrupt; shutting down
control: client.Shutdown()
control: client.Shutdown: inSendStatus=0
control: authRoutine: state:synchronized; goal=nil
control: mapRoutine: state:authenticated
control: mapRoutine: quit
control: Client.Shutdown done.
magicsock: closing connection to derp-4 (conn-close), age 40m1s
magicsock: 0 active derp conns
router: note: deleting [-j ts-input] in filter/INPUT: %!w(*iptables.Error=&{{0xdb62f0 []} {/opt/sbin/iptables [/opt/sbin/iptables -t filter -D INPUT -j ts-input --wait] []  <nil> <nil> 0x1160528 [] <nil> 0xcd4270 0xdb62f0 <nil> <nil> true [0x122e380 0x122e3b8 0x122e3e8] [0x122e380 0x122e3b8 0x122e3e8] [0x122e3c0] [0x34f82c] 0x12b1040 <nil>} iptables v1.4.21: Couldn't load target `ts-input':No such file or directory

Try `iptables -h' or 'iptables --help' for more information.
 0 <nil>})
router: note: deleting [-j ts-forward] in filter/FORWARD: %!w(*iptables.Error=&{{0xdb6430 []} {/opt/sbin/iptables [/opt/sbin/iptables -t filter -D FORWARD -j ts-forward --wait] []  <nil> <nil> 0x115e240 [] <nil> 0xc1e3f0 0xdb6430 <nil> <nil> true [0xdd0568 0xdd0578 0xdd0588] [0xdd0568 0xdd0578 0xdd0588] [0xdd0580] [0x34f82c] 0xd150c0 <nil>} iptables v1.4.21: Couldn't load target `ts-forward':No such file or directory

Try `iptables -h' or 'iptables --help' for more information.
 0 <nil>})
router: note: deleting [-j ts-postrouting] in nat/POSTROUTING: %!w(*iptables.Error=&{{0xdb64f0 []} {/opt/sbin/iptables [/opt/sbin/iptables -t nat -D POSTROUTING -j ts-postrouting --wait] []  <nil> <nil> 0x115e2a0 [] <nil> 0xc1e450 0xdb64f0 <nil> <nil> true [0xdd05d0 0xdd05e0 0xdd05f0] [0xdd05d0 0xdd05e0 0xdd05f0] [0xdd05e8] [0x34f82c] 0xd15440 <nil>} iptables v1.4.21: Couldn't load target `ts-postrouting':No such file or directory

Try `iptables -h' or 'iptables --help' for more information.
 0 <nil>})
monitor: RTM_DELROUTE: src=100.96.170.25/0, dst=100.96.170.25/32, gw=, outif=35, table=255
flushing log.
logger closing down
~ #

 

Link to comment
Share on other sites

2 часа назад, Vladislav Proskuryakov сказал:

то видны ошибки по iptables:

У меня все корректно. Единственно перед `killall tailscaled` я делаю `tailscale down`

tailscaled got signal terminated; shutting down
control: client.Shutdown()
control: client.Shutdown: inSendStatus=0
control: authRoutine: state:authenticated; goal=nil
control: mapRoutine: quit
control: Client.Shutdown done.
external route MTU: 1280 (<nil>)
monitor: RTM_DELROUTE: src=, dst=fe80::/64, gw=, outif=31, table=254
monitor: RTM_DELROUTE: src=, dst=ff00::/8, gw=, outif=31, table=254
[RATE LIMITED] format string "monitor: %s: src=%v, dst=%v, gw=%v, outif=%v, table=%v" (example: "monitor: RTM_DELROUTE: src=, dst=fe80::ab30:2278:5f0b:fb30/128, gw=, outif=1, table=254")
flushing log.
logger closing down

Кстати, я выяснил, какого правила не хватает для доступа к кинетику (в моем случае). Достаточно прописать

 iptables -I INPUT -i tailscale0 -j ACCEPT

После этого все работает как надо.

Link to comment
Share on other sites

17 часов назад, Andrey Che сказал:

Потребляет примерно 18 мб памяти и ~1% cpu. Но иногда подскакивает до 40%. Смотрю по htop.

Скрытый текст

/ # ps | grep tailscale
 1331 root      656m S    tailscaled -state=/opt/var/tailscaled.state
 1533 root      5000 S    grep tailscale
/ # cd /proc/1331
/proc/1331 # cat status
Name:   tailscaled
Umask:  0022
State:  S (sleeping)
Tgid:   1331
Ngid:   0
Pid:    1331
PPid:   1231
TracerPid:      0
Uid:    0       0       0       0
Gid:    0       0       0       0
FDSize: 32
Groups:  
VmPeak:   672716 kB
VmSize:   672716 kB
VmLck:         0 kB
VmPin:         0 kB
VmHWM:     17512 kB
VmRSS:     16668 kB
RssAnon:            7816 kB
RssFile:            8852 kB
RssShmem:              0 kB
VmData:    11908 kB
VmStk:       132 kB
VmExe:      5136 kB
VmLib:      3664 kB
VmPTE:        36 kB
VmPMD:         0 kB
VmSwap:        0 kB
Threads:        13
SigQ:   4/1987
SigPnd: 00000000000000000000000000000000
ShdPnd: 00000000000000000000000000000000
SigBlk: 00000000000000000000000000000000
SigIgn: 00000000000000000000000000001000
SigCgt: fffffffffffffffffffffffc783feeff
CapInh: 0000000000000000
CapPrm: 0000003fffffffff
CapEff: 0000003fffffffff
CapBnd: 0000003fffffffff
CapAmb: 0000000000000000
Speculation_Store_Bypass:       unknown
Cpus_allowed:   f
Cpus_allowed_list:      0-3
voluntary_ctxt_switches:        885
nonvoluntary_ctxt_switches:     426
/proc/1331 # 

 

 

Link to comment
Share on other sites

Я tailscale на кинетик в режиме роутера не ставил, не смотрел. Возможно главная проблема будет в том, что кинетик сбрасывает правила netfilter - 

Для бинарников, которые сами пытаются управлять этими правилами нужно все равно писать скрипты-хуки.

Для NASов и компов tailscale интересный проект. Для роутеров - пока встретил пару сообщений об успешном запуске tailscale на openwrt.

Link to comment
Share on other sites

43 minutes ago, zyxmon said:

Я tailscale на кинетик в режиме роутера не ставил, не смотрел. Возможно главная проблема будет в том, что кинетик сбрасывает правила netfilter

То есть в режиме доступа к сети за кинетиком не получится так просто организовать доступ?

А то планировал взять этот вариант:

https://tailscale.com/kb/1019/subnets

Link to comment
Share on other sites

24 минуты назад, Vladislav Proskuryakov сказал:

То есть в режиме доступа к сети за кинетиком не получится так просто организовать доступ?

Я писал совсем о другом. О том, что операционная система кинетиков сбрасывает netfilter (который прописывает tailscale) и, скорее всего, потребуется писать скрипты-хуки.

ЗЫ Для доступа к сети за кинетиком, можно попробовать другое устройство, если на него можно поставить tailscale. Это может быть проще.

 

Link to comment
Share on other sites

6 minutes ago, zyxmon said:

ЗЫ Для доступа к сети за кинетиком, можно попробовать другое устройство, если на него можно поставить tailscale. Это может быть проще.

Да, уже понял, что, как обычно, лучше выходит это закрутить на малинке ))

Link to comment
Share on other sites

15 hours ago, zyxmon said:

У меня все корректно. Единственно перед `killall tailscaled` я делаю `tailscale down`

Всё равно есть ошибки у меня, даже после вашей процедуры.

Может тоже чего не хватает на свеже установленном entware в 3.7.Alpha4 ?

Switching ipn state Running -> Stopped (WantRunning=false)
magicsock: SetPrivateKey called (zeroed)
magicsock: closing connection to derp-4 (zero-private-key), age 6m32s
magicsock: 0 active derp conns
health("overall"): error: state=Stopped, wantRunning=false
control: mapRoutine: paused
wgengine: Reconfig: configuring userspace wireguard config (with 0/0 peers)
control: mapRoutine: awaiting unpause
wgengine: Reconfig: configuring router
router: note: deleting [-j ts-input] in filter/INPUT: %!w(*iptables.Error=&{{0x10a2680 []} {/opt/sbin/iptables [/opt/sbin/iptables -t filter -D INPUT -j ts-input --wait] []  <nil> <nil> 0x15fa180 [] <nil> 0x10c2420 0x10a2680 <nil> <nil> true [0x1148328 0x1148358 0x1148390] [0x1148328 0x1148358 0x1148390] [0x1148360] [0x34f82c] 0x134e540 <nil>} iptables v1.4.21: Couldn't load target `ts-input':No such file or directory

Try `iptables -h' or 'iptables --help' for more information.
 0 <nil>})
router: note: deleting [-j ts-forward] in filter/FORWARD: %!w(*iptables.Error=&{{0x10a2a20 []} {/opt/sbin/iptables [/opt/sbin/iptables -t filter -D FORWARD -j ts-forward --wait] []  <nil> <nil> 0x15fa1c8 [] <nil> 0x10c2510 0x10a2a20 <nil> <nil> true [0x1148660 0x1148718 0x1148758] [0x1148660 0x1148718 0x1148758] [0x1148748] [0x34f82c] 0x134e7c0 <nil>} iptables v1.4.21: Couldn't load target `ts-forward':No such file or directory

Try `iptables -h' or 'iptables --help' for more information.
 0 <nil>})
router: note: deleting [-j ts-postrouting] in nat/POSTROUTING: %!w(*iptables.Error=&{{0x117a110 []} {/opt/sbin/iptables [/opt/sbin/iptables -t nat -D POSTROUTING -j ts-postrouting --wait] []  <nil> <nil> 0x15fa210 [] <nil> 0x10c2570 0x117a110 <nil> <nil> true [0x1148848 0x1148898 0x11488b0] [0x1148848 0x1148898 0x11488b0] [0x11488a0] [0x34f82c] 0x134e980 <nil>} iptables v1.4.21: Couldn't load target `ts-postrouting':No such file or directory

Try `iptables -h' or 'iptables --help' for more information.
 0 <nil>})

 

Может iptables не той версии? 

 iptables v1.4.21

 

Edited by Vladislav Proskuryakov
Link to comment
Share on other sites

35 минут назад, Vladislav Proskuryakov сказал:

Всё равно есть ошибки у меня, даже после вашей процедуры.

Похоже iptables не может удалить правила, которые удалила ось кинетика, как отмечалось выше.

Link to comment
Share on other sites

Добавил в репу пакет (пока только arm варианты). 

6 часов назад, Vladislav Proskuryakov сказал:

лучше выходит это закрутить на малинке ))

Проверил такой конфиг установкой на НАСе. Описал тут - https://forums.zyxmon.org/viewtopic.php?f=5&t=5787

Все работает. Настройка действительно очень простая.

  • Thanks 1
Link to comment
Share on other sites

4 часа назад, zyxmon сказал:

Все работает. Настройка действительно очень простая.

А скорости не выложите -- чтоб сравнить с WG/OVPN ?

Edited by krass
Link to comment
Share on other sites

3 минуты назад, krass сказал:

А скорости не выложите -- чтоб сравнить с WG/OVPN ?

Так это на базе WG. Основной "цимус" проекта - пробитие дырок в NAT и простая для пользователя конфигурация.

  • Thanks 1
Link to comment
Share on other sites

12 часа назад, krass сказал:

А скорости не выложите -- чтоб сравнить с WG/OVPN ?

Теоретически так - используется ядерный модуль tun - тот же, что и в openvpn, а протокол на основе wireguard. Нужно смотреть.

  • Thanks 1
Link to comment
Share on other sites

58 minutes ago, zyxmon said:

Теоретически так - используется ядерный модуль tun

Там, вроде, в случае установки tailscale идёт не ядерный модуль, а выполнение userspace бинарника написанного Go.

Так что замер скорости очень актуален, имхо.

Link to comment
Share on other sites

Замерил скорость с работы. Па самбе кидал файл с домашнего НАСа на комп на работе. Все уперлось в пропускной канал дома, около 100 мбит/с.

При этом tailscale стоит на arm8 НАСе с 4х ядерным процессором 1.4Ghz

  • Thanks 2
Link to comment
Share on other sites

2 часа назад, Vladislav Proskuryakov сказал:

Там, вроде, в случае установки tailscale идёт не ядерный модуль, а выполнение userspace бинарника написанного Go.

Так что замер скорости очень актуален, имхо.

wgengine.NewUserspaceEngine(tun "tailscale0") ...
Starting userspace wireguard engine with tun device "tailscale0"
CreateTUN ok.

Bringing wireguard device up...

и так же

https://pkg.go.dev/tailscale.com/wgengine#section-documentation

https://github.com/tailscale/tailscale/tree/v1.6.0/wgengine

Link to comment
Share on other sites

Ждем инструкцию  -- как поставить на кинетик , чтобы не было проблем с использованием этого vpn .

Edited by krass
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...