N2N é uma aplicação VPN de camada aberta 2/3. Ao contrário de muitos outros programas VPN, o N2N pode conectar computadores localizados atrás de um roteador NAT. Isso oferece uma enorme vantagem de se conectar a um ambiente de nuvem sem depender de protocolos especiais, como o protocolo ESP (usado pelo ipsec). Para conseguir essa conexão, o N2N usa um supernó que pode rotear as informações entre os nós NAT. Essa conexão VPN pode ser usada para conectar várias instâncias do Site & Site entre regiões.
Pré-requisitos
- Três instâncias do servidor Ubuntu 16.04 LTS x64. (Qualquer tamanho vai funcionar)
- Um usuário sudo (ou conta root) .
Neste exemplo, usaremos três nós em várias zonas:
- Paris
- Miami
- Sydney
Instalação do software
Os seguintes comandos serão executados em cada instância.
Comece instalando o build-essential
repo e também libssl-dev
, pois estaremos construindo a partir do código-fonte mais novo.
apt-get install -y build-essential libssl-dev
Em seguida, baixe o código-fonte do github.
cd /tmp
git clone https://github.com/ntop/n2n.git
Compile todos os binários.
cd n2n
make
make install
O make install
comando terá criado os binários supernode
e edge
no /usr/sbin
diretório. Termine limpando os arquivos.
rm -rf /tmp/n2n
Instalação – Nó Paris
O primeiro nó será o nosso chamado supernode. Este supernode irá iniciar o serviço supernode que irá escutar na porta UDP 1200
. Por padrão, o aplicativo N2N não cria um arquivo de serviço. Então, precisamos fornecer nossos próprios.
Crie o arquivo de serviço ‘n2n_supernode’:
nano /etc/systemd/system/n2n_supernode.service
Adicione o seguinte conteúdo:
[Unit]
Description=n2n supernode
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/sbin/supernode -l 1200
[Install]
WantedBy=multi-user.target
A diretiva ‘-l’ define a porta UDP 1200
. Esta é a porta na qual o supernode irá escutar. Para garantir que tudo esteja funcionando, inicie o serviço supernode:
systemctl start n2n_supernode
Verifique o status do supernode.
systemctl status n2n_supernode
Isso mostrará um status semelhante ao seguinte.
● n2n_supernode.service - n2n supernode
Loaded: loaded (/etc/systemd/system/n2n_supernode.service; disabled; vendor prese
Active: active (running) since Wed 2018-08-15 17:07:46 UTC; 5s ago
Main PID: 4711 (supernode)
Tasks: 1
Memory: 80.0K
CPU: 1ms
CGroup: /system.slice/n2n_supernode.service
└─4711 /usr/sbin/supernode -l 1200
Em seguida, criaremos o serviço de borda. Esse serviço de borda reivindicará um IP privado para comunicação entre as outras arestas em outras zonas do Vultr.
Como no serviço supernode, isso também precisará de seu próprio arquivo de serviço.
nano /etc/systemd/system/n2n_edge.service
Adicione o seguinte conteúdo:
[Unit]
Description=n2n edge
Wants=network-online.target
After=network-online.target n2n_supernode.service
[Service]
ExecStart=/usr/sbin/edge -l localhost:1200 -c Vultr -a 192.168.1.1 -k mypassword -f
[Install]
WantedBy=multi-user.target
Neste arquivo de serviço, definimos as seguintes opções de linha de comando:
-l localhost:1200
: Isso irá se conectar ao localhost na porta UDP1200
.-c Vultr
: Esta é a comunidade a borda será unir. Todas as arestas dentro da mesma comunidade aparecem na mesma LAN (segmento de rede da camada 2). As bordas que não estão na mesma comunidade não se comunicam umas com as outras.-a 192.168.1.1
: O IP atribuído a essa interface. Este é o endereço IP da LAN virtual N2N que está sendo reivindicado.-k mypassword
: A senha usada para cada borda. Todas as bordas que se comunicam devem usar o mesmo nome de chave e de comunidade.-f
: Desativa o modo daemon e faz com que a borda seja executada em primeiro plano. Isso é necessário para o arquivo de serviço, caso contrário, nãosystemctl
será iniciado o serviço.
Para garantir que tudo esteja funcionando, inicie o serviço.
systemctl start n2n_edge
Em seguida, consulte o status do serviço.
systemctl status n2n_edge
A saída será semelhante à seguinte.
● n2n_edge.service - n2n edge
Loaded: loaded (/etc/systemd/system/n2n_edge.service; disabled; vendor preset: en
Active: active (running) since Wed 2018-08-15 17:10:46 UTC; 3s ago
Main PID: 4776 (edge)
Tasks: 1
Memory: 396.0K
CPU: 8ms
CGroup: /system.slice/n2n_edge.service
└─4776 /usr/sbin/edge -l localhost:1200 -c Vultr -a 192.168.1.1 -k mypass
Se verificarmos ‘ifconfig’, você verá o IP virtual do N2N sendo reivindicado pela edge0
interface.
ifconfig
A saída será semelhante à seguinte.
edge0 Link encap:Ethernet HWaddr 42:14:55:64:7d:21
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::4014:55ff:fe64:7d21/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1400 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
Feito isso, ative e crie as regras de firewall. Certifique-se de substituir o texto node_miami_ip
e o node_sydney_ip
com o IP público da instância de Sydney e Miami. (Vamos usá-los mais tarde).
ufw allow 22/tcp
ufw allow from node_miami_ip to any port 1200
ufw allow from node_sydney_ip to any port 1200
ufw enable
A última coisa a fazer com esse nó é habilitar ambos os serviços na inicialização.
systemctl enable n2n_supernode.service
systemctl enable n2n_edge.service
Instalação – Node Miami
O nó de Miami se conectará ao super node que está atualmente em execução na zona de Paris. Para conseguir isso, precisamos apenas criar um arquivo de serviço para o edge
aplicativo.
Comece criando um arquivo de serviço de borda.
nano /etc/systemd/system/n2n_edge.service
Adicione o seguinte conteúdo.
[Unit]
Description=n2n edge
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/sbin/edge -l node_paris_ip:1200 -c Vultr -a 192.168.1.2 -k mypassword -f
[Install]
WantedBy=multi-user.target
Nota : substitua o node_paris_ip
com o IP público da instância em execução em Paris
Isso se conectará ao nó em Paris na porta UDP 1200
, ingressará na comunidade ‘ Vultr
‘, solicitará IP 192.168.1.2
e autenticará com ‘ mypassword
‘.
Em seguida, inicie o serviço.
systemctl start n2n_edge
Verifique o status para obter uma indicação de que o serviço foi iniciado corretamente e está em execução.
systemctl status n2n_edge
Em seguida, assegure-se de que o edge0
IP seja reivindicado.
ifconfig
Ele mostrará o 192.168.1.2
endereço IP.
edge0 Link encap:Ethernet HWaddr 42:14:55:64:7d:21
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::4014:55ff:fe64:7d21/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1400 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
A próxima coisa a fazer é ativar o serviço na inicialização.
systemctl enable n2n_edge.service
Opcionalmente, ative o firewall e adicione as regras do SSH.
ufw allow 22/tcp
ufw enable
Agora poderemos executar ping nas duas bordas em execução em nossas instâncias.
Em Paris, pingue a instância do Vultr em Miami
ping 192.168.1.2
Em Miami, sinta a orla em Paris
ping 192.168.1.1
Instalação – Node Sydney
Finalmente, vamos adicionar nosso último continente ao mix: Austrália. Comece novamente criando um serviço de borda, este serviço de borda também se conectará ao supernode configurado anteriormente em Paris.
nano /etc/systemd/system/n2n_edge.service
Adicione o seguinte conteúdo.
[Unit]
Description=n2n edge
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/sbin/edge -l node_paris_ip:1200 -c Vultr -a 192.168.1.3 -k mypassword -f
[Install]
WantedBy=multi-user.target
Nota : Substitua o node_paris_ip
com o IP público da instância em execução em Paris.
Isso se conectará ao nó em Paris na porta UDP 1200
, ingressará na comunidade ‘ Vultr
‘, solicitará IP 192.168.1.3
e autenticará com ‘ mypassword
‘.
systemctl start n2n_edge
Verifique o status para garantir que o serviço seja iniciado.
systemctl status n2n_edge
Certifique-se de que o edge0
IP seja reivindicado.
edge0 Link encap:Ethernet HWaddr 46:56:b0:e9:8f:8a
inet addr:192.168.1.3 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::4456:b0ff:fee9:8f8a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1400 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
Novamente, ative este serviço na inicialização.
systemctl enable n2n_edge.service
Opcionalmente, ative o firewall e adicione as regras do SSH.
ufw allow 22/tcp
ufw enable
Agora poderemos pingar cada instância do Vultr de cada nó.
ping 192.168.1.1
ping 192.168.1.2
ping 192.168.1.3
Se você quiser testar a conexão entre cada borda do nó, ative as regras de firewall nas instâncias de Miami e Paris. Isso permitirá a comunicação entre as bordas.
Em Miami, adicione as seguintes regras. (Certifique-se de substituir o texto node_paris_ip
e node_sydney_ip
com os IPs públicos das instâncias de Sydney e Paris.)
ufw allow from node_paris_ip to any port 1200
ufw allow from node_sydney_ip to any port 1200
Em Sydney, adicione as seguintes regras.
ufw allow from node_paris_ip to any port 1200
ufw allow from node_miami_ip to any port 1200
Agora você pode desligar ou reiniciar o supernode. Conexões de rede continuarão a existir. Somente novas arestas sofrerão problemas de conectividade enquanto o serviço de supernós estiver inativo.
Conclusão
Nós configuramos com sucesso uma conexão VPN entre várias zonas. Isso deve oferecer muitas novas possibilidades para cenários de alta disponibilidade em nosso ambiente recém-configurado.