Acessando equipamentos e servidores embaixo do CGNAT
Amigos, primeiramente saudações! Primeiro vou tentar dar uma descrição e explicação do cenário. Estou prestando um serviço para um cliente e o link de internet disponível para ele, além de não possuir IPv6, ainda o aprisiona embaixo de um maldito CGNAT. Na localidade dele, trocar de operadora infelizmente NÃO É UMA OPÇÃO.
Todavia, existem uma série de equipamentos que este cliente precisava acessar quando não está na empresa. Desde o próprio Firewall MikroTik (uma RB750GR3 com arquitetura MMIPS rodando o RouteOS v6.49.15) através do Winbox, até um servidor de TS via RDP.
Estudando a situação, cheguei a conclusão que poderia expor portas e serviços usando uma VPN LT2TP entre o MikroTik que está embaixo do CGNAT e uma VPS com Linux Debian e IP público hospedada em qualquer Cloud da vida.
Nota: Este é um guia intuitivo; basta copiar e colar os comandos para configurar tudo corretamente.
O cenário final, fica desse jeito aqui:
Então, a partir de agora, vou considerar que você tenha uma VPS com Debian, IPv4 público e vou explicar como eu fiz para preparar a VPS para ser um Servidor de VPN LT2TP, com as rotas e a regras necessárias para acessar os serviços desejados.
Primeiro, vamos instalar os pacotes necessários e convenientes:
apt -y install xl2tpd strongswan rsyslog iptables iptables-persistent net-tools telnet tcpdump
Agora, vamos configurar os serviços para subirem automaticamente:
systemctl enable xl2tpd strongswan-starter rsyslog
Agora, precisamos configurar o xl2tpd. Faça o comando abaixo:
cat > /etc/xl2tpd/xl2tpd.conf << 'EOF'
[global]
ipsec saref = yes
[lns default]
ip range = 10.1.1.2-10.1.1.254
local ip = 10.1.1.1
require chap = yes
refuse pap = yes
require authentication = yes
name = L2TPServer
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
EOF
Agora precisamos configurar as opções no arquivo “/etc/ppp/options.xl2tpd”. Faça o comando abaixo:
cat > /etc/ppp/options.xl2tpd << 'EOF'
ipcp-accept-local
ipcp-accept-remote
refuse-pap
require-chap
require-mschap-v2
noccp
debug
passive
ip-up-script /usr/local/bin/rota-vpn.sh
EOF
Agora precisamos criar o script indicado nessas configurações. Ele que será o responsável por subir as rotas automaticamente. Faça o comando abaixo:
cat > /usr/local/bin/rota-vpn.sh << 'EOF'
#!/bin/bash
ip route add 192.168.0.0/24 via 10.1.1.2 dev ppp0
EOF
Agora precisamos dar permissões para o script rodar. Faça o comando abaixo:
chmod 755 /usr/local/bin/rota-vpn.sh
Vamos agora criar a chave secreta para o IPSEC. Obs: Você pode e deve alterar a chave “1234567890qazwsxedcrfvtgbyhnujmiklop” para qualquer outra de sua preferência. Essa aqui foi só um exemplo. Faça o comando abaixo:
cat > /etc/ipsec.secrets << 'EOF'
: PSK "1234567890qazwsxedcrfvtgbyhnujmiklop"
EOF
Agora, finalmente vamos criar o usuário que vai autenticar na VPN no RouteOS (MikroTik). É óbvio que você pode e deve alterar as configurações de usuário e senha conforme o desejado. Faça o comando abaixo:
cat > /etc/ppp/chap-secrets << 'EOF'
"henrique" "*" "a1b2c3d4e5f6g7" "10.1.1.2"
EOF
Nesse caso, a ideia era o gerente fazer uma conexão RDP (porta 3389) no IPv4 público da VPS que está conectada via VPN no MikroTik e essa conexão chegar por exemplo no IP 192.168.0.2 que é o servidor de TS da empresa. Vamos então, habilitar o roteamento de pacotes IPv4 na VPS e em seguida aplicar as regras.
Para habilitar o roteamento de pacotes, faça o comando abaixo:
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p
Agora, vamos aplicar as regras de iptables com os comandos abaixo:
iptables -t nat -A PREROUTING -i ens192 -p tcp --dport 3389 -j DNAT --to 192.168.0.2:3389
iptables -t nat -A POSTROUTING -o ppp0 -d 192.168.0.2 -p tcp --dport 3389 -j MASQUERADE
iptables-save > /etc/iptables/rules.v4
Agora, precisamos recarregar os serviços. Faça o comando abaixo:
systemctl restart strongswan-starter xl2tpd
Monitore o arquivo de log conforme o comando abaixo:
tail -f /var/log/syslog
Agora, deixe o terminal monitorando o log e vamos para o MikroTik. Abra o WINBOX e no menu a esquerda, clique em “New Terminal”. Agora cole o comando abaixo:
/interface l2tp-client add allow=chap connect-to=186.31.202.90 disabled=no name=vpn-l2tp password=a1b2c3d4e5f6g7 user=henrique
É óbvio que você vai alterar conforme as credenciais que você criou.
Feito isso, basta se conectar via RDP/TS no seu IP público (no caso do meu cliente, o 186.31.202.90) de qualquer lugar do mundo que terá acesso TS ao servidor 192.168.0.2.
Isso é tudo!
Esse artigo foi útil? Colabore com o nosso site para podermos continuar dando mais dicas como essa!
Formas de doação:
- Boleto / Cartão de crédito: https//bit.ly/AprendendoLinux
- Pix: [email protected]
- PicPay: @henrique_fagundes
- PayPal: [email protected]
- Bitcoin: bc1qtnn5z058htzy799dslwrpjcdpm0vuta3vrj28l
Favorecido: Luiz Henrique Marques Fagundes