Estou tentando configurar um servidor proxy Freeradius que encaminha todas as solicitações para outro servidor Freeradius.
Para referência veja a imagem a seguir:
A razão para esta configuração é que eu quero que os usuários se conectem à LAN local via VPN, mas o site local não está acessível devido à implementação de NAT no ISP.
No entanto, sou capaz de fazer uma conexão VPN site2site da LAN local para o servidor VPN, portanto, quero que os usuários possam fazer uma conexão VPN com a rede local através do servidor VPN público, desde que sejam um usuário válido na rede local .
Eu tenho um servidor Freeradius em execução na LAN local que valida os usuários em um banco de dados - e essa parte está funcionando bem.
Configuração do lado do servidor VPN
Pelo que entendi a única coisa que preciso modificar no servidor é o arquivo proxy.conf
.
Supondo que os nomes de usuário que fazem login na VPN estejam no formulário [email protected]
, eu só precisaria adicionar a seguinte entrada a proxy.conf
:
realm example.com {
type = radius
secret = VeryS3cretPassw0rd
authhost = local-radius.example.com:1812
accthost = local-radius.example.com:1813
nostrip
}
A nostrip
entrada garante que a solicitação com proxy não remova o @
-postfix do nome de usuário.
Eu também precisaria adicionar o seguinte a /etc/hosts
:
# VPN Address of local-radius.example.com
192.168.100.2 local-radius.example.com
Configuração do lado do servidor radius local
No servidor radius local eu preciso atualizar client.conf
para que quaisquer consultas ao servidor radius local e originadas do endereço IP da VPN sejam permitidas. Como por exemplo esta entrada:
client vpn-net {
# Allow requests originating from VPN subnet.
ipaddr = 192.168.100.0/24
secret = VeryS3cretPassw0rd
}
A execução do seguinte comando no servidor VPN funciona conforme o esperado:
radtest -t mschap [email protected] SecretPassword local-radius.example.com:1812 0 VeryS3cretPassw0rd
Recebo a seguinte resposta:
Sent Access-Request Id 108 from 0.0.0.0:47466 to 192.168.100.2:1812 length 148
User-Name = "[email protected]"
MS-CHAP-Password = "SecretPassword "
NAS-IP-Address = 127.0.1.1
NAS-Port = 0
Message-Authenticator = 0x00
Cleartext-Password = "SecretPassword"
MS-CHAP-Challenge = ....
MS-CHAP-Response = ...
Received Access-Accept Id 108 from 192.168.100.2:1812 to 192.168.100.1:47466 length 84
MS-CHAP-MPPE-Keys = ...
MS-MPPE-Encryption-Policy = Encryption-Required
MS-MPPE-Encryption-Types = 4
No entanto, a execução do seguinte comando no servidor VPN falha:
radtest -t mschap [email protected] SecretPassword localhost:18120 0 testing123
A saída do comando é:
Sent Access-Request Id 104 from 0.0.0.0:39558 to 127.0.0.1:18120 length 148
User-Name = "[email protected]"
MS-CHAP-Password = "SecretPassword"
NAS-IP-Address = 127.0.1.1
NAS-Port = 0
Message-Authenticator = 0x00
Cleartext-Password = "SecretPassword"
MS-CHAP-Challenge = ...
MS-CHAP-Response = ...
Received Access-Reject Id 104 from 127.0.0.1:18120 to 127.0.0.1:39558 length 20
(0) -: Expected Access-Accept got Access-Reject
A execução do comando freeradius -X
no servidor VPN fornece, entre outros, esta saída:
(0) mschap: Found MS-CHAP attributes. Setting 'Auth-Type = mschap'
(0) [mschap] = ok
(0) suffix: Checking for suffix after "@"
(0) suffix: Looking up realm "example.com" for User-Name = "[email protected]"
(0) suffix: Found realm "example.com"
(0) suffix: Adding Realm = "example.com"
(0) suffix: Proxying request from user [email protected] to realm example.com
(0) suffix: Preparing to proxy authentication request to realm "example.com"
(0) [suffix] = updated
(0) ntdomain: Request already has destination realm set. Ignoring
(0) [ntdomain] = noop
(0) eap: No EAP-Message, not doing EAP
(0) [eap] = noop
(0) [files] = noop
(0) [expiration] = noop
(0) [logintime] = noop
(0) [pap] = noop
(0) } # authorize = updated
(0) There was no response configured: rejecting request
Monitorar o freeradius na rede local indica que o servidor nunca foi chamado, do servidor vpn, então o que estou perdendo?
Não tenho certeza do que aconteceu, mas depois de fazer uma reinstalação completa do Freeradius no servidor, não houve problemas com o proxy da solicitação.
Para simplificar, você pode simplesmente apontar o servidor proxy para o endereço IP da VPN do servidor radius local e é basicamente isso.
Supondo que você tenha uma instalação limpa do Freeradius, você só precisa modificar
proxy.conf
com a seguinte configuração:Além disso, ao testar o login do usuário com
radtest
: Não teste com relação ao testelocalhost:18120
, pois você está apenas testando o usuário local na VPN, pois ele é mapeado noinner-tunnel
servidor virtual.Em vez disso, você deve testar em relação à
localhost:1812
medida que é mapeado em relação aodefault
servidor virtual.O teste no servidor proxy me deu, entre outros, a seguinte saída de
freeradius -x
Considerações finais importantes
Parece que a maneira como o proxy funciona está mudando a cada revisão importante do Freeradius.
A sintaxe que usei é compatível com a versão 2 do Freeradius, mas considerada obsoleta na versão 3. Aqui, a maneira recomendada é apontar os domínios contra os
home_server_pools
quais, por sua vez, aponta para um pool de um ou mais arquivoshome_servers
.Embora obsoleto - ainda funciona com a versão 3. :-)
No entanto: Na versão 4 do Freeradius tudo mudou novamente ao configurar um servidor proxy e, como tal, precisamos aprender uma nova maneira de configurar o servidor.
Para maiores informações. Por favor, acesse este link:
https://wiki.freeradius.org/upgrading/version4/proxy