dnsmasq: mapowanie 2 adresów MAC na ten sam adres IP

17

Czy można zmapować 2 różne adresy MAC na ten sam adres IP?

W celu wykonania kopii zapasowej muszę ponownie połączyć się z serwerem z urządzeniem przenośnym i chcę mieć ten sam adres IP zarówno dla interfejsu bezprzewodowego, jak i przewodowego.

Interfejs sieciowy openwrt nie akceptuje wielu wpisów dhcp z tym samym adresem IP, ale być może istnieje obejście?

Wyjaśnienie dodane 23 maja :

Powinienem był wyjaśnić, że tylko jeden interfejs sieciowy urządzenia przenośnego jest podłączony do sieci w danym momencie (stąd przełączniki nie powinny się mylić). Początkowo miałem 2 różne adresy IP przypisane do interfejsów o tej samej nazwie DNS, ale to nie działało bardzo dobrze (przekroczenia limitu czasu, gdy otrzymałem zły adres IP). Jednak chcę używać tej samej nazwy dla obu, ponieważ jest ona zapisana na stałe w moim skrypcie kopii zapasowej.

Przepraszam za zamieszanie.

sleepyMonad
źródło
Jestem prawie pewien, że shenanigany wystąpią, jeśli spróbujesz tego.
Holocryptic
System operacyjny na kliencie (i ewentualnie na serwerze) również może mieć tutaj
germain

Odpowiedzi:

29

(losowy, półpoważny komentarz: rzadko widuje się tak wysoką liczbę niekonstruktywnych i zwykłych niedokładnych odpowiedzi i komentarzy do pytania)

W przeciwieństwie do innych tutaj, twierdzę, że twoja prośba jest w rzeczywistości dość elementarna i jest obsługiwana w dnsmasq od wersji 2.46 , IIRC. To był jedyny powód, dla którego przestawiłem się z dd-wrt . Po około roku korzystania z OpenWRT wiem, że istnieje naprawdę wiele innych powodów, aby się zmienić, ale to nie ma sensu.

Korzystam z Backfire 10.04-rc4 :

May 23 17:45:16 gateway dnsmasq[1925]: started, version 2.55 cachesize 150

Moja konfiguracja:

$ cat /etc/config/dhcp

config 'dnsmasq'
    option 'domainneeded' '1'
    option 'boguspriv' '1'
    option 'localise_queries' '1'
    option 'rebind_protection' '1'
    option 'rebind_localhost' '1'
    option 'expandhosts' '1'
    option 'authoritative' '1'
    option 'readethers' '1'
    option 'leasefile' '/tmp/dhcp.leases'
    option 'resolvfile' '/tmp/resolv.conf.auto'
    option 'enable_tftp' '1'
    option 'domain' 'domain.net'
    option 'local' '/domain.net/'

config 'dhcp' 'lan'
    option 'interface' 'lan'
    option 'start' '100'
    option 'limit' '150'
    option 'leasetime' 'infinite'

config 'dhcp' 'wan'
    option 'interface' 'wan'
    option 'ignore' '1'
    option 'dynamicdhcp' '0'

config 'dhcp'
    option 'interface' 'dmz'
    option 'start' '100'
    option 'limit' '150'
    option 'leasetime' '12h'

config 'host'
    option 'name' 'travelmate'
    option 'mac' '00:11:22:33:44:55 aa:bb:cc:dd:ee:ff'
    option 'ip' '192.168.1.111'

config 'host'
    option 'name' 'mobilitymac'
    option 'mac' '99:88:77:66:55:44 ff:ee:dd:cc:bb:aa'
    option 'ip' '192.168.1.104'

Ciesz się płynnym przejściem, jakie zapewnia ta konfiguracja, wszystkie istniejące sesje pozostaną przy życiu, jeśli przełącznik nie zajmie Ci zbyt wiele czasu.

