Como posso informar clientes Mac OS e iOS de rotas VPN?

0

Na minha rede doméstica (10.0.1.0/24) tenho meus Macs e dispositivos iOS (os outros não importam). Os clientes de rede local ganham acesso IPv4 e IPv6 (nativo) por meio de um Airport Extreme (AEBS) conectado a um modem a cabo na Comcast (não tenho escolha melhor). Eu preciso de uma VPN para acessar alguns recursos de trabalho $ e seria conveniente se a VPN "apenas funcionasse" na tela que tenho à mão. Para evitar o gerenciamento de um cliente VPN em cada dispositivo, executo o OpenVPN no meu servidor (10.0.1.252).

Na conexão com a VPN, o servidor obtém as rotas estáticas típicas adicionadas e eu habilitei o encaminhamento e o NAT para que o tráfego de $ private_lan -> <vpn_netblocks>seja corretamente roteado pelo NAT para o túnel da VPN (tun0). Meu recursor de DNS é executado nesse servidor e sabe encaminhar determinadas solicitações de DNS para os servidores DNS internos. Tudo funciona.

O último bit é fazer com que os clientes da LAN estejam cientes da VPN. Sua rota padrão é o AEBS (10.0.1.1). Isso é ideal porque o AEBS e o modem a cabo têm sua própria bateria, portanto a rede permanece várias horas após a falta de energia. Para que os clientes de rede local obtenham acesso VPN, eles precisam aprender sobre as rotas mais específicas disponíveis no servidor. No Mac OS, a adição manual de rotas estáticas como esta funciona:

route add 10.7.0.0/16 10.0.1.252

A questão é como informar automaticamente os dispositivos Mac e iOS que essas rotas estão disponíveis. Eu não posso adicionar rotas estáticas para o AEBS (eu ficaria feliz em ser provado errado!). Alterar a rota IPv4 padrão para apontar para o servidor é meu último recurso.

Eu tentei adicionar as rotas para dhcpd.conf como rotas estáticas (código de opção dhcp 121), conforme documentado no RFC 3442 . Aqui estão as partes relevantes do meu dhcpd.conf:

# options for static routes
option rfc3442-classless-static-routes code 121 = array of integer 8;
option ms-classless-static-routes code 249 = array of integer 8;

subnet 10.0.1.0 netmask 255.255.255.0 {
      option rfc3442-classless-static-routes 16, 10,7, 10,0,1,252;
      option ms-classless-static-routes      16, 10,7, 10,0,1,252;
      # needed b/c this overrides option routers
      option rfc3442-classless-static-routes  0, 10,0,1,1;
      option ms-classless-static-routes       0, 10,0,1,1;
}

As opções estão sendo servidos por dhcpd mas eles são ignorados pelo Mac OS X . Existe:

  1. Alguma outra opção DHCP que funcione?
  2. Se eu configurar o OSPF ou o RIP, ele "funcionará" apenas para dispositivos Mac e iOS?
  3. Algo como o Neighbor Discovery Protocol for IPv4?

Ponteiros para documentação que é conhecida por trabalhar é muito apreciada.

Atualizar

  1. Adicionado o dhcpd.conf mostrando minha configuração
  2. Adicionado link para a Apple Discussão citando nenhum suporte para RFC 3442
Matt Simerson
fonte
Heck, estou impressionado que você chegou tão longe! Boa solução e eu vou seguir isso para ver onde vai.
SaxDaddy

Respostas:

0

Você não pode simplesmente definir o gateway padrão de seus clientes de rede local para apontar para o servidor OpenVPN? Isso já é um roteador, que deve conhecer todas as rotas corretas.

Eu suponho que está em sua lan para que os clientes locais possam alcançá-lo. Ele saberá encaminhar coisas para a rede OpenVPN. Ele encaminhará o material para seu roteador de borda ou enviará um redirecionamento de ICMP para o sistema que estiver tentando se comunicar com a Internet.

Zoredache
fonte
E cito-me: "Alterar a rota IPv4 padrão para apontar para o servidor é o meu último recurso."
Matt Simerson
0

Eu não sou um especialista em OS X, mas você pode tentar configurar a opção 249 do DHCP (ms-classless-static-routes) desta maneira:

option ms-classless-static-routes 24, 192, 168, 16, 192, 168, 6, 1; 
24 - mask (number of bits)
192, 168, 16 - network address
192, 168, 6, 1 - gateway

Há também a opção DHCP 33 (rota única): - https://ercpe.de/blog/advanced-dhcp-options-pushing-static-routes-to-clients

Rota única

Empurrar uma única rota é muito fácil. O valor de configuração consiste em dois pares de endereços IP em hexadecimal. O primeiro endereço é o host de destino, o segundo é o roteador.

Exemplo:

Destination: 192.168.123.234 (Hex: C0:A8:7B:EA)
Router: 10.34.72.42 (Hex: 0A:22:48:2A)

O valor é: C0: A8: 7B: EA: 0A: 22: 48: 2A

Nota: Esta é a configuração do pfsense, para usá-lo no dhcpd você precisa converter hexadecimal em decimal.

