🔖 Приватная сеть в ZeroTier за пару минутРебята, решил я недавно поиграться с
Dokploy в рамках экспериментов
n8n и AI-ассистента. Ну и пока настраивал, заодно решил показать вам
ZeroTier.
ZeroTier – это сервис, который позволяет
объединить устройства через интернет так, будто они находятся
в одной локальной сети.
На самом деле очень крутая штука, тем более что в рамках
free-тарифа можно добавить
до 10 устройств. Таким образом у нас будет крутая
overlay-сеть и мы можем изи-пизи
объединить все наши VPS, ноутбуки и телефоны. И самое главное, что будет
не важно, что они сидят
за NAT. А вся
настройка отнимет у вас
минут 10:
1. Регаемся на сайте
https://www.zerotier.com и прыгаем в личный кабинет.
2. Там создаем новую сеть. Cохраняем себе Network ID. Он понадобиться чтобы к сети присоединиться. У меня это 3b19b3a716137783.
3. Идем на страницу загрузки клиентов
https://www.zerotier.com/download. Копируем команду установки и ставим на VPS сервер:
curl -s
https://install.zerotier.com | sudo bash
4. Теперь подключимся сразу к новой сети pets. После выполнения получите 200 join OK.
sudo zerotier-cli join 3b19b3a716137783
5. Переходим в админку в нашу сеть pets и авторизуем клиента.
6. Теперь я добавлю локальную машинку. Качаю клиента под свою ОС чтобы оказаться в приватной сети с VPS. Там ввожу
Network ID для подключения и делаю апрув в админке.
7. Zerotire нам
выдаст рандомный ойпешник в приватной сети. Давайте слегка это исправим. Нырнем в админке в устройство 8b26a132b7 (это VPS) и пропишем в
Managed IPs красивый ойпешник
10.75.142.1.
На этом базовая настройка завершена. Устройства будут видеть друг друга в рамках приватной сети
10.75.142.0/24.
Но для большей
безопасности и удобства (иначе зачем это всё?)
надо настроить firewall. У меня стоит
Dokploy, поэтому я хочу сделать открытыми
порты 80 и 443. А всё остальное будет открыто только в сети ZeroTier. (
ens3 - это внешний интерфейс на VPS,
zt+ - это интерфейсы ZeroTier)
8. Подключимся к VPS
10.75.142.1 –
ЭТО ВАЖНО и забекапим текущие правила на всякий.
iptables-save > /root/iptables.backup.$(date +%F_%H%M).rules
9. Закрываемся от мира. Обратите внимание – после применения этих правил доступа к ssh по внешнему интерфейсу не будет. Но так и задумано!
# Сначала базовые allow (в начало)
iptables -I INPUT 1 -i zt+ -j ACCEPT
iptables -I INPUT 2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT 3 -i lo -j ACCEPT
# Публично только 80/443 через ens3
iptables -I INPUT 4 -i ens3 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT 5 -i ens3 -p tcp --dport 443 -j ACCEPT
# Всё остальное входящее — DROP
iptables -P INPUT DROP
iptables -F DOCKER-USER
# Разрешаем ответы
iptables -A DOCKER-USER -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# ZeroTier полный доступ
iptables -A DOCKER-USER -i zt+ -j ACCEPT
iptables -A DOCKER-USER -o zt+ -j ACCEPT
# Контейнерам можно инициировать соединения наружу
iptables -A DOCKER-USER -i docker0 -j ACCEPT
# Снаружи (ens3) только 80/443
iptables -A DOCKER-USER -i ens3 -p tcp --dport 80 -j ACCEPT
iptables -A DOCKER-USER -i ens3 -p tcp --dport 443 -j ACCEPT
# Остальное снаружи в docker — DROP
iptables -A DOCKER-USER -i ens3 -j DROP
iptables -A DOCKER-USER -j RETURN
Установим iptables-persistent и сохраним правила, чтобы не отрыгнуло после ребута
apt-get update && apt-get install -y iptables-persistent && netfilter-persistent save
В итоге мы
получаем приватную сеть с нашими девайсами, которые видят друг друга
напрямую. А для внешнего интерфейса
открыт только 80 и 443 – в моем случае это
Traefik в docker. И теперь на VPS
если я сделаю гадость вот так:
docker run -d --name my-redis -p 6379:6379 redis:latest
То порт 6379 будет доступен только в приватной сети:
$ nmap 138.124.75.165 -p6379 -PN
PORT STATE SERVICE
6379/tcp filtered redis
$ nmap 10.75.142.1 -p6379
PORT STATE SERVICE
6379/tcp open redis
ZeroTier подходит и для более сложных кейсов. Но это уже другая история...
А статью со скриншотами можно почитать
тут.
---
Telegram |
Github |
YouTube |
Twitter