Недавно у меня возникли проблемы со скоростью по умолчанию IPSec site-to-site VPN между двумя USG, и я решил сменить VPN. В интернете можно найти инструкции по установке wireguard на USG, но учитывая гибкость tailscale, я решил попробовать его. Есть довольно хорошие инструкции по установке tailscale на EdgeRouter — от пользователя lg, которые в теории должны работать и для USG. Однако есть небольшая проблема с прямым следованием этим инструкциям, так как USG использует старый способ запуска служб и не поддерживает systemctl. Я потратил несколько часов, пытаясь запустить tailscaled как сервис, но в итоге сдался и вместо того, чтобы разбираться дальше, решил попробовать другой подход. Я изменил скрипт от lg (ссылка выше), чтобы запускать tailscaled как фоновой процесс, который открывает tun и затем инициирует соединение tailscale. Вот что я сделал:
Откройте веб-браузер и перейдите на , создайте нового пользователя, если еще не сделали этого. Далее ssh на ваш USG и выполните sudo su.
Установите MIPS-версию tailscale, следуя инструкциям lg из ссылки выше (пункт 1 из его списка).
Создайте и отредактируйте скрипт tailscale.sh, выполнив vi tailscale.sh в домашнем каталоге (можно создать где угодно, главное знать где), и вставьте туда следующий код:
#!/bin/sh
ln -s /config/tailscale /usr/bin/tailscale
ln -s /config/tailscaled /usr/sbin/tailscaled
mkdir -p /var/lib/tailscale/
touch /config/auth/tailscaled.state
chmod 0400 /config/auth/tailscaled.state
ln -s /config/auth/tailscaled.state /var/lib/tailscale/tailscaled.state
sudo tailscaled > /dev/null 2>&1 &
disown
sudo tailscale up --advertise-routes=192.168.X.0/24 --accept-routes
Где 192.168.X.0/24 — это внутренний LAN-сегмент за вашим USG, к которому вы хотите получить доступ с других хостов в tailscale-сети (скажем, вы хотите видеть все свои компьютеры, NAS, хабы и т. п. из локальных сетей на телефоне, подключенном к той же tailscale-сети). Можно пропустить опцию “--advertise-routes=192.168.X.0/24”, если вы не хотите открывать внутренние сети, или добавить несколько подсетей/VLAN, разделяя их запятыми (подробнее: .
Далее:
5. Выполните chmod +x tailscale.sh, чтобы сделать скрипт исполняемым (при условии, что вы находитесь в каталоге со скриптом).
6. Выполните mkdir /config/scripts/post-config.d, чтобы создать каталог post-config.d (если он еще не существует), и скопируйте туда скрипт tailscale.sh командой cp tailscale.sh /config/scripts/post-config.d/. Это нужно, потому что tailscaled мы не запускаем как сервис, а как фоновый процесс, который надо запускать после каждой перезагрузки или провиженинга (и который должен сохраняться даже после обновлений системы).
7. Запустите скрипт командой ./tailscale.sh. Если вы подключаете USG к tailscale впервые, будет нужно пройти аутентификацию — скопируйте ссылку, которая появится, вставьте ее в браузер и войдите с учетными данными tailscale (из пункта 1). Теперь можно проверить, что все запущено, выполнив tailscale status. Если все нормально, вы увидите все хосты в вашей tailscale-сети, их IP-адреса и открытые ими сети.
8. Вернитесь в браузер, откройте tailscale.com (если закрыли) и админ-консоль. Если все в порядке, вы должны увидеть ваш USG как новый хост. Нажмите три точки справа, отключите истечение срока ключа и примите маршруты подсетей, которые вы открываете, нажав “review subnet routes” и включив нужные подсети.
Это все, что нужно сделать, чтобы один USG установил постоянный туннель к вашей tailscale-сети, который будет работать после перезагрузок, провиженинга и обновлений.
Если у вас два объекта, управляемых USG, можно построить tailscale/wireguard-туннель между ними, установив tailscale на обоих USG, следуя описанным выше инструкциям для каждого. Единственная разница — внутренние сети, которые каждый из USG открывает. Например, USG1 открывает 192.168.X1.0/24, а USG2 — 192.168.X2.0/24; тогда нужно в скрипте соответственно изменить последнюю строку. После этого нужно добавить статический маршрут в каждом USG, чтобы остальные хосты в локальной сети знали, как найти устройства в другой сети.
Для этого зайдите в соответствующий Unifi Controller через веб-интерфейс, выберите сайт, где располагается один из USG, и перейдите в раздел routing & firewall. Там добавьте новый статический маршрут: к примеру, находясь на сайте USG1, создайте маршрут для сети 192.168.X2.0/24, указывая в качестве следующего перехода IP-адрес tailscale USG1 (который можно посмотреть в админ-консоли tailscale). Аналогично для USG2 — добавьте маршрут для сети 192.168.X1.0/24 с next hop, равным IP tailscale USG2. После провиженинга USG обе локальные сети смогут видеть друг друга, как если бы вы настроили автоматический IPSec site-to-site VPN, но с преимуществом более быстрой и безопасной связи, и при этом оба USG могут управляться разными Unifi контроллерами.
Откройте веб-браузер и перейдите на , создайте нового пользователя, если еще не сделали этого. Далее ssh на ваш USG и выполните sudo su.
Установите MIPS-версию tailscale, следуя инструкциям lg из ссылки выше (пункт 1 из его списка).
Создайте и отредактируйте скрипт tailscale.sh, выполнив vi tailscale.sh в домашнем каталоге (можно создать где угодно, главное знать где), и вставьте туда следующий код:
#!/bin/sh
ln -s /config/tailscale /usr/bin/tailscale
ln -s /config/tailscaled /usr/sbin/tailscaled
mkdir -p /var/lib/tailscale/
touch /config/auth/tailscaled.state
chmod 0400 /config/auth/tailscaled.state
ln -s /config/auth/tailscaled.state /var/lib/tailscale/tailscaled.state
sudo tailscaled > /dev/null 2>&1 &
disown
sudo tailscale up --advertise-routes=192.168.X.0/24 --accept-routes
Где 192.168.X.0/24 — это внутренний LAN-сегмент за вашим USG, к которому вы хотите получить доступ с других хостов в tailscale-сети (скажем, вы хотите видеть все свои компьютеры, NAS, хабы и т. п. из локальных сетей на телефоне, подключенном к той же tailscale-сети). Можно пропустить опцию “--advertise-routes=192.168.X.0/24”, если вы не хотите открывать внутренние сети, или добавить несколько подсетей/VLAN, разделяя их запятыми (подробнее: .
Далее:
5. Выполните chmod +x tailscale.sh, чтобы сделать скрипт исполняемым (при условии, что вы находитесь в каталоге со скриптом).
6. Выполните mkdir /config/scripts/post-config.d, чтобы создать каталог post-config.d (если он еще не существует), и скопируйте туда скрипт tailscale.sh командой cp tailscale.sh /config/scripts/post-config.d/. Это нужно, потому что tailscaled мы не запускаем как сервис, а как фоновый процесс, который надо запускать после каждой перезагрузки или провиженинга (и который должен сохраняться даже после обновлений системы).
7. Запустите скрипт командой ./tailscale.sh. Если вы подключаете USG к tailscale впервые, будет нужно пройти аутентификацию — скопируйте ссылку, которая появится, вставьте ее в браузер и войдите с учетными данными tailscale (из пункта 1). Теперь можно проверить, что все запущено, выполнив tailscale status. Если все нормально, вы увидите все хосты в вашей tailscale-сети, их IP-адреса и открытые ими сети.
8. Вернитесь в браузер, откройте tailscale.com (если закрыли) и админ-консоль. Если все в порядке, вы должны увидеть ваш USG как новый хост. Нажмите три точки справа, отключите истечение срока ключа и примите маршруты подсетей, которые вы открываете, нажав “review subnet routes” и включив нужные подсети.
Это все, что нужно сделать, чтобы один USG установил постоянный туннель к вашей tailscale-сети, который будет работать после перезагрузок, провиженинга и обновлений.
Если у вас два объекта, управляемых USG, можно построить tailscale/wireguard-туннель между ними, установив tailscale на обоих USG, следуя описанным выше инструкциям для каждого. Единственная разница — внутренние сети, которые каждый из USG открывает. Например, USG1 открывает 192.168.X1.0/24, а USG2 — 192.168.X2.0/24; тогда нужно в скрипте соответственно изменить последнюю строку. После этого нужно добавить статический маршрут в каждом USG, чтобы остальные хосты в локальной сети знали, как найти устройства в другой сети.
Для этого зайдите в соответствующий Unifi Controller через веб-интерфейс, выберите сайт, где располагается один из USG, и перейдите в раздел routing & firewall. Там добавьте новый статический маршрут: к примеру, находясь на сайте USG1, создайте маршрут для сети 192.168.X2.0/24, указывая в качестве следующего перехода IP-адрес tailscale USG1 (который можно посмотреть в админ-консоли tailscale). Аналогично для USG2 — добавьте маршрут для сети 192.168.X1.0/24 с next hop, равным IP tailscale USG2. После провиженинга USG обе локальные сети смогут видеть друг друга, как если бы вы настроили автоматический IPSec site-to-site VPN, но с преимуществом более быстрой и безопасной связи, и при этом оба USG могут управляться разными Unifi контроллерами.
