dnsmasq: mapeando 2 endereços MAC para o mesmo endereço IP

17

É possível mapear 2 endereços MAC diferentes para o mesmo endereço IP?

Para meu backup, preciso conectar-me novamente do servidor ao portátil e gostaria de ter o mesmo IP para a interface sem fio e com fio.

A interface da web openwrt não aceita várias entradas dhcp com o mesmo endereço IP, mas talvez haja uma solução alternativa?

Os esclarecimentos adicionados em 23 de maio :

Eu deveria ter deixado claro que apenas uma das interfaces de rede do portátil está conectada à rede a qualquer momento (portanto, os switches não devem ficar confusos). Inicialmente, eu tinha 2 endereços IP distintos atribuídos às interfaces, com o mesmo nome DNS, mas isso não funcionou muito bem (tempos limite quando obtive o IP errado). No entanto, quero usar o mesmo nome para ambos, pois está codificado no meu script de backup.

Desculpe pela confusão.

sleepyMonad
fonte
Tenho certeza de que ocorrerão travessuras se você tentar isso.
Holocryptic
O sistema operacional no cliente (e possivelmente o servidor) também pode ser germana aqui
Norky

Respostas:

29

(comentário aleatório semi-opinativo: é raro ver esse alto número de respostas e comentários improdutivos e simples e não construtivos a uma pergunta)

Em contraste com outros aqui, afirmo que sua solicitação é realmente bastante elementar e foi suportada no dnsmasq desde a versão 2.46 , IIRC. Esta foi a única razão pela qual mudei de dd-wrt . Após cerca de um ano executando o OpenWRT, agora eu sei que existem muitas outras razões para mudar, mas isso não vem ao caso.

Estou executando o Backfire 10.04-rc4 :

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

Minha configuração:

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

Aproveite a transição perfeita que essa configuração fornece, todas as sessões existentes permanecem ativas se você não demorar muito com o switch.

lkraav
fonte
4
Gostaria de votar nesta resposta, porque ela responde à minha pergunta de uma maneira muito detalhada, mas ainda não possui o carma.
sleepyMonad
E pontos extras de brownie, pois o luci (a interface da web) parece realmente suportar esse formato.
sleepyMonad
1
Ontem à noite tive uma situação em que eu não sabia que o wlan0 ainda estava conectado (o teste brcm80211 pode estar um pouco b0rked) ao conectar o eth0. O dnsmasq não teve um problema específico com isso, apenas atribuiu um novo IP para eth0. O ruim é que você precisa entrar no roteador, parar o dnsmasq e editar / matar /tmp/dhcp.leases, reiniciar o dnsmasq para que as coisas retornem ao modo operacional desejado.
Lllavav 25/05
2
Para destilar o que eu acho que é a parte importante disso, você pode incluir vários endereços MAC em uma única entrada (neste arquivo ou na interface luci). Então, em vez de fazer uma linha com ab:cd:ef:01:02:03e outra com 04:05:06:07:08:09, basta fazer uma entrada com um único espaço que separa as duas, por exemplo ab:cd:ef:01:02:03 04:05:06:07:08:09.
teeks99
6

Eu fiz um pouco de pesquisa.

A primeira coisa que aprendi é que é possível atribuir concessões DHCP com base em critérios diferentes de um endereço MAC.

No FAQ do dhcp :

O que é um ID de cliente?

O que é denominado ID do Cliente para os fins do protocolo DHCP é o que for usado pelo protocolo para identificar o computador cliente. Por padrão, as implementações de DHCP normalmente empregam o endereço MAC do cliente para esse fim, mas o protocolo DHCP permite outras opções. Algumas implementações de DHCP têm uma opção de configuração para especificar o ID do cliente que você deseja. Uma alternativa ao endereço MAC é simplesmente uma sequência de caracteres de sua escolha. Em qualquer caso, para que o DHCP funcione, você deve ter certeza de que nenhum outro cliente está usando o ID do cliente que você escolher e deve ter certeza de que o servidor DHCP o aceitará.

Então, embora aparentemente não seja suportado pela interface da web luci no openWRT, o próprio dnsmasq suporta client_id e vários endereços MAC (com alguns cuidados).

Na página do manual dnsmasq :

