Tailscale подсеть на RPi с двумя сетями

Вопрос или проблема

У меня есть две отдельные сети (которые я хочу сохранить раздельными), подключенные проводным способом к Raspberry Pi 4 с установленной Raspbian.

Сеть A (на eth0) является управляемой, корпоративной сетью в моем университете с ИТ-командой, которая, как правило, очень медленно реагирует. Сеть A предоставляет интернет-соединение для RPi.

Сеть B (на eth1) — это совершенно отдельная сеть, подключенная к нашему управляемому коммутатору. Она состоит из различных датчиков и контроллеров для нашей исследовательской лаборатории. Поскольку нет маршрутизатора (или DHCP-сервера), вся эта сеть находится в подсети 169.254.0.0/16.

Идеально было бы «объединить» эту сеть с моим Tailnet, чтобы я просто мог войти в Tailscale с одного из лабораторных компьютеров по Wi-Fi (фактически в сети A) и получить доступ ко всем устройствам в подсети сети B 169.254.0.0/16.

Конечная цель этого состоит в том, чтобы иметь сеть, изолированную от сети A, но при этом обеспечивать легкий доступ к сети B. Нам просто нужен маршрутизатор, чтобы правильно маршрутизировать некоторые VLAN 802.1q?

Я попробовал множество различных руководств от Tailscale и других источников в интернете и не могу понять, как это сделать. Думаю, одна из проблем заключается в том, что Tailscale и датчики находятся на разных сетевых интерфейсах. Я пытался создать мостовой интерфейс (через nmtui), но не совсем понимаю, как это сделать без простого подключения двух сетей. Я пытался настроить некоторые IP-маршруты на RPi, но не понимаю, как это сделать.

Я пытался создать мостовой интерфейс

Вам не нужен мостовой интерфейс; более того, Tailscale — это L3 VPN (т.е. он передает IP-пакеты, а не Ethernet-интерфейсы), поэтому его нельзя объединить с чем-либо другим — он может быть только маршрутизирован на уровне IP.

Поскольку нет маршрутизатора (или DHCP-сервера), вся эта сеть находится в подсети 169.254.0.0/16.

Адресный диапазон 169.254.0.0/16, называемый «link-local», предназначен для того, чтобы не маршрутизироваться. Хотя Linux может маршрутизировать его (обрабатывая его как любой другой Unicast-адрес), другие операционные системы могут иметь особое обращение с ним.

Поскольку теперь у вас есть маршрутизатор, подключенный к сети B — RPi будет вашим маршрутизатором — я настоятельно рекомендую установить DHCP-сервер, чтобы сеть могла использовать более стандартный диапазон адресов. (Начните с dnsmasq, но убедитесь, что у него установлено interfaces = eth1, чтобы он случайно не рекламировал DHCP-службу в сети A.)

Я пытался настроить некоторые IP-маршруты на RPi, но не совсем понимаю, как это сделать.

RPi не нуждается в дополнительных маршрутах для себя. Он уже напрямую подключен к обеим сетям, поэтому у него автоматически есть «локальные» маршруты как для Tailnet, так и для сети B.

Вместо этого тем сетям нужны маршруты друг к другу «через» RPi.

  • С стороны Tailscale вам нужно сделать так, чтобы RPi рекламировал себя как маршрутизатор подсетей для диапазона адресов сети B; Tailscale развернет этот маршрут на всех ваших других VPN-устройствах, используя свои собственные механизмы.

  • С одной стороны сети B вашим устройствам тоже нужен маршрут через RPi; либо для IP-диапазона tailnet, либо маршрут по умолчанию для всего. Обычно DHCP-сервер сети разворачивает такие маршруты на устройства. Возможно, будет проще (и гарантировано сработает), если DHCP-сервер объявит, что RPi является «шлюзом по умолчанию», а затем использовать брандмауэр RPi, чтобы предотвратить доступ сети B к сети A.

(DHCP также может разворачивать более специфические маршруты через опцию 121, но устройства не гарантируют их распознавание.)

Ответ или решение

Для настройки доступа к сети B через Tailscale на Raspberry Pi 4 (RPi) с двумя сетевыми интерфейсами (eth0 и eth1) необходимо выполнить несколько шагов. Мы будем рассматривать процесс, подразумевающий маршрутизацию, а не мостовую связь.

1. Подготовка оборудования

Вы уже подключили Raspberry Pi к двум сетям:

  • Сеть A (через eth0) — управляемая, обеспечивающая интернет.
  • Сеть B (через eth1) — отдельная сеть с адресным пространством 169.254.0.0/16.

Убедитесь, что оба интерфейса RPi правильно настроены и активны.

2. Установка и настройка Tailscale

  1. Установите Tailscale (если это еще не сделано):

    curl -fsSL https://tailscale.com/install.sh | sh
    sudo tailscale up
  2. Настройка RPi как маршрутизатора подсети:
    Вам необходимо активировать маршрутизацию подсети для сети B. Вы можете сделать это с помощью командной строки на RPi:

    sudo tailscale up --advertise-routes=169.254.0.0/16

    После выполнения этой команды Tailscale будет отображать адреса сети B всем подключенным клиентам.

3. Настройка DHCP-сервера для сети B

Рекомендуется установить DHCP-сервер (например, dnsmasq), чтобы избежать использования адресов из диапазона 169.254.0.0/16, который не маршрутизируем. Это обеспечит более упрощенное управление адресацией.

  1. Установите dnsmasq:

    sudo apt-get install dnsmasq
  2. Настройте dnsmasq так, чтобы он работал только с интерфейсом eth1. Откройте конфигурационный файл:

    sudo nano /etc/dnsmasq.conf

    Добавьте следующие строки:

    interface=eth1
    bind-interfaces
    dhcp-range=192.168.1.100,192.168.1.150,255.255.255.0,24h

    Здесь вы можете задать диапазон IP-адресов по вашему усмотрению. Убедитесь, что этот диапазон не пересекается с 169.254.0.0/16.

  3. Перезапустите dnsmasq:

    sudo systemctl restart dnsmasq

4. Настройка маршрутов

Как упоминалось ранее, устройства в сети B должны иметь маршрут к сети Tailscale. Это можно сделать через настройки DHCP:

  • Убедитесь, что DHCP-сервер (dnsmasq) объявляет Raspberry Pi как "шлюз по умолчанию".

Кроме того, если вы хотите более гранулированное контролирование, можно также использовать опцию dhcp-option для добавления специфических маршрутов. Например:

dhcp-option=121,169.254.0.0/16,IP_адрес_RPi

Где IP_адрес_RPi — это IP-адрес Raspberry Pi в сети B.

5. Настройка файрвола

Чтобы защитить сеть B от нежелательного доступа к сети A, настройте файрвол на RPi:

sudo iptables -A FORWARD -i eth0 -o eth1 -j DROP
sudo iptables -A FORWARD -i eth1 -o eth0 -j DROP

Эти команды блокируют весь трафик между сетями A и B.

6. Проверка и тестирование

После завершения всех настроек, проверьте доступность устройств в сети B через другие клиенты Tailscale. Попробуйте выполнить ping или использовать другие инструменты для проверки соединения.

Заключение

Теперь у вас есть полноценная маршрутизация между Tailscale и сетью B без излишнего взаимодействия с сетью A. Это позволит вам изолировать вашу исследовательскую лабораторию и удобно управлять датчиками и контроллерами.

Оцените материал
Добавить комментарий

Капча загружается...