Как запустить Dockerized сервер имен dnsmasq в Tinc VPN только с одним процессом на контейнер
У меня есть ячеистая сеть Tinc VPN, которая используется различными типами хостов по всему миру, и я хочу развернуть докеризованный сервер имен dnsmasq для использования в этой сети Tinc.
Я уже успешно собрал и настроил "толстый" многопроцессорный докер-контейнер (с использованием runit), который делает то, что я ищу. Он запускает как процесс tinc, так и процесс dnsmasq, а dnsmasq настроен для привязки к сетевому интерфейсу tinc в контейнере. Но сейчас я пытаюсь создать такую же функциональность, используя контейнеры с 1 процессом.
Я знаю, как создавать и настраивать базовый 1-процессовый контейнер dnsmasq, и я знаю, как создавать и настраивать базовый 1-процессовый контейнер Tinc. Я могу написать простой файл docker-compose, который выведет их обоих.
Чего я не знаю, так это как использовать контейнер tinc в качестве шлюза, который предоставляет контейнер dnsmasq для ячеистой сети, позволяя другим узлам в этой сети tinc выполнять DNS-запросы к dnsmasq. Это возможно?
1 ответ
После некоторого интенсивного поиска в 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 связывается с этим сетевым интерфейсом, он просто работает.
Здорово.