🔖 Приватная сеть в 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
Ребята, решил я недавно поиграться с 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