Рейтинг:1

Wireguard перенаправляет трафик на хост

флаг cn

Я использую Wireguard в качестве док-контейнера на пи. Я запускаю пару других сервисов на pi, которые я хочу сделать доступными только через соединение wireguard. Сервер wireguard создал интерфейс WG0 и подсеть 10.8.0.0/24. Изнутри контейнера я могу подключиться к хосту через 172.17.0.1 поэтому я искал и смог создать следующую конфигурацию внутри контейнера:

iptables -t nat -A PREROUTING -d 10.8.0.1/32 -j DNAT --к месту назначения 172.17.0.1

Это позволяет мне подключаться от клиента wireguard к IP-адресу хоста wireguard. 10.8.0.1 и таким образом подключиться ко всем службам, работающим в этом и других контейнерах.

Это отлично работает, за исключением того, что исходный ip показывает ip из док-контейнера.

У меня есть 3 вопроса:

  1. Есть ли способ показать исходный ip как 10.8.0.2 (ip клиента wireguard)?
  2. Создает ли это какие-либо риски для безопасности?
  3. Есть лучший способ это сделать?

Я знаю, что я мог бы также использовать режим хоста докера вместо режима моста, но это связано с собственным набором проблем. Я также знаю, что могу получить доступ 172.17.0.1 из впн клиента. Только это не работает при подключении к нескольким vpn одновременно.

Спасибо заранее.

Рейтинг:1
флаг cn
  1. Есть ли способ показать IP-адрес источника как 10.8.0.2 (IP-адрес клиента wireguard)?

Вероятно, у вас также есть правило iptables, работающее в контейнере, которое выглядит так:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Это то, что изменяет исходный IP-адрес соединений, перенаправляемых через контейнер WireGuard. При вашем текущем подходе, чтобы избежать использования этого правила, вам придется настроить маршрутизацию в каждом из других контейнеров, чтобы использовать контейнер WireGuard в качестве шлюза для удаленного клиента WireGuard.

  1. Создает ли это какие-либо риски для безопасности?

Удаленный клиент WireGuard может получить доступ к любым сетевым службам, к которым может получить доступ сам контейнер WireGuard.

  1. Есть лучший способ это сделать?

Простейшей альтернативой будет запуск других контейнеров в собственном сетевом пространстве имен контейнера WireGuard, например:

Сначала запустите контейнер WireGuard с именем, например мой-WG-контейнер:

sudo докер запустить \
    --cap-добавить NET_ADMIN \
    --name мой-wg-контейнер \
    --опубликовать 51820:51820/udp \
    --rm \
    --volume /srv/my-wg-container/conf:/etc/wireguard \
    procustodibus/wireguard

Затем запустите другие контейнеры в сетевом пространстве имен контейнера WireGuard с параметром --сетевой контейнер: мой-wg-контейнер вариант:

sudo докер запустить \
    --name мой-веб-сервер \
    --сетевой контейнер: мой-wg-контейнер \
    --rm \
    нгинкс

Если контейнер WireGuard использует 10.8.0.1 по адресу его интерфейса WireGuard (как в вашем примере) вы можете получить доступ к веб-серверу, работающему в мой веб-сервер контейнер в http://10.8.0.1/ с удаленного клиента WireGuard. См. Использование для контейнерной сети раздел этого Руководство по контейнерам WireGuard для полного примера.

При таком подходе вам не нужно делать ничего особенного с другими контейнерами (кроме присоединения их к контейнеру WireGuard), а удаленный клиент WireGuard может получать доступ только к службам в прикрепленных контейнерах (вместо любых других сетевых служб, доступных для контейнер WireGuard).

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.