Как обеспечить, чтобы трафик WireGuard был ограничен пространством имён сети Linux без доступа в интернет на хосте?

Вопрос или проблема

Я пытаюсь настроить WireGuard (WG) внутри пространственного имен сети Linux (mynamespace) таким образом, чтобы весь трафик WireGuard был ограничен пространственным именем сети и не затрагивал сеть хоста. Однако я сталкиваюсь с проблемами, когда не могу получить доступ в интернет из пространства имен, хотя WireGuard активен.

Вот некоторая важная информация:

Маршруты пространственного имени сети:

sudo ip netns exec mynamespace ip route show
default dev wg0 scope link

Интерфейсы пространственного имени сети:

sudo ip netns exec mynamespace ip link show
1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
4: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/none

Настройка WireGuard внутри пространства имен:

sudo ip netns exec mynamespace wg showconf wg0
[Interface]
ListenPort = 44574
FwMark = 0xca6c
PrivateKey = PrivateKey

[Peer]
PublicKey = PublicKey
PresharedKey = PrehashedKey
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = endpoint

Конфигурация WireGuard на сервере

docker exec wg-easy cat /etc/wireguard/wg0.conf

# Примечание: Не редактируйте этот файл напрямую.
# Ваши изменения будут перезаписаны!

# Сервер
[Interface]
PrivateKey = private
Address = 10.8.0.1/24
ListenPort = 51820
PreUp =
PostUp =  iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE; iptables -A INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT;
PreDown =
PostDown =  iptables -t nat -D POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE; iptables -D INPUT -p udp -m udp --dport 51820 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT;

# Клиент: test (c8d80092-7212-4d49-be6e-b35af0145a28)
[Peer]
PublicKey = pub key
PresharedKey = pre hashed key
AllowedIPs = 10.8.0.2/32

# Клиент: [idor (f4c34cf0-2dc8-4a0a-817d-80fed9473d92)
[Peer]
PublicKey = pub key
PresharedKey = prehashed key

Конфигурация разрешения DNS

sudo ip netns exec mynamespace cat /etc/resolv.conf

nameserver 1.1.1.1

Проблема:

  • Маршрут внутри пространства имен установлен на default dev wg0, но я не могу получить доступ к интернету внутри пространства имен.
  • Я хочу, чтобы трафик WireGuard происходил только внутри пространства имен и не затрагивал сеть хоста.
  • Другие интерфейсы (например, eth0) на хосте не должны быть доступны из пространства имен.

Что я пробовал:

  1. Я проверил таблицу маршрутизации, и wg0 является единственным маршрутом по умолчанию внутри пространства имен.
  2. Я попробовал вручную добавить дополнительные маршруты и настроить конфигурацию WireGuard, но ничего не помогает сделать интернет доступным внутри пространства имен.

Цель:

  • Мне нужно убедиться, что трафик WireGuard остается внутри пространства имен и не проходит через сетевые интерфейсы хоста, при этом обеспечивая доступ пространства имен в интернет через WireGuard.

Спасибо!

Ответ или решение

Обеспечение изоляции трафика WireGuard в пространстве сетевых имён Linux без доступа к Интернету на хосте

Чтобы убедиться, что трафик WireGuard изолирован в пространстве сетевых имён (namespace) Linux, а также чтобы избежать доступа к Интернету с основного хоста, необходимо выполнить несколько ключевых шагов. Ниже представлены подробные инструкции, которые помогут достичь этой цели.

1. Создание и настройка сетевого пространства имён

Сначала создайте пространство сетевых имён и необходимые интерфейсы. Используйте следующие команды:

sudo ip netns add mynamespace
sudo ip link add wg0 type wireguard
sudo ip link set wg0 up
sudo ip netns exec mynamespace ip link set wg0 up

2. Настройка конфигурации WireGuard

Ваш файл конфигурации WireGuard в пространстве имён должен быть настроен для поддержания изоляции. Проверьте, что в параметрах AllowedIPs указаны только адреса вашего WireGuard-сервера:

[Peer]
AllowedIPs = 10.8.0.0/24  # Замените на соответствующие подсети вашего WireGuard сервера

Также убедитесь, что интерфейс wg0 имеет правильный IP-адрес.

3. Настройка маршрутов внутри пространства имён

Как вы уже отметили, в вашем пространстве имён установлен маршрут по умолчанию через wg0:

default dev wg0 scope link

В то же время, если WireGuard настроен правильно и активен, вы должны убедиться, что другие маршруты, позволяющие доступ к Интернету, не существуют. Чтобы это проверить:

sudo ip netns exec mynamespace ip route show

Если нет других маршрутов, добавьте статический маршрут, который будет направлять трафик через интерфейс wg0.

4. Исключение хоста из пространства имён

Чтобы убедиться, что интерфейсы хоста недоступны из пространства имён, используйте ip netns exec для управления доступом. Убедитесь, что вы не используете контейнеры или другие виртуализации, которые могут создать нежелательные точки доступа.

Также проверьте IPTables на хосте, чтобы убедиться, что правила не позволяют трафику из mynamespace выходить в другие сетевые интерфейсы:

sudo iptables -A OUTPUT -m owner --uid-owner <user-id> -j DROP

Замените <user-id> на соответствующий идентификатор пользователя вашего пространства имён, чтобы заблокировать все исходящие подключения к хосту.

5. Использование DNS в пространстве имён

Ваш файл конфигурации DNS в пространстве имён настроен на использование внешнего DNS-сервера (например, 1.1.1.1). Однако вы должны убедиться, что нет дополнительных настроек, блокирующих доступ к этому серверу. Если доступ к DNS необходим, он должен быть выполнен через интерфейс wg0.

Исользуйте интернал резолвер (например, dnsmasq), доступный только внутри конкретного пространстве имён, чтобы обеспечить корректный путь для DNS-запросов.

6. Проверка работоспособности

После выполнения всех вышеуказанных шагов проверьте работоспособность вашего настроенного пространства имён.

  • Попробуйте выполнить ping до сервера WireGuard из пространства имён:
sudo ip netns exec mynamespace ping 10.8.0.1  # IP адрес вашего WireGuard сервера
  • Убедитесь, что DNS-запросы выполняются корректно:
sudo ip netns exec mynamespace nslookup google.com

Заключение

Следуя указанным шагам, вы сможете изолировать трафик WireGuard в пространстве сетевых имён Linux и избежать его взаимодействия с основным хостом. Эти действия обеспечат безопасность конфиденциальных данных, а также позволят вам правильно настраивать сетевые соединения без негативного влияния на другие системные процессы.

Оцените материал
Добавить комментарий

Капча загружается...