VPN Site-to-Site do Azure com um roteador baseado em Linux para conectar as portas VPN a um servidor RRAS, mantendo o NAT para outro tráfego

3

Estou tentando instalar e executar uma VPN Site-to-Site do Azure usando o RRAS, mas preciso de ajuda para configurar as iptables do meu roteador para vincular as portas e os protocolos VPN ao servidor RRAS sem usar NAT e ainda permitir que o NAT seja usado todo o outro tráfego.

Eu consegui configurar o Azure e a VM corretamente, e posso colocar a conexão em funcionamento com o fluxo de dados no link (e mostrado no portal do Azure como conectado a dados nos dois sentidos). No entanto, a conexão configurada não é utilizável, não consigo fazer ping ou parecer fazer qualquer forma de conexão entre as VMs do Azure e minhas máquinas locais.

Acredito que seja devido à VPN Site-to-Site do Azure, que exige que o gateway VPN local seja conectado diretamente à Internet sem passar por um firewall NAT (que tenho que usar como banda larga doméstica, portanto, só tenho um IP ) Assim, enquanto uma conexão pode ser estabelecida, o NAT no meu roteador altera os pacotes de uma maneira que significa que eles não podem ser roteados corretamente quando chegarem ao servidor RRAS.

Eu tentei soluções VPN Site-to-Site alternativas (OpenVPN, SoftEther, RRAS) mas nenhuma funciona corretamente, exibindo o mesmo problema pelo qual a conexão VPN de hospedagem de duas VMs é capaz de se conectar a tudo e aos meus servidores de rede domésticos pode ser roteado corretamente para se conectar ao lado do Azure, mas acredito que devido a restrições nas VMs do Azure (apenas um único adaptador de rede e nenhuma capacidade de habilitar o modo promíscuo) ou a própria rede virtual do Azure significa que nenhuma outra VM do Azure pode se conectar para a minha rede doméstica, apesar de adicionar em rotas estáticas para ir através do servidor VPN ou adicioná-lo como um gateway adicional.

