De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Tiago Cruz
Data de Publicação: 15 de Novembro de 2005
VPN significa Virtual Private Network, usada amplamente para fazer um túnel seguro entre duas redes distantes, separadas pela internet. Os dados são criptografados antes de entrar no túnel e apenas a outra ponta conhece a chave para descriptografar o mesmo, criando um canal de comunicação relativamente seguro.
Existem basicamente duas formas de se implementar uma VPN:
Quando ambas as pontas são servidores dedicados (geralmente os gateways de ambas as redes) e usam o protocolo IPSec para comunicarem entre si. Um bom exemplo em FreeBSD pode ser lido no Handbook do FreeBSD e para Linux, tem um artigo bem legal aqui.
Se você ler o handbook, verá que como o comando gifconfig não existe mais na versão 5.x do FreeBSD, é usado o comando ifconfig no lugar. Mas verá também que não existe nenhum exemplo prático de como usa-lo nas versões atuais. Caso este seja seu problema, recomendo que crie um script em /usr/local/etc/rc.d/ neste formato:
#/bin/sh # Script de inicialização da VPN Out/2005 # Irado furioso com tudo <irado at globecom.net> # Tiago Cruz < tiagocruz at linuxrapido.org> ip_DE_LAH="200.000.000.001" ip_DAQUI="200.000.000.002" gateway_DE_LAH="192.168.0.1" gateway_DAQUI="192.168.2.1" rede_DE_LAH="192.168.0.0" rede_DAQUI="192.168.2.0" mascara="255.255.255.0" case ${1} in start) echo "Inicializando VPN..." /sbin/ifconfig gif0 create /sbin/ifconfig gif0 tunnel ${ip_DAQUI} ${ip_DE_LAH} /sbin/ifconfig gif0 inet ${gateway_DAQUI} ${gateway_DE_LAH} netmask ${mascara} /sbin/route add -net ${rede_DE_LAH} -netmask ${mascara} ${gateway_DE_LAH} /usr/sbin/setkey -f /etc/ipsec.conf /usr/local/sbin/racoon pfctl -f /etc/pf.conf ;; stop) echo "Terminando VPN..." /sbin/ifconfig gif0 destroy ;; *) echo "Use 'vpn start' ou 'vpn stop'!" ;; esac exit 0
Outra coisa legal não documentada no handbook: Você pode usar o comando setkey -a -D antes do host A (192.168.0.1) começar a pingar o host B (192.168.2.1) para você ver como o racoon cria as chaves usadas no túnel criptografado. Assim você tem certeza que a comunicação está sendo segura!
Uma solução mais simples e flexível pode ser conseguida utilizando o OpenVPN, e um excelente tutorial em português pode ser lido aqui. Segundo o amigo Augusto Bott, "uma das vantagens em potencial de usar o OpenVPN é não depender do protocolo GRE (General Routing Encapsulation, protocolo IP tipo 47). Alguns gateways que fazem nat (como muitos modems ADSL) não roteiam propriamente o GRE, impossibilitando a comunicação."
Quando uma estação, como sua máquina de casa ou o notebook do seu chefe acessa a rede empresarial de um lugar qualquer da internet. Neste caso usamos o protocolo pptp que é nativo do Windows, ou seja, não é necessário baixar nenhum software adicional e a configuração é bem simples, bem semelhante ao processo de criar uma conexão dial-up, como você pode ver aqui.
Neste artigo abordarei uma implementação do PPTP integrada com os usuário de um PDC Windows 2003, usando o Radius como centralizador de autenticação. Assim, temos uma integração perfeita com o Active Directory e um usuário e senha a menos para decorar ao acessar a rede da empresa.
Dentre as várias opções de implementação existentes, eu testei:
O PopTop é um servidor pptp Open Source para Linux, portado para alguns BSD's, relativamente bem documentado (principalmente para usuários de Linux) mas bem escasso para o BSD.
A configuração é feita nos arquivos /etc/ppp/* e /usr/local/etc/radiusclient-ng/*. Seu script de incialização fica em /usr/local/etc/rc.d/pptpd.sh e ele usa a porta 1723 para comunicação com os clientes, portanto, ela deve estar aberta em seu firewall!
Consegui fazer a VPN funcionar depois de muito sacrifício e buscas na lista oficial do projeto, mas a parei no último passo: A autenticação em um servidor radius em uma máquina na rede, já integrada com o AD do Windows.
Se você precisar de usuários e senhas em um arquivo (no caso o /etc/ppp/ppp.secret) você pode optar por esta solução.
O MDP (Multi-link PPP daemon) é um daemon PPP para FreeBSD e me pareceu funcionar melhor do que o poptop, além se ser mais simples de configurar por ter menos arquivos de configuração e o melhor: Funciona com pptp e radius!
A configuração dele não é muito complicada, toda documentação que você possa precisar está em /usr/local/share/doc/mpd embora seja perfeitamente possível configurar o /usr/local/etc/mpd/mpd.conf somente lendo os comentários do mesmo. Um artigo bem legal em português você encontra aqui, embora meio desatualizado (aborda a versão 4.x do FreeBSD, semana passada foi lançada a 6.0) mas ainda ajuda bastante e vale a pena a leitura!
Dentro do mpd.conf, você pode seguramente apagar as partes desnecessárias e deixar o arquivo parecido com isso:
default: load pptp pptp: new -i ng0 pptp pptp set iface disable on-demand set iface enable proxy-arp set iface idle 1800 set iface enable tcpmssfix set bundle enable multilink # Aqui carregamos a seção que habilita o RADIUS server load radius set link yes acfcomp protocomp set link no pap chap set link enable chap set link keep-alive 10 60 set link mtu 1460 set ipcp yes vjcomp # Range de IPs para as estações, DNS e etc set ipcp ranges 192.168.1.1/32 192.168.1.50/32 set ipcp dns 192.168.0.19 set ipcp nbns 192.168.0.19 set bundle enable compression set ccp yes mppc set ccp yes mpp-e40 set ccp yes mpp-e128 set ccp yes mpp-stateless radius: set radius retries 3 set radius timeout 3 # IP e senha do servidor RADIUS set radius server 192.168.0.119 senha_super_secreta set radius me 192.168.0.119 set radius acct-update 300 set ipcp enable radius-ip set bundle enable radius-auth radius-fallback set bundle enable radius-acct set iface enable radius-idle radius-session radius-mtu radius-route set bundle enable compression set ccp yes mppc set ccp enable radius
Se você usar o protocolo RADIUS como centralizador de autenticações (o Windows usa o IAS - Internet Authentication Service) ou você mesmo compilar o OpenRadius, você não irá fazer a autenticação em um arquivo texto mas caso queira faze-lo use o arquivo mdp.secret
Use também o arquivo mpd.links para informar o IP externo de ser servidor, onde ele ficará escutando na porta 1723 também.
pptp: set link type pptp set pptp self 200.200.200.200 set pptp enable incoming set pptp disable originate
Inicie o mpd pelo script em /usr/local/etc/rc.d.mpd (antes, habilite-o no /etc/rc.conf com mpd_enable="YES"). Para debuga-lo, insira as linhas abaixo no /etc/syslogd.conf e reinicie o mesmo:
!mpd *.* /var/log/mpd.log
Peça ao seu administrador da rede windows para faze-lo (se não for você mesmo :) da seguinte forma no W2k3:
Pegue aquele notebook com Windão XP e faça:
Se algo der errado, tenha certeza que:
Ao pessoal que perde seu tempo documentando procedimentos, ao pessoal da lista FUG-BR e ao Aurélio Marinho por escrever o txt2tags, usado nesta documentação e em várias outras que escrevi.
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.0 Brazil License
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários