dnsmasq: mappage de 2 adresses MAC à la même adresse IP

17

Est-il possible de mapper 2 adresses MAC différentes à la même adresse IP?

Pour ma sauvegarde, je dois me reconnecter du serveur au portable et je voudrais avoir la même IP pour l'interface sans fil et câblée.

L'interface Web openwrt n'accepte pas plusieurs entrées DHCP avec la même adresse IP, mais il existe peut-être une solution?

Précision ajoutée le 23 mai :

J'aurais dû indiquer clairement qu'une seule des interfaces réseau du portable est connectée au réseau à un moment donné (les commutateurs ne doivent donc pas être confondus). Au départ, j'avais 2 adresses IP distinctes attribuées aux interfaces, avec le même nom DNS, mais cela ne fonctionnait pas très bien (délais d'attente lorsque j'ai obtenu la mauvaise IP). Pourtant, je veux utiliser le même nom pour les deux, car il est codé en dur dans mon script de sauvegarde.

Désolé pour la confusion.

sleepyMonad
la source
Je suis presque sûr que des manigances s'ensuivront si vous essayez cela.
Holocryptic
L'OS sur le client (et éventuellement le serveur) pourrait également être germaine ici
Norky

Réponses:

29

(Commentaire semi-opinionné aléatoire: il est rare de voir ce nombre élevé de réponses et de commentaires non constructifs et manifestement inexacts à une question)

Contrairement à d'autres ici, je prétends que votre demande est en fait assez élémentaire et a été prise en charge dans dnsmasq depuis la version 2.46 , IIRC. C'était la seule raison pour laquelle je suis passé de dd-wrt . Après environ un an de fonctionnement d'OpenWRT, je sais maintenant qu'il y a en fait beaucoup plus de raisons de changer, mais ce n'est pas la question.

J'utilise Backfire 10.04-rc4 :

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

Ma configuration:

$ 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'

Profitez de la transition transparente que cette configuration offre, toutes les sessions existantes restent actives si vous ne prenez pas trop de temps avec le commutateur.