-G, --dhcp-host = [hwaddr] [, id: client_id | *] [, defina: tag] [, ipaddr] [, hostname] [, lease_time] [, ignore] Especifique por parâmetros de host para o servidor DHCP . Isso permite que uma máquina com um endereço de hardware específico seja sempre alocada com o mesmo nome de host, endereço IP e tempo de concessão. Um nome de host especificado como esse substitui qualquer fornecido pelo cliente DHCP na máquina. Também é permitido omitir o endereço de hardware e incluir o nome do host; nesse caso, o endereço IP e os tempos de concessão serão aplicados a qualquer máquina que reivindique esse nome. Por exemplo --dhcp-host = 00: 20: e0: 3b: 13: af, wap, infinito, diz ao dnsmasq para fornecer à máquina o endereço de hardware 00: 20: e0: 3b: 13: af, o nome wap e um infinito Concessão de DHCP. --dhcp-host = lap, 192.168.0.199 diz ao dnsmasq para sempre alocar a máquina no endereço IP 192.168.0.199.

(...)

É permitido usar identificadores de clientes em vez de endereços de hardware para identificar hosts, prefixando com 'id:'. Assim: --dhcp-host = id: 01: 02: 03: 04, ..... refere-se ao host com identificador de cliente 01: 02: 03: 04. Também é permitido especificar o ID do cliente como texto, assim: --dhcp-host = id: clientidastext, .....

(...)

Como um caso especial, é possível incluir mais de um endereço de hardware. por exemplo: --dhcp-host = 11: 22: 33: 44: 55: 66,12: 34: 56: 78: 90: 12,192.168.0.2 Isso permite que um endereço IP seja associado a vários endereços de hardware e concede permissão ao dnsmasq abandonar uma concessão de DHCP para um dos endereços de hardware quando outro solicitar uma concessão. Lembre-se de que isso é uma coisa perigosa, pois ele funcionará apenas de maneira confiável se apenas um dos endereços de hardware estiver ativo a qualquer momento e se o dnsmasq não conseguir aplicar isso. É, por exemplo, útil alocar um endereço IP estável para um laptop com interfaces com e sem fio.

Optei pela solução multi-mac (porque não tentei descobrir como poderia especificar o ID do cliente no lado do cliente, o que deve ser feito para cada cliente separado, e a alternativa multi-mac é uma solução para todos os portáteis da casa.)

Eu contornei a interface luci e adicionei diretamente ao /etc/dnsmasq.conf a seguinte linha:

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

e /etc/dnsmasq-dhcphosts.conf contém linhas com o seguinte formato:

mac1, mac2, ip

(Eu mantenho essa configuração em um arquivo separado para evitar que ela seja substituída pela próxima atualização.)

Funciona bem.

sleepyMonad
fonte
1

Seu objetivo: ter sempre o nome do host do laptop sempre apontado para o (endereço IP ativo / interface do) laptop? Eu pensaria que o serviço DNS e DHCP combinado do dnsmasq faria isso, ou seja, quando um cliente faz um DHCPDISCOVER / DHCPREQUEST, ele relata o nome do host e o dnsmasq associa o nome do host ao endereço IP atribuído. Essa tem sido minha experiência, no entanto, devo admitir que não tentei conectar-me a uma rede i / f, desconectar (sem fazer uma liberação explícita) e conectar-me novamente a outra.

Assumindo um nome de host de "laptop", o que acontece quando você consulta o dispositivo OpenWRT para "laptop", depois de alternar de uma interface para outra?

Norky
fonte
1

Por que usar DHCP?

Você pode configurar manualmente um endereço IP estático nas duas interfaces e depois usar o que preferir (deixando o outro desconectado, é claro).

Massimo
fonte
Bem, porque esse é o método mais fácil, a única configuração que se encaixa em todas as redes às quais eu me conecto (ou pelo menos eu esperava).
sleepyMonad
0

Eu ficaria muito surpreso se o seu switch puder suportar isso. Você pode ter mais sorte dando às duas interfaces de rede o mesmo endereço MAC.

Dizendo isso, eu definitivamente concordo com Holocryptic, aqui estão dragões.

happyhairydude
fonte
obrigado por sugerir o uso do mesmo MAC; embora eu não tenha certeza de como fazer isso. Talvez seja algo que eu possa configurar a partir da BIOS ...
sleepyMonad
Normalmente, é mais fácil configurá-lo no sistema operacional; no Windows, ele está nas propriedades da interface de rede (defina manualmente o endereço MAC).
23911 happyhairydude
0

Não, não é possível. Mas a maioria das NICs permite que você defina administrativamente o MAC de forma administrativa, e você pode definir as duas NICs no mesmo MAC.

Na maioria dos * nix boxen, você geralmente pode fazer isso e configurar uma interface LAGG de failover para ambos (com preferência pelo cabeamento) para permitir que você conecte a conexão com fio sem desconectar as sessões TCP.

Chris S
fonte