Estou usando um roteador Asus RT-AC68U executando a compilação mais recente do Merlin, portanto espero poder usar a VPN site a site do Azure alterando as regras e & a configuração de rede da seguinte maneira:

  • Deixando a configuração existente do iptables praticamente intocada, o NAT pode continuar a ser usado para permitir que meus outros servidores locais e estações de trabalho continuem se conectando à internet, ou tenham portas encaminhadas para eles.
  • A VM do RRAS na minha rede doméstica tem dois adaptadores de rede, um com o IP privado, atualmente o outro tem um IP privado, mas isso seria alterado para ser meu IP público de acordo com as recomendações da Microsoft.
  • Por fim, e a parte que não sei como realizar é que as portas e protocolos específicos da VPN (UDP 500, UDP 4500, UDP 1701 e ESP (protocolo # 50)) sejam excluídos do NAT e sejam encaminhados diretamente para o adaptador de rede na VM configurada agora é configurado com o IP público da minha rede doméstica.

A rede parece com isso atualmente:

VMs do Azure - 192.168.1.0/25, gateway de VPN usando o roteamento dinâmico com um IP público.

Rede doméstica 192.168.0.0/24:

Modem VDSL < - PPPOE ponte para que o roteador tenha o IP público - > Roteador Asus < - NAT - > 192.168.0.0.24

Então é isso que eu estou tentando fazer, então o RRAS tem ip público apenas para fins de VPN:

  • Modem VDSL < - Ponte PPPOE para que o Roteador tenha o IP público - > Roteador Asus
    • < - Bridge para as portas e o protocolo VPN - > Endereço MAC do adaptador público do RRAS VM
    • < - NAT para todo o resto - > 192.168.0.0/24

Estou aberto a outras sugestões para que a VPN site a site funcione se houver uma solução mais simples.

[atualização 1]

Estou pensando no seguinte: dei à VM RRAS Hyper-V o adaptador de rede adicional e atribuí-lo à VLAN 635, o modo promíscuo é ativado se, por algum motivo, ele quiser alterar seu endereço MAC. Em seguida, desativei todos os itens de conexão que não sejam os dois itens da Descoberta da Topologia da Camada de Links e o IPv4.

Eu atribui às configurações IPv4 o endereço IP público, uma máscara de sub-rede 255.255.255.255 e o gateway que é o mesmo gateway do adaptador ppp0 no roteador.

Eu executei o seguinte no roteador para tentar direcionar qualquer tráfego que tente se comunicar com o gateway VPN do Azure por meio da VLAN e, assim, esperamos que ele possa ser roteado sem usar o NAT:

/usr/sbin/ip link add link br0 name br0.635 type vlan id 635
/usr/sbin/ip link set dev br0.635 up

/usr/sbin/iptables -I INPUT -i br0.635 -j ACCEPT
/usr/sbin/iptables -I FORWARD -i ppp0 -o br0.635 -s <azure gateway IP> -j ACCEPT
/usr/sbin/iptables -I FORWARD -i br0.635 -o ppp0 -d <azure gateway IP> -j ACCEPT
/usr/sbin/iptables -I FORWARD -i ppp0 -o br0.635 -s <ppp0's gateway> -j ACCEPT
/usr/sbin/iptables -I FORWARD -i br0.635 -o ppp0 -d <ppp0's gateway> -j ACCEPT

Infelizmente isso não funciona e ao tentar se conectar no RRAS, ele me diz que o servidor remoto não está respondendo.

    
por Paul 10.09.2014 / 20:11

1 resposta

5

Então, eu consegui descobrir isso depois de muita pesquisa, eu posso usar a funcionalidade nativa de VPN Site-to-Site do Azure com o OpenSwan que roda em uma caixa Linux (Raspberry Pi / Arch Linux) atrás roteador NAT da minha rede doméstica.

Topologia de rede:

  • 192.168.0.0/24 - Rede doméstica
  • 192.168.1.0/24 - rede do Azure
  • 192.168.0.1 - IP privado do roteador residencial
  • 192.168.0.2 - Caixa Linux atuando como servidor VPN e gatewat da rede doméstica

Primeiramente, eu configuro o Azure com:

  • Sua rede remota é normal
  • Minha rede local com o endereço VPN como meu IP público
  • Habilitou a caixa de seleção Site a Site na rede do Azure, vinculando-a à minha rede local
  • Criado um gateway static para que o IKEv1 seja usado

No roteador da minha rede doméstica, encaminhei o seguinte para o meu gateway Linux executando o Openswan (192.168.0.2):

  • UDP 500
  • UDP 4500
  • Protocolo 50 (GRE)

Meu ipsec.conf se parece com isto:

version 2.0

config setup
    nat_traversal=yes
    virtual_private=%4:192.168.0.0/24
    protostack=auto
    interfaces="ipsec0=eth0"

conn azure
    authby=secret
    auto=start
    type=tunnel
    left=192.168.0.2
    leftsubnet=192.168.0.0/24
    leftnexthop=192.168.0.1
    right=<azure's VPN gateway IP>
    rightsubnet=192.168.1.0/24
    ike=3des-sha1-modp1024,aes128-sha1-modp1024
    esp=3des-sha1,aes128-sha1
    pfs=no

ipsec.secrets:

192.168.0.2 <azure vpn gateway> : PSK "Azure's PSK"

Isso colocou o link em funcionamento, para permitir o roteamento entre sites (nos dois casos após muita frustração):

/etc/sysctl.conf:

net.ipv4.ip_forward = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1

Um script bash que é executado na inicialização para manter "ipsec verify" feliz:

#!/bin/bash

for vpn in /proc/sys/net/ipv4/conf/*; do
    echo 0 > $vpn/accept_redirects;
    echo 0 > $vpn/send_redirects;
done

sysctl -p

Finalmente, minhas regras do iptables, que levaram o maior número possível de brincadeiras:

tabela de filtros, isso permite que a rede doméstica se conecte ao Azure e permita que a conexão seja estabelecida, mas as VMs do Azure ainda não conseguem se conectar a servidores de rede domésticos:

-A FORWARD -s 192.168.1.0/24 -m policy --dir in --pol ipsec -j ACCEPT
-A FORWARD -s 192.168.0.0/24 -m policy --dir out --pol ipsec -j ACCEPT
-A INPUT -p udp -m udp --dport 500 -j ACCEPT
-A INPUT -p udp -m udp --dport 4500 -j ACCEPT
-A INPUT -m policy --dir in --pol ipsec -j ACCEPT
-A INPUT -p esp -j ACCEPT

nat table, isso permite que as VMs do Azure se conectem a qualquer máquina na minha rede doméstica:

-A PREROUTING -i eth0 -p udp -m udp --dport 4500 -j DNAT --to-destination <azure public vpn ip>:4500
-A PREROUTING -i eth0 -p udp -m udp --dport 500 -j DNAT --to-destination <azure public vpn ip>:500
-A POSTROUTING -o eth0 -j MASQUERADE

Com tudo isso, posso fazer ping e comunicar em ambas as direções, todas as VMs do Azure podem ver minha rede doméstica, todas as máquinas da rede doméstica podem ver minhas VMs do Azure.

O lado do Azure roteia corretamente sozinho, para minha rede doméstica, configurei uma rota estática em meu roteador para enviar 192.168.1.0/24 a 192.168.0.2, mas, para testar em minha máquina, acabei de criar uma rota estática:

route -p ADD 192.168.1.0 MASK 255.255.255.0 192.168.0.2 METRIC 100

Espero que, pelo menos, alguém ache isso útil, fazer com que essa configuração demore muito e não exista um bom guia completo, apenas uma mistura de soluções que funcionam parcialmente.

    
por 15.09.2014 / 23:55