lkraav
źródło
4
Głosowałbym za odpowiedzią na tę odpowiedź, ponieważ odpowiada ona na moje pytanie w bardzo szczegółowy sposób, ale nie mam jeszcze karmy.
sleepyMonad
I dodatkowe punkty brownie, ponieważ luci (interfejs sieciowy) wydaje się faktycznie obsługiwać ten format.
sleepyMonad
1
Ostatniej nocy zdarzyło mi się mieć sytuację, w której nie wiedziałem, że wlan0 wciąż jest podłączony (podczas testowania brcm80211 może być trochę oszukany) podczas łączenia eth0. dnsmasq nie miał z tym żadnego szczególnego problemu, po prostu przypisał nowy adres IP dla eth0. Złą rzeczą jest to, że musisz wtedy przejść do routera, zatrzymać dnsmasq i edytować / kill /tmp/dhcp.leases, ponownie uruchomić dnsmasq, aby wszystko wróciło do pożądanego trybu operacyjnego.
lkraav
2
Aby wydestylować to, co uważam za ważną część tego, możesz zawrzeć wiele adresów MAC w jednym wpisie (w tym pliku lub w interfejsie luci). Zamiast tworzyć linię za pomocą, ab:cd:ef:01:02:03a drugą za pomocą 04:05:06:07:08:09, po prostu wprowadź jeden wpis z pojedynczą spacją oddzielającą dwa, np ab:cd:ef:01:02:03 04:05:06:07:08:09.
teeks99,
6

Zrobiłem trochę badań.

Najpierw dowiedziałem się, że można przypisywać dzierżawę DHCP na podstawie kryteriów innych niż adres MAC.

Z FAQ dhcp :

Co to jest identyfikator klienta?

To, co nazywa się identyfikatorem klienta dla celów protokołu DHCP, jest tym, co jest używane przez protokół do identyfikacji komputera klienckiego. Domyślnie implementacje DHCP zwykle wykorzystują do tego celu adres MAC klienta, ale protokół DHCP dopuszcza inne opcje. Niektóre implementacje DHCP mają opcję konfiguracji, aby określić żądany identyfikator klienta. Alternatywą dla adresu MAC jest po prostu ciąg znaków do wyboru. W każdym razie, aby DHCP mógł działać, musisz mieć pewność, że żaden inny klient nie używa wybranego przez Ciebie identyfikatora klienta, i upewnij się, że serwer DHCP go zaakceptuje.

Następnie, chociaż najwyraźniej nie jest obsługiwany przez interfejs internetowy luci w openWRT, sam dnsmasq obsługuje identyfikator_klienta i wiele adresów MAC (z pewną ostrożnością).

Z dnsmasq strony man :

-G, --dhcp-host = [hwaddr] [, id: client_id | *] [, set: tag] [, ipaddr] [, nazwa hosta] [, lease_time] [, ignoruj] Określ parametry hosta dla serwera DHCP . Dzięki temu maszynie o określonym adresie sprzętowym zawsze można przydzielić tę samą nazwę hosta, adres IP i czas dzierżawy. Określona w ten sposób nazwa hosta zastępuje dowolną dostarczoną przez klienta DHCP na komputerze. Dopuszczalne jest również pominięcie adresu sprzętowego i podanie nazwy hosta, w którym to przypadku adres IP i czasy dzierżawy będą miały zastosowanie do każdej maszyny, która ma taką nazwę. Na przykład --dhcp-host = 00: 20: e0: 3b: 13: af, wap, infinite informuje dnsmasq, aby nadał maszynie adres sprzętowy 00: 20: e0: 3b: 13: af nazwę wap i nieskończony Dzierżawa DHCP. --dhcp-host = okrążenie, 192.168.0.199 mówi dnsmasqowi, aby zawsze przydzielał okrążeniu maszyny adres IP 192.168.0.199.

(...)

Dozwolone jest używanie identyfikatorów klienta zamiast adresów sprzętowych do identyfikowania hostów przez prefiks „id:”. Zatem: --dhcp-host = id: 01: 02: 03: 04, ..... odnosi się do hosta o identyfikatorze klienta 01: 02: 03: 04. Dozwolone jest również określenie identyfikatora klienta jako tekstu, na przykład: --dhcp-host = id: clientidastext, .....

(...)

