#docker #docker-compose #traefik
#docker #docker-compose #traefik
Вопрос:
У меня установлен Traefik версии v1.7.6 в качестве контейнера Docker, следуя инструкциям в этом руководстве.
Все работает нормально, и доступ к этому сайту осуществляется по адресу: https://proxy.hostname.com
Я хочу добавить контейнер контроллера UniFi для запуска за этим обратным прокси, но мне нужна помощь с моей конфигурацией.
Следуя этому руководству, я могу создать функциональный контейнер и получить доступ к этому сайту по адресу: https://unifi.hostname.com:8443
Порт 8443 — это собственный порт веб-управления, на котором работает UniFi, но именно здесь мне нужна помощь.
Насколько я понимаю, я должен иметь доступ к этому сайту через Traefik по адресу https://unifi.hostname.com и быть перенаправленным на соответствующий порт 8443 на задней панели. Во-вторых, теряется преимущество использования Let’s Encrypt, поскольку он предоставляет сертификат только для поддоменов на порту 443.
Вот мой docker-compose.yml
файл:
version: "3.6"
services:
unifi:
hostname: unifi
image: linuxserver/unifi:latest
restart: always
container_name: "unifi"
volumes:
- /docker/unifi:/config
ports:
- target: 3478
published: 3478
protocol: udp
mode: host
- target: 10001
published: 10001
protocol: udp
mode: host
- target: 8080
published: 8080
protocol: tcp
mode: host
- target: 8081
published: 8081
protocol: tcp
mode: host
- target: 8443
published: 8443
protocol: tcp
mode: host
- target: 8880
published: 8880
protocol: tcp
mode: host
- target: 6789
published: 6789
protocol: tcp
mode: host
networks:
- proxy
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
labels:
- "traefik.enable=true"
- "traefik.tags=frontend"
- "traefik.frontend.passHostHeader=true"
- "traefik.admin.backend=unifi"
- "traefik.admin.frontend.rule=Host:unifi.hostname.com"
- "traefik.admin.port=8443"
- "traefik.admin.protocol=https"
networks:
proxy:
external: true
Комментарии:
1. Я предполагаю, что из вашего вопроса это
https://unifi.hostname.com/
работает не так, как вы ожидаете. Получаете ли вы что-нибудь в своих журналах Traefik при попытке подключиться к этому адресу? Что произойдет, если вы укажете своему браузеру на этот URL-адрес?2. unifi.hostname.com приводит к ответу «Плохой шлюз», но имеет действительный сертификат. unifi.hostname.com:8443 работает, но не имеет действительного сертификата.
3. Это может быть то, что людям нужно скачать и попробовать — это может быть довольно неудобно. Я добавил награду за это.
Ответ №1:
По моему собственному опыту, проксирование контроллера UniFi было проблемой, потому что он использует встроенный самозаверяющий сертификат. Обычно вы должны указать своему прокси игнорировать недействительные сертификаты при подключении к его серверной части.
Я бы предположил, что вам нужна InsecureSkipVerify
опция, которая должна быть включена traefik.toml
.
Проверка безопасности: если установлено значение true, для серверных систем принимаются недействительные SSL-сертификаты. Примечание: это отключает обнаружение атак типа «человек посередине», поэтому его следует использовать только в защищенных серверных сетях. — https://docs.traefik.io/configuration/commons /
Комментарии:
1. Если UniFi работает в контейнере Docker, может ли пользователь использовать том для перезаписи самозаверяющего сертификата реальным?
2. @halfer нет, он встроен глубоко в пакет (java IIRC)
3. О, достаточно справедливо. Тем не менее, Traefik может быть настроен на получение зашифрованного соединения по действительному сертификату, и тогда его соединение с UniFi может быть небезопасным в серверной части, если путь между Traefik и UniFi не подвержен перехвату.
4.Это потенциально связанный поток.
5. @halfer точно 🙂 В этом причина вышеприведенной директивы InsecureSkipVerify. Лично я использую traefik -> oauth_proxy (открытый текст) -> Контроллер UniFi (самоподписанный), чтобы добавить еще один уровень аутентификации