У меня есть ячеистая сеть tinc VPN, которая используется различными типами хостов по всему миру, и я хочу развернуть dockerized сервер имен dnsmasq для использования в этой tinc mesh.
У меня есть уже успешно построил и настроил «толстый» многопроцессорный контейнер докеров (с использованием runit), который делает то, что я ищу. Он запускает как процесс tinc, так и процесс dnsmasq, а dnsmasq настроен для привязки к сетевому интерфейсу tinc в контейнере. Но теперь я пытаюсь создать ту же функциональность, используя однопроцессные контейнеры.
Я знаю, как создать и настроить базовый однопроцессный контейнер dnsmasq, и я знаю, как построить и настроить базовый однопроцессный контейнер tinc. Я могу написать простой файл docker-compose, который вызовет их обоих.
Я не знаю, как сделать что-то вроде использования контейнера tinc в качестве шлюза, который открывает контейнер dnsmasq для ячеистой сети, позволяя другим хосты в этой сети tinc для выполнения DNS-запросов к dnsmasq. Возможно ли это?
После интенсивного поиска в Google и адаптации аналогичных сценариев использования с openVPN я нашел рабочую установку. По сути, вы привязываете сеть контейнера dnsmasq к контейнеру tinc. Вот сокращенный docker-compose.yml, который показывает самое необходимое:
version: '3'
services:
tinc:
...
dnsmasq:
depends_on:
- tinc
network_mode: "service:tinc"
Если вы docker exec -ti dnsmasq / bin / sh
после этого, а затем выполните ifconfig
внутри dnsmasq, вы увидите сетевой интерфейс tinc, который создает контейнер tinc. Итак, если ваша конфигурация dnsmasq привязана к этому сетевому интерфейсу, она просто работает.
Круто.