É possível que você tenha cometido algum erro, pode nos mostrar a configuração do dhcpd?

Muito boa descrição está aqui: https://ercpe.de/blog/pushing-static-routes-with-isc-dhcp-server

Empurrar rotas estáticas para seus clientes dhcp com o pfsense foi complicado porque você precisa especificar as informações da rede e do roteador como valores hexadecimais brutos. Realizar a mesma tarefa com o servidor ISC DHCP é mais fácil. Primeiro de tudo, temos que declarar a opção dhcp no escopo global para o servidor:

option rfc3442-classless-static-routes code 121 = array of integer 8;
option ms-classless-static-routes code 249 = array of integer 8;

A segunda linha é para clientes Windows, porque o MS decidiu usar a opção 249 do dhcp em vez dos 121 existentes. A próxima etapa é declarar essas opções em nossa definição de sub-rede:

 subnet 192.168.1.0 netmask 255.255.255.0 {
     ... other options ....
     option rfc3442-classless-static-routes 24, 192, 168, 123, 10, 10, 10, 1, 0, 192, 168, 1, 2;
     option ms-classless-static-routes 24, 192, 168, 123, 10, 10, 10, 1, 0, 192, 168, 1, ;
 }

O formato das opções é:

<netmask>, <network-byte1>, <network-byte2>, <network-byte3>, <router-byte1>, <router-byte2>, <router-byte3>

onde bytes com o valor 0 são omitidos. Novamente, você deve incluir a rota padrão nas opções porque os clientes dhcp têm permissão para ignorar a opção opção xxxx dos roteadores. Assim, a opção de linha rfc3442-classless-static-routes 24, 192, 168, 123, 10, 10, 10, 1, 0, 192, 168, 1, 2 especifica as seguintes informações de roteamento:

24, 192, 168, 123, 10, 10, 10, 1: 192.168.123.0/24 via 10.10.10.1 0,
192, 168, 1, 2: 0.0.0.0 via 192.168.1.2 (default route)

Certifique-se de ler os comentários também.

Há também outro thread @ serverfault que pode ser útil:

https://serverfault.com/questions/248821/does-the-os-x-dhcp-client-support-classless-static-routes-rfc3442

Uma outra coisa: você está ciente da opção push do OpenVPN? Você pode enviar rotas diretamente através do servidor OpenVPN, adicionando uma opção como esta:

push "route 192.168.16.0 255.255.255.0 192.168.6.1" 

O que significa passar rota estática para o cliente para a rede 192.168.16.0 e mascarar 255.255.255.0 via 192.168.6.1.

Michal Sokolowski
fonte
Obrigado Michal. Ele realmente não responde à pergunta (ainda não tenho como enviar rotas para meus dispositivos Mac e iOS), mas inclui algumas referências úteis. Quando obtiver reputação suficiente, vou votar. FTR, também incluí e testei a opção 249 do DHCP, mas isso também não funcionou. Eu atualizarei a questão para mostrar meu dhcpd.conf.
Matt Simerson
Você já tentou a opção DHCP 33 também?
Michal Sokolowski
A opção DHCP 33 adiciona uma rota para um único endereço IP. Em um caso como este, onde tenho um punhado de blocos / 16 (65.534 addrs cada) para encaminhar, isso realmente não seria útil. Parece que quagga adiciona vários daemons de roteamento para Mac OS (disponível em MacPorts) para que pudesse funcionar para o Mac OS X.
Matt Simerson
Sim, estou ciente da opção push do OpenVPN. Nesse caso, meu servidor é o cliente OpenVPN e é o destinatário dessas rotas enviadas. É assim: "Na conexão com a VPN, o servidor obtém as rotas estáticas típicas adicionadas".
Matt Simerson
Ok, agora eu entendi. :) Você pensou em adicionar rota (s) estática (s) no seu roteador principal apontando para a sua rede VPN através do seu servidor?
Michal Sokolowski
0

Parece que a resposta correta para a pergunta é: "você não pode".

O Mac OS X (e o iOS) não suportam o RFC 3442 e, embora o Mac OS X 10.10 ainda inclua a página man do roteado, o binário não está mais presente.

Existem soluções alternativas.

  1. Para informar aos clientes Mac OS X das rotas mais específicas, é possível executar um daemon de roteamento no Mac OS X por meio de um pacote de software chamado quagga que inclui ripd e ospfd, que podem aprender as rotas OpenVPN dos daemons equivalentes no servidor ( encaminhado, quagga, zebra). Isso é muito para evitar o # 2.

  2. Aponte a rota IPv4 padrão no servidor (em vez do roteador) e use uma concessão curta de DHCP. Quando o servidor não está disponível, a concessão do DHCP expira rapidamente e os dispositivos selecionam uma nova concessão do AEBS com o próprio gateway padrão.

(Sim, eu tenho dois servidores DHCP na minha LAN, fazendo isso há mais de uma década, o dhcpd no servidor ganha, exceto quando está inativo, o que quer dizer, funciona perfeitamente).

Matt Simerson
fonte