lkraav
la source
4
Serait en faveur de cette réponse, car elle répond à ma question de manière très détaillée, mais je n'ai pas encore le karma.
sleepyMonad
Et des points brownie supplémentaires, car luci (l'interface Web) semble réellement prendre en charge ce format.
sleepyMonad
1
Hier soir, j'ai eu une situation où je ne savais pas que wlan0 était toujours connecté (la mise en scène brcm80211 pourrait être minuscule) en connectant eth0. dnsmasq n'a pas eu de problème particulier avec cela, il a juste attribué une nouvelle IP pour eth0. La mauvaise chose est que vous devez ensuite aller dans le routeur, arrêter dnsmasq et éditer / tuer /tmp/dhcp.leases, redémarrer dnsmasq pour que les choses reviennent au mode de fonctionnement souhaité.
lkraav
2
Pour distiller ce que je pense être la partie importante de cela, vous pouvez inclure plusieurs adresses MAC dans une seule entrée (dans ce fichier ou dans l'interface luci). Donc, au lieu de faire une ligne avec ab:cd:ef:01:02:03et une autre avec 04:05:06:07:08:09, faites simplement une entrée avec un seul espace séparant les deux, par exemple ab:cd:ef:01:02:03 04:05:06:07:08:09.
teeks99
6

J'ai fait un peu de recherche.

La première chose que j'ai apprise est qu'il est possible d'attribuer des baux DHCP en fonction de critères autres qu'une adresse MAC.

De la FAQ dhcp :

Qu'est-ce qu'un identifiant client?

Ce qui est appelé l'ID client aux fins du protocole DHCP est tout ce qui est utilisé par le protocole pour identifier l'ordinateur client. Par défaut, les implémentations DHCP utilisent généralement l'adresse MAC du client à cette fin, mais le protocole DHCP autorise d'autres options. Certaines implémentations DHCP ont une option de configuration pour spécifier l'ID client que vous souhaitez. Une alternative à l'adresse MAC est simplement une chaîne de caractères de votre choix. Dans tous les cas, pour que DHCP fonctionne, vous devez être certain qu'aucun autre client n'utilise l'ID client que vous choisissez et vous devez être sûr que le serveur DHCP l'acceptera.

Ensuite, bien qu'il ne soit apparemment pas pris en charge par l'interface Web de luci sur openWRT, dnsmasq lui-même prend en charge client_id et plusieurs adresses MAC (avec certaines mises en garde).

Depuis la page de manuel dnsmasq :

-G, --dhcp-host = [hwaddr] [, id: client_id | *] [, set: tag] [, ipaddr] [, hostname] [, lease_time] [, ignore] Spécifiez les paramètres par hôte pour le serveur DHCP . Cela permet à une machine avec une adresse matérielle particulière de toujours se voir attribuer le même nom d'hôte, la même adresse IP et la même durée de location. Un nom d'hôte spécifié comme celui-ci remplace tout celui fourni par le client DHCP sur la machine. Il est également possible de supprimer l'adresse matérielle et d'inclure le nom d'hôte, auquel cas l'adresse IP et les durées de location s'appliqueront à toute machine revendiquant ce nom. Par exemple --dhcp-host = 00: 20: e0: 3b: 13: af, wap, infinite indique à dnsmasq de donner à la machine l'adresse matérielle 00: 20: e0: 3b: 13: af le nom wap, et un infini Bail DHCP. --dhcp-host = lap, 192.168.0.199 indique à dnsmasq de toujours allouer à la machine l'adresse IP 192.168.0.199.

(...)

Il est autorisé d'utiliser des identifiants client plutôt que des adresses matérielles pour identifier les hôtes en préfixant avec 'id:'. Ainsi: --dhcp-host = id: 01: 02: 03: 04, ..... fait référence à l'hôte avec l'identifiant client 01: 02: 03: 04. Il est également autorisé de spécifier l'ID client sous forme de texte, comme ceci: --dhcp-host = id: clientidastext, .....

(...)

Dans un cas particulier, il est possible d'inclure plusieurs adresses matérielles. par exemple: --dhcp-host = 11: 22: 33: 44: 55: 66,12: 34: 56: 78: 90: 12,192.168.0.2 Cela permet d'associer une adresse IP à plusieurs adresses matérielles et donne la permission à dnsmasq pour abandonner un bail DHCP à l'une des adresses matérielles lorsqu'une autre demande un bail. Attention, c'est une chose dangereuse à faire, cela ne fonctionnera de manière fiable que si une seule des adresses matérielles est active à tout moment et il n'y a aucun moyen pour dnsmasq de l'imposer. Il est, par exemple, utile d'attribuer une adresse IP stable à un ordinateur portable doté d'interfaces filaires et sans fil.

J'ai opté pour la solution multi-mac (car je n'ai pas essayé de savoir comment je pouvais spécifier l'ID client côté client, ce qui doit être fait pour chaque client séparé, et l'alternative multi-mac est une solution pour tous les portables de la maison.)

J'ai contourné l'interface luci et ajouté directement à /etc/dnsmasq.conf la ligne suivante:

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

et /etc/dnsmasq-dhcphosts.conf contient des lignes du format suivant:

mac1, mac2, ip

(Je garde cette config dans un fichier séparé pour éviter de la remplacer par la prochaine mise à jour.)

Fonctionne bien.

sleepyMonad
la source
1

Votre objectif: que le nom d'hôte constant de l'ordinateur portable pointe toujours vers (l'adresse IP / l'interface active de l'ordinateur portable)? J'aurais pensé que le service DNS et DHCP combiné de dnsmasq ferait cela, c'est-à-dire lorsqu'un client effectue un DHCPDISCOVER / DHCPREQUEST il rapporte son nom d'hôte, et dnsmasq associe le nom d'hôte à l'adresse IP attribuée. C'est mon expérience, mais je dois admettre que je n'ai pas essayé de me connecter avec un réseau i / f, puis de me déconnecter (sans faire de version explicite) et de me reconnecter avec un autre.

En supposant un nom d'hôte de "portable", que se passe-t-il lorsque vous interrogez le périphérique OpenWRT pour "portable", après être passé d'une interface à une autre?

Norky
la source
1

Pourquoi utiliser DHCP?

Vous pouvez configurer manuellement une adresse IP statique sur les deux interfaces, puis utiliser celle que vous préférez (tout en laissant l'autre déconnectée, bien sûr).

Massimo
la source
Eh bien, car c'est la méthode la plus simple, celle qui convient à tous les réseaux auxquels je me connecte (ou du moins je l'espérais).
sleepyMonad
0

Je serais très surpris si votre commutateur pouvait supporter cela. Vous pourriez avoir plus de chance de donner aux deux interfaces réseau la même adresse MAC.

Cela dit, je suis définitivement d'accord avec Holocryptic, voici des dragons.

happyhairydude
la source
merci d'avoir suggéré d'utiliser le même MAC; même si je ne sais pas comment faire cela. C'est peut-être quelque chose que je peux configurer à partir du BIOS ...
sleepyMonad
Il est normalement plus facile de simplement le définir dans le système d'exploitation, sous Windows, il est sous les propriétés de l'interface réseau (définir l'adresse MAC manuellement).
happyhairydude
0

Non, ce n'est pas possible. Mais la plupart des cartes réseau vous permettent de définir le MAC de manière administrative, et vous pouvez définir les deux cartes réseau sur le même MAC.

Sur la plupart des box * nix, vous pouvez généralement le faire, puis configurer une interface LAGG de basculement sur les deux (avec une préférence pour le filaire) pour vous permettre de connecter à chaud la connexion filaire sans déconnecter les sessions TCP.

Chris S
la source