Вопрос или проблема
Мой провайдер интернета предоставил мне один LAN-кабель, который подключен к 4-портовому сетевому коммутатору. От этого коммутатора один кабель подключен к Raspberry Pi 4, а другой – к компьютеру с Windows.
Моя цель – сделать так, чтобы Rpi4 работал как роутер (не WIFI роутер) и DHCP-сервер. Таким образом, другие устройства, подключенные к этому коммутатору, такие как компьютер с Windows, будут получать IP-адрес от Rpi4.
Для подключения к интернету провайдер требует установить конкретный статический IP.
Таким образом, конфигурация Pi4 в /etc/network/interfaces
выглядит следующим образом:
#это указано моим провайдером для подключения к интернету.
iface eth0 inet static
address 10.102.132.52/24
gateway 10.102.132.1
dns-nameservers 10.102.132.1
#добавлено мной для работы как DHCP-сервер
iface eth0:1 inet static
address 192.168.10.1/24
После настройки этого, интернет работает на Rpi4.
Теперь я установил docker-pihole, и compose.yaml
выглядит следующим образом:
services:
pihole:
container_name: pihole
image: pihole/pihole:latest
network_mode: "host"
environment:
TZ: 'America/Chicago'
WEBPASSWORD: 'changeme'
volumes:
- './etc-pihole:/etc/pihole'
- './etc-dnsmasq.d:/etc/dnsmasq.d'
cap_add:
- NET_ADMIN
restart: unless-stopped
С панели управления Pihole я включил DHCP-сервер и установил диапазон от 192.168.10.100
до 192.168.10.150
и шлюз 192.168.10.1
.
Машина с Windows успешно получает IP, например, 192.168.10.145
; где шлюз и DNS автоматически устанавливаются на 192.168.10.1
.
ping 8.8.8.8
с машины Windows работает; но ping example.com
не работает.
Мне сразу пришло в голову, что DNS pihole не работает, но при проверке журнала запросов я увидел, что машина с Windows запросила example.com
и он был разрешен, но все же я не могу просматривать интернет с машины с Windows.
net.ipv4.ip_forward=1
установлен в /etc/sysctl.conf
, а маскарад включена для eth0 с использованием iptables.
Мой лучший предположение – это то, что DNS-ответы не доходят до машины с Windows. Нужна ли какая-то маршрутизация трафика?
Ответ или решение
Ваш сценарий настройки сети выглядит почти правильно, но учитывая, что ваш Windows компьютер получает IP-адрес и отвечает на запросы ping к IP-адресам, но не может разрешать доменные имена, есть вероятность, что проблема связана с маршрутизацией ответов DNS обратно на ваш компьютер.
Вот несколько шагов, которые помогут вам устранить проблему:
-
Проверка конфигурации Pi-hole:
Убедитесь, что Pi-hole корректно настроен на использование внешнего DNS-сервера. Если DNS запроса успешно обрабатываются, это означает, что Pi-hole работает. Проверьте настройки "DNS" в веб-интерфейсе Pi-hole и убедитесь, что выбранные внешние DNS-серверы работают. -
Проверка iptables:
Вы упомянули, что у вас включен masquerade дляeth0
. Это важно для перенаправления исходящего трафика к интернету. Однако нужно также убедиться, что у вас есть правильные правила iptables для разрешения входящего трафика. Попробуйте выполнить следующую команду:iptables -L -v -n
Убедитесь, что у вас есть правило, позволяющее трафику через интерфейс
eth0
и что трафик направляется обратно в вашу локальную сеть (например, с интерфейсаeth0:1
).Пример правила, которое может вам помочь:
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i eth0:1 -o eth0 -j ACCEPT
-
Проверка маршрутов:
На вашем Windows ПК выполните командуroute print
. Убедитесь, что маршрут по умолчанию установлен и указывает на ваш Pi-hole (192.168.10.1). -
Проверка сетевых настроек Windows:
Попробуйте сбросить DNS-кеш на Windows машине командой:ipconfig /flushdns
Затем проверьте текущие DNS-услуги с помощью команды:
nslookup example.com
Это поможет убедиться, что DNS работает корректно.
-
Тестирование с помощью другого DNS-сервера:
Попробуйте временно установить DNS на вашем Windows ПК на общедоступные DNS-серверы, такие как Google (8.8.8.8) или Cloudflare (1.1.1.1) и проверьте, работает ли разрешение имен:nslookup example.com 8.8.8.8
Если это работает, вам нужно будет пересмотреть настройки вашего Pi-hole и его внешний DNS.
-
Изменение конфигурации Pi-hole:
Если вы используетеpi-hole
как DNS, убедитесь, что он может принимать запросы от других устройств в вашей сети. Для этого проверьте конфигурационные файлы и убедитесь, что в них нет ограничений для вашей сети.
Если после выполнения этих шагов проблема не исчезнет, предоставьте дополнительную информацию о конфигурации iptables
и вывод команд ip a
и iptables -L -n -v
для дальнейшего анализа.