Как реших проблема с достъпа до локалните си услуги чрез Cloudflare Tunnel и NGINX Proxy Manager

Поради липса на статично IP от доставчика ми, а и с цел по-добра сигурност и гъвкавост, трябваше да намеря надеждно решение за достъп до локалните си услуги (като WordPress сайтове, панели за управление, и т.н.), хостнати зад MikroTik рутер и NAT.
След редица експерименти, най-доброто и стабилно решение, което реализирах, беше чрез Cloudflare Tunnel в комбинация с NGINX Proxy Manager (NPM).
В тази статия ще ви покажа как стъпка по стъпка изградих работеща конфигурация с wildcard под-домейни, сигурност и централизирано управление.
Какво използвам:
- Cloudflare акаунт и домейн (пример:
fedya.
com) - Docker + docker-compose
- Cloudflared Tunnel
- NGINX Proxy Manager (NPM)
- Локална мрежа с MikroTik (но важи и за други рутери)
1. Настройване на Cloudflare
1.1. Създайте акаунт в Cloudflare и добавете домейна си (пример:
).fedya.
com
1.2. Настройте DNS сървърите според инструкциите на Cloudflare.
1.3. Влезте в секцията DNS и добавете следния запис:
- Тип:
CNAME
- Име:
*.
fedya.
com - Стойност:
your-tunnel-id.cfargotunnel.com
(ще го получите по-късно) - Proxy status: Proxied (оранжево облаче)
💡 Важно: Записът *.
трябва да сочи към тунела, за да функционират всички под-домейни през Cloudflare Tunnel. Ако използвате само fedya.
comA
запис, няма да работи с тунел.
2. Инсталиране на cloudflared и създаване на Tunnel
docker run -v ~/.cloudflared:/etc/cloudflared cloudflare/cloudflared:latest tunnel login
Това ще отвори браузър и ще свърже акаунта ви с Cloudflare.
След това създайте тунел:
docker run -v ~/.cloudflared:/etc/cloudflared cloudflare/cloudflared:latest tunnel create fedya-tunnel
Това ще създаде credentials-file
и ще ви даде Tunnel ID
.
Създайте конфигурационен файл config.yml
в ~/.cloudflared/
:
tunnel: fedya-tunnel-id
credentials-file: /etc/cloudflared/fedya-tunnel-id.json
ingress:
- hostname: "*.fedya.com"
service: http://127.0.0.1:80
- service: http_status:404
originRequest:
noTLSVerify: true
След това стартирайте тунела като Docker контейнер:
# docker-compose.yml за cloudflared
dversion: '3.8'
services:
cloudflared:
image: cloudflare/cloudflared:latest
restart: unless-stopped
command: tunnel run
volumes:
- ~/.cloudflared:/etc/cloudflared
Стартирайте с:
docker-compose up -d
3. Инсталиране на NGINX Proxy Manager
Създайте docker-compose.yml
:
version: '3.8'
services:
npm:
image: jc21/nginx-proxy-manager:latest
restart: unless-stopped
ports:
- "80:80"
- "81:81" # UI на NPM
- "443:443"
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
Стартирайте:
docker-compose up -d
Първи вход: http://lp...:81
([email protected] / changeme)
4. Конфигурация в NGINX Proxy Manager
Вече имаме публичен достъп чрез Cloudflare Tunnel до порт 80 на сървъра. Сега добавяме поддомейни:
Пример: WordPress сайт на site1.fedya.com
- В NPM → Add Proxy Host
- Domain:
site1.fedya.com
- Scheme:
http
- Forward Hostname / IP:
10.110.110.20
- Port:
80
- SSL tab → Request new SSL certificate
- Force SSL & HTTP/2 → ON
5. Ограничаване на административен достъп
Не е добра практика admin.fedya.com
да е публичен. Ето три начина да го защитите:
A) Локален достъп само по IP (NPM Access List)
- NPM → Access Lists → Add new list (пример:
LocalOnly
) - Rules:
- Allow →
10.110.110.0/24
- Deny →
0.0.0.0/0
- Allow →
- Приложете го към
admin.fedya.com
B) Без публичен DNS (не го включвайте в ingress:
)
C) Ползване на VPN (WireGuard / ZeroTier)
6. Допълнителни бележки
- Cloudflare Tunnel не изисква отворени портове към рутера (дори MikroTik NAT не пречи).
- С един wildcard
*.fedya.com
можете да проксирате безкрайно много услуги. - Можете да добавяте Basic Auth (в таб „Access“) към всеки поддомейн.
Заключение
С комбинация от Cloudflare Tunnel и NGINX Proxy Manager успях да изградя стабилна, сигурна и удобна система за достъп до всичките си локални услуги. Това решение е особено полезно, когато нямате публично IP, но искате публично достъпни услуги – с контрол и сигурност.
Ако и вие сте в подобна ситуация, силно препоръчвам този подход.
Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу:
Donate ☕️ Дарете с PayPalDonate 💳 Дарете с Revolut