Вопрос или проблема
Спасибо, что даже кликнули на мой вопрос!
Итак, у меня есть 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 на серверной стороне не настроены должным образом.
Шаги для устранения неполадок
-
Проверка маршрутизации на сервере:
Убедитесь, что ваш сервер может маршрутизировать трафик, поступающий от клиента. Для этого необходимо убедиться, что включена IP-адресация и маршрутизация:- Включите пересылку IP, запустив следующую команду:
echo "1" | sudo tee /proc/sys/net/ipv4/ip_forward
- Для сохранения этого изменения при перезагрузке добавьте следующую строку в
/etc/sysctl.conf
:net.ipv4.ip_forward = 1
- Включите пересылку IP, запустив следующую команду:
-
Настройка 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, позволяя ему выходить в интернет.
-
Проверка конфигурации Pi-hole:
Убедитесь, что Pi-hole настроен на корректное разрешение DNS-запросов через WireGuard. Хотя ваш сервер был указан как DNS-сервер, также убедитесь, что он может разрешать внешние DNS-запросы. Вы можете попробовать использоватьnslookup
илиdig
на сервере, чтобы подтвердить, что DNS работает должным образом. -
Дополнительные настройки клиентской стороны:
- Убедитесь, что в клиентской конфигурации указан правильный DNS, что вы уже сделали, указав
DNS = 10.100.0.1
. Это должен быть IP-адрес вашего сервера с установленным Pi-hole. - Если вы все еще испытываете трудности, попробуйте временно отключить фаервол на сервере, чтобы исключить блокировку трафика.
- Убедитесь, что в клиентской конфигурации указан правильный DNS, что вы уже сделали, указав
-
Проверка соединения:
После внесения изменений, перезапустите WireGuard на обоих устройствах и выполните тесты подключения на клиенте. Попробуйте выполнить командуping
, а также сделайтеnslookup
на URL-адреса, чтобы проверить, работает ли разрешение DNS.
Вопрос о шифровании DNS-запросов
Отвечая на ваш вопрос о шифровании DNS-запросов: да, при использовании WireGuard ваши DNS запросы также шифруются, так как весь трафик (включая DNS) проходит через туннель. Однако важно помнить, что Pi-hole может не поддерживать полноценные функции шифрования (как DNS over HTTPS) вне контекста вашего VPN.
Заключение
Теперь у вас есть более полное представление о том, как устранить проблемы с блокировкой интернета при настройке VPN WireGuard на Raspberry Pi с Pi-hole. Важно проверять каждую конфигурационную деталь и тестировать настройки последовательно. Надеюсь, эти шаги помогут вам восстановить доступ к интернету через туннель WireGuard. Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за помощью.