# Tailscale при работе в macOS


Для доступа к своим серверам и компьютерам использую [Tailscale](https://tailscale.com/).
Потому что удобно, безопасно и есть возможность получать доступ к серверам за
NAT без особых проблем.

На домашнем компьютере с macOS проводил установку Tailscale через homebrew cask
и не встречал особых проблем. Когда же попытался использовать Tailscale на
ноутбуке, на котором постоянно работает OpenVPN, столкнулся с тем, что при
подключении теряю доступ к своей приватной сети в Tailscale. Долго пытался
разобраться в чем причина, пока не натолкнулся на страницу документации:
[Three ways to run Tailscale on macOS](https://tailscale.com/kb/1065/macos-variants/),
где все расписано.

Проблема заключалась в том, что Tailscale, установленный из AppStore использует
сетевое расширение. И в случае с macOS нет возможности использовать несколько
приложений с сетевыми расширениями одновременно.

Решил попробовать устанавливать Tailscale через cli. Есть два способа, хотя в
документации описывается только один.

## Homebrew

Есть возможность установить cli-версию Tailscale через homebrew.

Для установки cask версии используется команда:

```sh
brew install homebrew/cask/tailscale
```

После чего достаточно запустить обычное приложение Tailscale, и управлять им из
статусбара. А для установки консольной версии приложения:

```sh
brew install tailscale
```

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

```sh
brew services restart tailscale
```

Но при попытке ее использования понятно, что ничего не происходит. Точнее файлы
сервиса создаются, но сам сервис не стартует. Прав не достает. И в результате
необходимо использовать команду:

```sh
sudo brew services restart tailscale
```

В этом случае сервис будет запускаться от имени системы, и будет работать. Но,
опять есть но. Создаются сервисные файлы от имени суперпользователя, которые не
могут быть перезаписаны при апгрейде версии Tailscale. И нужно вручную  их все
удалять перед проведением обновления версии. Немного муторно, но главное, что
работает.

## Компиляция

Да, второй способ установки консольной версии Tailscale описан в документации
на странице [Tailscaled on macOS](https://github.com/tailscale/tailscale/wiki/Tailscaled-on-macOS).

На компьютере необходимо иметь установленный Golang. И установка проводиться
одной командой:

```sh
go install tailscale.com/cmd/tailscale{,d}@main
```

для установки определенной версии:

```sh
go install tailscale.com/cmd/tailscale{,d}@v1.32.2
```

Для установки сервисных файлов и запуска сервис используется команда:

```sh
sudo $HOME/go/bin/tailscaled install-system-daemon
```

После чего уже от имени текущего пользователя можно запускать tailscale для
проведения аутентификации и доступа к своей приватной сети.

## Итог

Обычно я устанавливаю все программы на macOS с помощью Homebrew. Но в данном
случае из-за сложности с правами доступа к файлам пришлось написать отдельный
скрипт для проведения обновления Tailscale через компиляцию. По времени это
занимает несколько секунд и нисколько не обременяет.

Да, лишился привычного GUI, но по сути в нем мне нужен был только список моих
компьютеров. Что доступно и из консоли. В результате ничего не потерял.

При этом из-за того, что консольная версия работает с использованием utun
сетевого интерфейса, это позволяет одновременно работать с несколькими типами
VPN.

Таким образом проблема с доступом была решена.