W szczególnym przypadku można podać więcej niż jeden adres sprzętowy. np .: --dhcp-host = 11: 22: 33: 44: 55: 66,12: 34: 56: 78: 90: 12,192.168.0.2 Pozwala to na powiązanie adresu IP z wieloma adresami sprzętowymi i daje uprawnienia dnsmasq porzucić dzierżawę DHCP na jeden z adresów sprzętowych, gdy inny poprosi o dzierżawę. Uważaj, że jest to niebezpieczna rzecz, będzie działać niezawodnie tylko wtedy, gdy tylko jeden z adresów sprzętowych będzie aktywny w dowolnym momencie i nie ma możliwości, aby dnsmasq wymusił to. Przydatne jest na przykład przydzielenie stabilnego adresu IP laptopowi, który ma interfejsy przewodowe i bezprzewodowe.

Wybrałem rozwiązanie dla wielu komputerów Mac (ponieważ nie próbowałem dowiedzieć się, w jaki sposób mogę określić identyfikator klienta po stronie klienta, co należy zrobić dla każdego osobnego klienta, a alternatywą dla wielu komputerów Mac jest jedno rozwiązanie dla wszystkich urządzeń przenośnych w domu).

Ominąłem interfejs luci i dodałem bezpośrednio do /etc/dnsmasq.conf następującą linię:

dhcp-hostsfile = / etc / dnsmasq-dhcphosts.conf

i /etc/dnsmasq-dhcphosts.conf zawiera wiersze o następującym formacie:

mac1, mac2, ip

(Trzymam tę konfigurację w osobnym pliku, aby zapobiec zastąpieniu jej przez następną aktualizację).

Działa w porządku.

sleepyMonad
źródło
1

Twój cel: aby stała nazwa hosta laptopa zawsze wskazywała na (aktywny adres IP / interfejs) laptopa? Myślałem, że połączona usługa DNS-i-DHCP dnsmasq by to zrobiła, tzn. Kiedy klient wykonuje DHCPDISCOVER / DHCPREQUEST, zgłasza swoją nazwę hosta, a dnsmasq kojarzy nazwę hosta z dowolnym przypisanym adresem IP. Takie było moje doświadczenie, jednak muszę przyznać, że nie próbowałem łączyć się z jedną siecią we / wy, a następnie rozłączać się (bez wyraźnego wydania) i ponownie łączyć się z inną.

Zakładając nazwę hosta „laptop”, co się stanie, gdy zapytasz urządzenie OpenWRT o „laptop” po przełączeniu z jednego interfejsu na inny?

Norky
źródło
1

Dlaczego warto korzystać z DHCP?

Możesz ręcznie skonfigurować statyczny adres IP na obu interfejsach, a następnie użyć tego, który wolisz (pozostawiając drugi oczywiście odłączony).

Massimo
źródło
Ponieważ jest to najłatwiejsza metoda, jedna konfiguracja, która pasuje do wszystkich sieci, z którymi się łączę (przynajmniej tak miałem nadzieję).
sleepyMonad
0

Byłbym bardzo zaskoczony, gdyby twój przełącznik mógł to obsługiwać. Możesz mieć więcej szczęścia, dając obu interfejsom sieciowym ten sam adres MAC.

Mówiąc to, zdecydowanie zgadzam się z Holocryptic, tutaj są smoki.

happyhairydude
źródło
dziękuję za sugestię użycia tego samego MAC; chociaż nie jestem pewien, jak to zrobić. Być może jest to coś, co mogę skonfigurować z BIOS-u ...
sleepyMonad
Zwykle najłatwiej jest po prostu ustawić go w systemie operacyjnym, w systemie Windows jest to we właściwościach interfejsu sieciowego (ręcznie ustaw adres MAC).
happyhairydude
0

Nie, to niemożliwe. Ale większość kart sieciowych pozwala administracyjnie ustawić MAC i można ustawić obie karty sieciowe na tym samym MAC.

W większości * nix boxen zazwyczaj możesz to zrobić, a następnie skonfigurować interfejs LAGG przełączania awaryjnego na oba (z preferencją dla przewodowego), aby umożliwić hotplugowanie połączenia przewodowego bez rozłączania sesji TCP.

Chris S.
źródło