WireGuard полный туннель блокирует доступ в интернет

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

Спасибо, что даже кликнули на мой вопрос!

Итак, у меня есть R-Pi, и я установил на него WireGuard (я не использую PiVPN; я пробовал, но это вообще не работало). У меня также установлен PiHole.

Я следовал гиду WireGuard в документации PiHole, потому что был уверен, что эти две службы будут хорошо сосуществовать.

Все шло по плану, никаких проблем не возникло…

Этот конфиг, судя по всему, перенаправляет мои DNS-запросы через PiHole (как и предполагалось), потому что если я заношу домен в черный список и пытаюсь зайти на него, когда подключен к VPN, это не работает (но работает, если он в белом списке). Это также позволяет мне пинговать устройства в локальной сети сервера (более конкретно в подсети его основного Ethernet); однако я не могу пинговать, используя имя хоста, что странно…

Итак, вот конфигурация со стороны сервера:

[Interface]
Address = 10.100.0.1/24, fd08:4711::1/64
ListenPort = 50009
PrivateKey = <myprivatekey>
PostUp = nft add table ip wireguard; nft add chain ip wireguard wireguard_chain {type nat hook postrouting priority src>
PostDown = nft delete table ip wireguard; nft delete table ip6 wireguard
# судя по документации PiHole, я должен использовать nft, а не iptables для Raspbian 11.

[Peer] #mypc
PublicKey = <mypublickey>
PresharedKey = <presharedkey>
AllowedIPs = 10.100.0.2/32, fd08:4711::2/128

А вот конфигурация со стороны клиента:

[Interface]
PrivateKey = <myprivatekey>
Address = 10.100.0.2/32, fd08:4711::2/128
DNS = 10.100.0.1 #ip сервера с PiHole

[Peer]
PublicKey = <mypublickey>
PresharedKey = <mypresharedkey>
AllowedIPs = 10.100.0.1/32, fd08:4711::1/128, 192.168.1.0/24
Endpoint = <mydomainname>:50009
PersistentKeepalive = 25

Так что это все неплохо (учитывая, что я собирался написать, что у меня есть утечки DNS, но только что провел тест, и, похоже, все в порядке!). Просто один вопрос (не главный): зашифрован ли мой DNS-запрос с этой системой?

Но теперь я хотел бы полный туннель, где весь мой трафик идет через мой сервер, чтобы мой IP был скрыт, и я мог безопасно получать доступ к некоторым SMB-долькам (я настроил SFTP, но на случай, если он перестанет работать, я хочу резервный способ доступа к своим файлам).

Так много учебников (включая документацию PiHole) сказали установить AllowedIPs = 0.0.0.0/0, ::/0… Что я и сделал, но… я мгновенно теряю интернет-соединение… Может ли это быть проблемой с брандмауэром? Если да, то где: со стороны сервера или со стороны клиента?

Если я использую nslookup для любого домена, он не разрешается, хотя мой сервер (с PiHole) указан в качестве DNS-сервера для туннеля…

Вот конфигурация сервера для этого (без изменений):

[Interface]
Address = 10.100.0.1/24, fd08:4711::1/64
ListenPort = 50009
PrivateKey = <myprivatekey>
PostUp = nft add table ip wireguard; nft add chain ip wireguard wireguard_chain {type nat hook postrouting priority src>
PostDown = nft delete table ip wireguard; nft delete table ip6 wireguard
# судя по документации PiHole, я должен использовать nft, а не iptables для Raspbian 11.

[Peer] #mypc
PublicKey = <mypublickey>
PresharedKey = <presharedkey>
AllowedIPs = 10.100.0.2/32, fd08:4711::2/128

А вот конфигурация со стороны клиента:

[Interface]
PrivateKey = <myprivatekey>
Address = 10.100.0.2/32, fd08:4711::2/128
DNS = 10.100.0.1

[Peer]
PublicKey = <mypublickey>
PresharedKey = <mypresharedkey>
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = <mydomainname>:50009
PersistentKeepalive = 25

В приложении WireGuard для Windows я могу отменить выбор “Блокировать не туннелированный трафик”, что изменяет AllowedIPs на 0.0.0.0/1, 128.0.0.0/1, ::/1, 8000::/1. Ничего не меняет и не помогает, но просто хотел упомянуть об этом…

Я действительно не понимаю, мучаюсь с этим уже 5 часов… Довольно безнадежно…

Спасибо, что зашли так далеко в этом огромном чтении!

Silloky

Небольшая заметка: этот вопрос также был опубликован на Server Fault.

Я понял, что на стороне СЕРВЕРА должна быть как минимум вторая сетевая интерфейс для перенаправления интернет-трафика, приходящего от КЛИЕНТА.

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

Решение проблемы с блокировкой интернета при использовании WireGuard в режиме полного туннеля

Проблема, с которой вы столкнулись при настройке VPN-сервера WireGuard на Raspberry Pi, выглядит как классический случай конфигурационной ошибки, связанной с маршрутизацией и NAT (преобразованием сетевых адресов). Давайте разберем элементы вашей настройки и opportunities для устранения проблемы.

Текущая конфигурация

Сейчас ваша клиентская конфигурация выглядит следующим образом:

[Interface]
PrivateKey = <myprivatekey>
Address = 10.100.0.2/32, fd08:4711::2/128
DNS = 10.100.0.1

[Peer]
PublicKey = <mypublickey>
PresharedKey = <mypresharedkey>
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = <mydomainname>:50009
PersistentKeepalive = 25

При добавлении строки AllowedIPs = 0.0.0.0/0, ::/0, вы настраиваете туннель на отправку всего трафика через WireGuard. Однако потеря доступа к интернету указывает на то, что маршрутизация и NAT на серверной стороне не настроены должным образом.

Шаги для устранения неполадок

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

    • Включите пересылку IP, запустив следующую команду:
      echo "1" | sudo tee /proc/sys/net/ipv4/ip_forward
    • Для сохранения этого изменения при перезагрузке добавьте следующую строку в /etc/sysctl.conf:
      net.ipv4.ip_forward = 1
  2. Настройка NAT:
    Убедитесь, что NAT правильно настроен для исходящего трафика. Добавьте следующее в вашу конфигурацию сервера (вместо вашей текущей PostUp строки):

    PostUp = nft add table ip wireguard; nft add chain ip wireguard wireguard_chain { type nat hook postrouting priority src; nft add rule ip wireguard wireguard_chain ip saddr 10.100.0.0/24 ip daddr 0.0.0.0/0 counter masquerade; }

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

  3. Проверка конфигурации Pi-hole:
    Убедитесь, что Pi-hole настроен на корректное разрешение DNS-запросов через WireGuard. Хотя ваш сервер был указан как DNS-сервер, также убедитесь, что он может разрешать внешние DNS-запросы. Вы можете попробовать использовать nslookup или dig на сервере, чтобы подтвердить, что DNS работает должным образом.

  4. Дополнительные настройки клиентской стороны:

    • Убедитесь, что в клиентской конфигурации указан правильный DNS, что вы уже сделали, указав DNS = 10.100.0.1. Это должен быть IP-адрес вашего сервера с установленным Pi-hole.
    • Если вы все еще испытываете трудности, попробуйте временно отключить фаервол на сервере, чтобы исключить блокировку трафика.
  5. Проверка соединения:
    После внесения изменений, перезапустите WireGuard на обоих устройствах и выполните тесты подключения на клиенте. Попробуйте выполнить команду ping, а также сделайте nslookup на URL-адреса, чтобы проверить, работает ли разрешение DNS.

Вопрос о шифровании DNS-запросов

Отвечая на ваш вопрос о шифровании DNS-запросов: да, при использовании WireGuard ваши DNS запросы также шифруются, так как весь трафик (включая DNS) проходит через туннель. Однако важно помнить, что Pi-hole может не поддерживать полноценные функции шифрования (как DNS over HTTPS) вне контекста вашего VPN.

Заключение

Теперь у вас есть более полное представление о том, как устранить проблемы с блокировкой интернета при настройке VPN WireGuard на Raspberry Pi с Pi-hole. Важно проверять каждую конфигурационную деталь и тестировать настройки последовательно. Надеюсь, эти шаги помогут вам восстановить доступ к интернету через туннель WireGuard. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.

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

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