Назад | Перейти на главную страницу

Как запустить dockerized сервер имен dnsmasq в tinc VPN с одним процессом на контейнер

У меня есть ячеистая сеть 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 привязана к этому сетевому интерфейсу, она просто работает.

Прохладно.