Networking, jestem stosunkowo nowy, więc proszę o wyrozumiałość. Na potrzeby czysto edukacyjnego projektu założyłem sieć, w której Raspberry Pi 3 z Raspbian Stretch ma działać zarówno jako router, jak i serwer DHCP. Celem jest posiadanie sieci prywatnej, która współużytkuje połączenie internetowe. Oto topologia sieci:
+ ---------- + | Internet | + ----- + ---- + | (wlan0) + ----- + ---------- + | Raspberry Pi 3 | (router + serwer DHCP) + ----- + ---------- + | (eth0) + ----- + - + | Przełącznik | (5-portowy przełącznik TP-Link TL-SF1005D) + ----- + - + | + ----- + ------- + | Mój komputer | + ------------- +
Sieć prywatna ma być 10.0.0.0/24
, z Raspberry Pi ( który jest routerem i serwerem DHCP) z adresem 10.0.0.1
(przez eth0).
Konfiguracja routingu na Raspberry Pi
Dla Raspberry Pi do routingu pakiety między wlan0
a eth0
, zrobiłem sudo sysctl -w net.ipv4.ip_forward = 1
(i wyedytowałem / etc / sysctl .conf
, aby zmiana była trwała).
Następnie na początkowo pustych tabelach iptables, zrobiłem:
# iptables -P INPUT ACCEPT # iptables - P OUTPUT ACCEPT # iptables -P FORWARD DROP # iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE # iptables -A FORWARD -i wlan0 -o eth0 -m conntrack --ctstate USTANOWIONO, POWIĄZANE -j AKCEPTUJ # iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT
Konfiguracja interfejsu sieciowego na Raspberry Pi
Ponieważ Raspbian Stretch używa /etc/dhcpcd.conf
zamiast / etc / network / interfaces
na automat Aby skonfigurować interfejsy sieciowe, wyedytowałem /etc/dhcpcd.conf
tak, aby wyglądały tak (zobacz sekcję MOJE USTAWIENIA
):
# /etc/dhcpcd.conf na Raspberry Pi (router + serwer DHCP). # Poinformuj serwer DHCP o naszej nazwie hosta dla DDNS.hostname # Użyj adresu sprzętowego interfejsu dla Client ID.clientid
# Utrwalaj konfigurację interfejsu, gdy dhcpcd exits.persistent # Rapid commit support.option rapid_commit # Lista opcji żądanych od serwera DHCP.option domain_name_servers, domain_name, domain_search, host_nameoption classless_static_routes # Większość dystrybucji ma obsługę NTP.option ntp_servers # Szanuj sieć MTU. Jest to stosowane do routingu DHCP route.option interface_mtu # Identyfikator serwera jest wymagany przez RFC2131.require dhcp_server_identifier # Generuj stabilne prywatne adresy IPv6 zamiast sprzętu opartego naesslaac private # MOJE USTAWIENIA: interface eth0static ip_address = 10.0.0.1 / 24static broadcast_address = 10.0.0.255static domain_name_servers = 8.8.8.8 8.8.4.4
Konfiguracja DHCP na Raspberry Pi
Zainstalowałem isc-dhcp-server
i skonfigurowałem go w ten sposób:
# /etc/dhcp/dhcpd.conf na Raspberry Pi (router + serwer DHCP). # Plik konfiguracyjny dla ISC dhcpd # Użyj Google Public DNS.option Domain-name-servers 8.8.4.4, 8.8.8.8; domyślny czas dzierżawy 600; maksymalny czas dzierżawy 7200; styl aktualizacji ddns brak; autorytatywny; maska sieciowa podsieci 10.0.0.0 255.255.255.0 {zakres 10.0.0.10 10.0.0.254; routery opcjonalne 10.0.0.1; opcja broadcast-address 10.0.0.255;}
Konfiguracja obsługująca tylko eth0
:
# / etc / default / isc -dhcp-server na Raspberry Pi (router + serwer DHCP) .INTERFACESv4 = "eth0" INTERFACESv6 = ""
Następnie zrestartowałem Raspberry Pi i upewniłem się, że isc-dhcp -server
jest uruchomiony.
Obserwacja problemu
Podekscytowany nową siecią wziąłem komputer ( Mój komputer
w schemat sieci powyżej) i podłączono kabel Ethernet do portu Ethernet. Komputer nie łączy się, więc zaglądam do pliku / var / log / syslog
na komputerze. Widzę tam te wiersze:
home dhclient [14783]: DHCPDISCOVER na enp3s0 do 255.255.255.255 port 67, interwał 3 (xid = 0xcab1222)
home dhclient [14783]: DHCPDISCOVER na enp3s0 do 255.255.255.255 port 67, interwał 5 (xid = 0xcab1222) home dhclient [14783]: DHCPDISCOVER na enp3s0 do 255.255.255.255 port 67 interwał 14 (xid = 0xcab1222) home dhclient [14783]: DHCPDISCOVER na enp3s0 do 255.255.255.255 port 67 interwał 16 (xid = 0xcab1222) ## itd.
Ciekawe, czy Raspberry Pi (router + serwer DHCP) odbiera te żądania, Spojrzałem na / var / log / syslog
na Raspberry Pi:
rpi dhcpd [9685]: DHCPDISCOVER z f4: 8e: 38: e9: 88: d7 (home) przez eth0rpi dhcpd [9685]: DHCPOFFER od 10.0.0.11 do f4: 8e: 38: e9: 88: d7 (home) przez eth0rpi dhcpd [9685]: DHCPDISCOVER od f4: 8e: 38: e9: 88: d7 (home) przez eth0rpi dhcpd [9685]: DHCPOFFER od 10.0.0.11 do f4: 8e: 38: e9: 88: d7 (home) przez eth0rpi dhcpd [9685]: DHCPDISCOVER od f4: 8e: 38: e9: 88: d7 (home) przez eth0rpi dhcpd [9685]: DHCPOFFER na 10.0.0.11 do f4: 8e: 38: e9: 88: d7 (home) przez eth0 ## itd.
Rzeczywiście, malina Pi wysyła
Dziwna obserwacja
Chcąc zbadać dalej, uruchomiłem tcpdump
na Mój komputer
. Po podłączeniu kabla Ethernet do My Computer
uruchomiłem sudo tcpdump -n udp port 68 -v
. I ... łączy! Mój komputer
pobiera adres IP ( 10.0.0.11
) z serwera DHCP. I mogę użyć tego połączenia, aby pomyślnie przeglądać stackoverflow.com
bez żadnych problemów.
Ciekawe, odłączyłem i ponownie podłączyłem kabel Ethernet, a następnie uruchomiłem tcpdump
nieco inaczej: sudo tcpdump -n udp port 68 --no-promiscuous-mode -v
. Niestety, wracając do punktu wyjścia: brak połączenia, brak przypisanego adresu IP.
Więc wygląda na to, że Mój komputer
może odbierać DHCPOFFER
, ale tylko w trybie swobodnym? Nie sądzę, żeby winna była karta sieciowa; Mogę z powodzeniem korzystać z przewodowej sieci Ethernet poza tym eksperymentem.
Kolejna obserwacja: próbowałem ponownie podłączyć Mój komputer
do sieci, ale tym razem bez przełącznika (tj. połączenie z Mój komputer
do RPi). Dokładnie ten sam problem. Dokładnie ta sama obserwacja w dziennikach i przy zachowaniu tcpdump
.
Pytania
- Czy moja topologia sieci jest prawidłowa?
- Czy mój sprzęt sieciowy jest prawidłowy?
- Co jest nie tak z konfiguracją sieci?
Próbowałem rozwiązać ten problem, czytając dużo, a ja ' wiele się z tego nauczyłem, ale myślę, że nadszedł czas, abym uzyskał kilka wskazówek.