Вопрос или проблема
У меня есть две отдельные сети (которые я хочу сохранить раздельными), подключенные проводным способом к 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
-
Установите Tailscale (если это еще не сделано):
curl -fsSL https://tailscale.com/install.sh | sh sudo tailscale up
-
Настройка 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, который не маршрутизируем. Это обеспечит более упрощенное управление адресацией.
-
Установите dnsmasq:
sudo apt-get install dnsmasq
-
Настройте 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.
-
Перезапустите 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. Это позволит вам изолировать вашу исследовательскую лабораторию и удобно управлять датчиками и контроллерами.