В предыдущем разделе вы рассказали о family набор данных через SMB, а именно папку, доступ к которой имеют только компьютеры в вашей домашней сети. Чтобы получить доступ к NAS из любого места, вам сначала нужно заказать маршрутизируемый IPv4-адрес с туннелем WireGuard у Taipan Transit, а затем подключить конец этого туннеля к самому NAS.
Определите, для чего нужен туннель
Домашнее подключение редко позволяет внешнему миру установить связь с NAS. Маршрутизатор преобразует частный адрес NAS, а многие провайдеры идут ещё дальше и размещают целые кварталы за NAT операторского уровня, поэтому общедоступного адреса, на который можно было бы перенаправить порт, просто нет. Почему CGNAT не позволяет вам разместить сервер у себя дома подробно объясняет этот механизм.
Эту проблему позволяет решить маршрутизация IPv4-адреса через туннель. Taipan Transit маршрутизирует заказанный адрес через туннель, который NAS открывает самостоятельно, благодаря чему публичный адрес остается неизменным даже при смене адреса домашнего подключения. Как получить публичный IP-адрес для домашнего сервера рассматривает ту же идею с точки зрения покупателя.
Выберите, что опубликовать
Как только NAS получает публичный адрес, все службы, прослушивающие этот адрес, становятся видимыми для всего Интернета, и первым кандидатом, которого следует исключить, является общий ресурс SMB, упомянутый в предыдущем разделе. CISA, американское агентство по кибербезопасности, рекомендует блокировать все версии SMB на границе сети, то есть TCP-порт 445 вместе с TCP-портом 139 и UDP-портами 137 и 138, и объясняет причины этого в рекомендации по обеспечению безопасности в сегменте малого и среднего бизнеса. Обмен файлами по протоколу SMB осуществляется исключительно в пределах вашей домашней сети.
Через туннель передаётся веб-приложение со собственной системой авторизации и сертификатом HTTPS. В каталоге приложений TrueNAS представлено несколько таких приложений, и в данном разделе используется Nextcloud - сервер для обмена файлами с веб-интерфейсом и мобильными приложениями. Эти же шаги применимы к любому приложению, в форме установки которого есть поля для указания порта и сертификата.
Перед публикацией сервиса: убедитесь, что он запрашивает пароль и работает по протоколу HTTPS. Чтобы это проверить, просмотрите форму установки приложения на наличие полей для ввода административного пароля и идентификатора сертификата; если какое-либо из них отсутствует, не устанавливайте приложение.
Заказать туннель WireGuard
Оформление заказа начинается в панели Taipan. При выборе типа туннеля из списка услуг открывается экран настройки данного продукта, который имеет одинаковую структуру для GRE, IPsec и WireGuard: срок действия, количество IPv4-адресов, тарифный план и (по желанию) купон.
Для NAS, на котором размещено одно приложение, достаточно одного IPv4-адреса, а позже к тому же туннелю можно подключить дополнительные адреса. Для домашнего подключения следует выбирать туннель типа WireGuard, поскольку в этом случае узел подтверждает свою идентичность с помощью пары ключей и продолжает работать даже после смены домашнего адреса, в то время как GRE требует фиксированного адреса конечной точки. Руководство по хостинговым платформам более подробно сравнивает эти три типа туннелей, а также страница «Туннели WireGuard» перечисляет, что входит в каждый тарифный план.
После завершения оформления заказа на панели отобразятся маршрутизированный адрес, конечная точка WireGuard для подключения, открытый ключ Taipan Transit и порт UDP. В примерах данного раздела используются адреса из диапазона 203.0.113.0/24, указанного в документации, поэтому замените их значениями из вашего заказа:
endpoint: 203.0.113.9
routed: 203.0.113.17
Если заказ подтвержден, но туннель на короткое время отображается в состоянии «Ожидание», это нормально. Маршрутизатор, обслуживающий конечную точку, настраивает её в соответствии со своим собственным графиком, поэтому перед тестированием подождите немного.
Ограничить доступ к службам администрирования только домашней сетью
Этот шаг специально выполняется до настройки туннеля. Когда на NAS появляется маршрутизированный адрес, все службы, прослушивающие все адреса, начинают отвечать и на него, а на NAS их две: веб-интерфейс и, после создания общего ресурса, служба SMB.
Разве брандмауэр маршрутизатора уже не обеспечивает защиту NAS?
Он обеспечивает защиту трафика, проходящего через маршрутизатор. Трафик, проходящий через туннель, поступает на отдельный сетевой интерфейс самого NAS, поэтому домашний маршрутизатор его не видит и не может фильтровать. NAS должен самостоятельно определять, на какие адреса отвечают его службы.
Привязать веб-интерфейс к домашнему адресу
Откройте «Система», затем «Общие настройки» и выберите «Настройки» на вкладке графического интерфейса. В поле «IPv4-адрес веб-интерфейса» указано 0.0.0.0, то есть каждый адрес. Вместо этого выберите из списка домашний адрес NAS - тот самый, который вы зарезервировали в маршрутизаторе.
Перед сохранением настроек графического интерфейса убедитесь, что выбранный вами адрес соответствует тому, который в данный момент использует ваш браузер. Для проверки сравните его с адресом в адресной строке браузера и с адресом, отображаемым в консоли NAS, поскольку введение неверного значения приведет к блокировке доступа к веб-интерфейсу до тех пор, пока вы не исправите его через меню консоли.
Поле IPv6 можно оставить без изменений, так как туннель передает только IPv4. Для второго уровня откройте «Система», затем «Расширенные настройки» и найдите карту «Разрешённые IP-адреса» в разделе «Доступ». Она ограничивает доступ к веб-интерфейсу указанными вами адресами или подсетями, поэтому добавление туда вашей домашней подсети заблокирует доступ из всех других источников, даже если настройка привязки когда-нибудь изменится.
Привязать SMB к домашнему адресу
Откройте «Система», затем «Службы» и нажмите на значок карандаша в строке «SMB». Выберите «Расширенные настройки» и прокрутите страницу вниз. Список «Привязанные IP-адреса» пуст, из-за чего SMB прослушивает все адреса. Добавьте домашний адрес NAS и сохраните настройки.
На странице «Службы» также отображаются все остальные службы, которые может запускать NAS. Служба SSH остается остановленной до тех пор, пока вы её не запустите, и ей следует оставаться остановленной, если вы её не используете, поскольку служба входа по публичному адресу привлекает попытки подбора пароля уже в течение нескольких часов.
Настройка WireGuard на TrueNAS
TrueNAS основан на Debian Linux и поставляется с теми же инструментами WireGuard, что и любой другой сервер под управлением Linux: wg и wg-quick. Не нужно устанавливать никаких приложений и включать никаких плагинов. Всё сводится к файлу настроек, паре ключей и одной строке, которая запускает туннель при каждой загрузке системы.
Храните файлы в пуле
TrueNAS представляет собой устройство: его корневой каталог и /usr Файловые системы монтируются в режиме «только для чтения», и промежуточное ПО заново создает файлы в папке /etc из собственной конфигурации. Пул - это место для хранения ваших собственных файлов, поскольку он сохраняется после обновлений и перезагрузок. Создайте набор данных с именем wireguard с использованием предустановки «Generic», затем откройте раздел «System», далее «Shell» и сгенерируйте пару ключей в этом разделе:
sudo -i
cd /mnt/tank/wireguard
chmod 700 .
umask 077
wg genkey | tee taipan.key | wg pubkey > taipan.pub
cat taipan.pub
Последняя команда выводит «публичную» половину - единственную часть, которая должна покинуть NAS:
W8Eea2e7z1MWIrRznz+0i7PpBQ77Xs+hFWYIzDlnrEA=
Эта панель запрашивает этот открытый ключ при регистрации вашей стороны туннеля. Закрытый ключ в taipan.key никогда не вставляется, не отправляется по электронной почте и никуда не передается - точно так же, как частный ключ SSH хранится только на вашем компьютере.
Запишите конфигурацию
Используя адрес маршрутизации и конечную точку, указанные в вашем заказе, а также открытый ключ Taipan Transit, указанный в панели управления, создайте /mnt/tank/wireguard/wg0.conf с nano wg0.conf и вставьте следующий текст:
[Interface]
PrivateKey = <contents of taipan.key>
Address = 100.64.0.2/32
Table = off
PostUp = ip address add 203.0.113.17/32 dev lo
PostUp = ip rule add from 203.0.113.17/32 table 20 priority 100
PostUp = ip route add default dev %i table 20
PreDown = ip rule del from 203.0.113.17/32 table 20 priority 100
PreDown = ip address del 203.0.113.17/32 dev lo
[Peer]
PublicKey = <Taipan's public key, from the panel>
Endpoint = 203.0.113.9:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Table = off остановки wg-quick от замены собственного маршрута по умолчанию NAS, при этом все остальные запросы по-прежнему должны проходить через домашний маршрутизатор. Второй PostUp line создает отдельную таблицу маршрутизации, которая используется исключительно для трафика, отправляемого с маршрутизируемого адреса, поэтому ответ от 203.0.113.17 проходит обратно через туннель, при этом обычный трафик NAS остается неизменным.
Почему маршрутизируемый адрес попадает на интерфейс loopback?
Потому что NAS должен рассматривать этот адрес как свой собственный. Туннельный интерфейс лишь передаёт пакеты, а адрес на lo заставляет NAS принимать пакеты от него и отвечать от его имени, так же, как это делала бы служба, запущенная непосредственно на шлюзе. Это Address использование строки 100.64.0.2 из диапазона 100.64.0.0/10 - это общий диапазон адресов, который никогда не появляется в публичном Интернете, поэтому сам туннельный интерфейс не занимает ни одного публичного адреса.
Этот wg-quick команда считывает этот файл, поэтому вы можете запустить туннель вручную, чтобы проверить его работу:
wg-quick up /mnt/tank/wireguard/wg0.conf
wg show
В списке активных туннелей указаны узел-партнер, конечная точка и данные о последнем установлении соединения, полученные несколько секунд назад. Отсутствие данных об установлении соединения для какого-либо узла-партнера означает, что пакеты не доходят до Taipan Transit, поэтому прежде чем искать причину в других местах, сравните конечную точку, открытые ключи обеих сторон и порт UDP. Как только появятся данные об установлении соединения, ip route get 1.1.1.1 from 203.0.113.17 следует ответить: dev wg0, что подтверждает, что ответы выходят через туннель.
Запускать «Туннель» при каждой загрузке системы
Туннель, запущенный вручную, исчезает при следующем перезапуске, а в TrueNAS предусмотрено место для команд, которые должны выполняться при запуске: «Скрипты запуска/завершения работы» (Init/Shutdown Scripts). Откройте раздел «Система», затем «Расширенные настройки» и выберите «Добавить» на вкладке «Скрипты запуска/завершения работы». TrueNAS сначала покажет предупреждение о том, что изменение расширенных настроек может быть опасным, что вполне обоснованно, поскольку неправильно введённая здесь команда будет запускаться с правами root при каждой загрузке.
Установите тип «Команда», вставьте wg-quick up /mnt/tank/wireguard/wg0.conf, а также установите параметр «When to Post Init», чтобы команда запускалась после того, как пул станет доступным. Время ожидания по умолчанию - 10 секунд - вполне достаточно.
Почему используется скрипт запуска, а не строка в системном файле сети?
Потому что TrueNAS самостоятельно управляет своими системными файлами и перезаписывает их. Список скриптов является частью сохраненной конфигурации TrueNAS, поэтому он восстанавливается после обновления и переносится при экспорте конфигурации.
Опубликовать одно приложение с HTTPS
Туннель настроен, и NAS отвечает на запросы по своему публичному адресу. Веб-приложению требуется сертификат, чтобы браузеры ему доверяли, а для сертификата нужно имя, поэтому первым делом необходимо зарегистрировать доменное имя, указывающее на маршрутизируемый адрес.
Получить сертификат
Создайте у своего провайдера домена запись DNS, которая будет указывать на имя, например: nas.example.com по указанному адресу. Затем запросите сертификат Let's Encrypt в TrueNAS, выполнив три шага в разделе «Учетные данные», а затем «Сертификаты»:
- Добавьте ACME-аутентификатор DNS для вашего провайдера DNS. В документации перечислены Cloudflare, DigitalOcean, Route53 и OVHcloud; учетные данные для API провайдера следует ввести в этой форме.
- Добавьте запрос на подпись сертификата, указав в поле «Общее имя» (Common Name) название вашего домена.
- Воспользуйтесь значком рядом с этим запросом, чтобы создать сертификат ACME, и выберите средство аутентификации для домена.
Let's Encrypt проверяет право владения, запрашивая создание временной записи DNS, поэтому для выдачи сертификата веб-интерфейс не обязательно должен быть доступен. Документация TrueNAS по сертификатам Let's Encrypt пошагово проходит каждую форму.
Установите приложение по указанному адресу
Откройте раздел «Приложения», затем «Обзор» и найдите Nextcloud. При первом использовании раздела «Приложения» TrueNAS предложит выбрать пул для них и отобразит предупреждение о том, что сторонние приложения могут представлять риски, такие как потеря данных или сбои в работе системы. Ознакомьтесь с ним и дайте согласие. Затем выберите «Установить» и заполните раздел «Настройка Nextcloud»: укажите имя администратора, введите длинный пароль администратора, а в поле «Хост» укажите ваше DNS-имя и порт, например nas.example.com:30027. Приложение добавляет этот домен в свой список доверенных доменов.
В разделе «Настройка сети» оставьте параметр «Режим привязки порта» в значении «Опубликовать порт на хосте для внешнего доступа», сохраните порт по умолчанию 30027 и выберите новый сертификат в поле «Идентификатор сертификата». После выбора сертификата приложение будет обслуживать HTTPS-соединения на этом порту, поэтому посетители будут использовать адрес вида https://nas.example.com:30027. Параметр «Host IPs» определяет, на адреса каких хостов будет настроен порт, а пустой список означает все адреса - как домашние, так и маршрутизируемые.
Каждое приложение, которое вы установите позже, будет прослушивать все адреса, если вы не ограничите его доступ. Для приложений, которые должны оставаться конфиденциальными, добавьте домашний адрес NAS в список «IP-адреса хостов» - после этого приложение перестанет отвечать на запросы по маршрутизируемому адресу. Документация по приложениям TrueNAS описывает эту область.
Проверьте подключение извне
Проверка, проводимая из дома, мало что доказывает, поскольку большинство запросов обрабатывает ваш собственный роутер локально. Переключите телефон с Wi-Fi на мобильный интернет, чтобы подключиться к другой сети, и выполните три проверки.
- Открыть
https://nas.example.com:30027. В браузере должен отобразиться значок замка и страница входа в Nextcloud. Если появится предупреждение о сертификате, проверьте ещё раз поле «Идентификатор сертификата» и запись DNS. - Открыть
https://203.0.113.17, простой перенаправленный адрес на стандартном порту HTTPS. Ответ не должен поступать, поскольку веб-интерфейс прослушивает только домашний адрес. - Попробуйте
smb://203.0.113.17/familyиз приложения «Файлы» на телефоне. Соединение должно прерваться - именно этого вы и хотите добиться.
Если первая проверка завершилась неудачно, а установка соединения через туннель только что завершилась, выполните ip rule на NAS и убедитесь, что правило для маршрутизируемого адреса присутствует. Отсутствие правила означает, что PostUp не запустилась, а при запуске tunnel вручную появляется сообщение об ошибке.
В заключение
- IPv4-трафик, проходящий через туннель WireGuard, обеспечивает NAS собственный публичный адрес.
- Веб-интерфейс и SMB привязываются к домашнему адресу до того, как туннель начнёт работать.
- Настройки и ключи хранятся в пуле, а туннель запускается скриптом Post Init.
- В Интернет публикуется только одно приложение с данными для входа и сертификатом.
В следующем разделе вы настроите создание моментальных снимков и резервных копий для пула, а также настроите оповещения, чтобы NAS сообщал вам о возникших сбоях.