Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-genérico x86_64)
- IP externo Eth0 1.1.1.1/32
- ipip-ipsec0 192.168.0.1/30 será nosso túnel
Miktoik: CCR 1009, RouterOS 6.46.5
- IP interno Eth0 10.0.0.2/30 do provedor. O IP NAT externo do provedor é dinâmico.
- ipip-ipsec0 192.168.0.2/30 será nosso túnel
Criaremos um túnel IPsec em uma máquina Linux usando racoon. Não vou descrever os detalhes, há um bom
Instale os pacotes necessários:
sudo install racoon ipsec-tools
Configuramos o racoon, ele atuará condicionalmente como um servidor ipsec. Como o mikrotik no modo principal não pode transmitir um identificador de cliente adicional, e o endereço IP externo através do qual ele se conecta ao Linux é dinâmico, usar uma chave pré-compartilhada (autorização de senha) não funcionará, pois a senha deve corresponder ao endereço IP do o host de conexão ou com identificador.
Usaremos autorização usando chaves RSA.
O daemon racoon usa chaves no formato RSA e o mikrotik usa o formato PEM. Se você gerar chaves usando o utilitário plainrsa-gen que vem com o racoon, não será possível converter a chave pública do Mikrotika para o formato PEM com sua ajuda - ele converte apenas em uma direção: PEM para RSA. Nem o openssl nem o ssh-keygen conseguiram ler a chave gerada pelo plainrsa-gen, portanto a conversão também não será possível utilizando-os.
Iremos gerar uma chave PEM usando openssl e depois convertê-la para racoon usando plainrsa-gen:
# Генерируем ключ
openssl genrsa -out server-name.pem 1024
# Извлекаем публичный ключ
openssl rsa -in server-name.pem -pubout > server-name.pub.pem
# Конвертируем
plainrsa-gen -i server-name.pem -f server-name.privet.key
plainrsa-gen -i server-name.pub.pem -f server-name.pub.key
Colocaremos as chaves recebidas na pasta: /etc/racoon/certs/server. Não se esqueça de definir o proprietário do usuário sob cujo nome o daemon racoon é iniciado (geralmente root) para 600 permissões.
Descreverei a configuração do mikrotik ao conectar via WinBox.
Faça upload da chave server-name.pub.pem para o mikrotik: Menu “Arquivos” - “Upload”.
Abra a seção “IP” - “IP sec” - guia “Chaves”. Agora geramos chaves - o botão “Gerar Chave”, depois exportamos a chave pública mikrotika “Expor Pub. Key", você pode baixá-lo na seção "Arquivos", clique com o botão direito no arquivo - "Download".
Importamos a chave pública racoon, “Importar”, na lista suspensa do campo “Nome do arquivo” procuramos o server-name.pub.pem que baixamos anteriormente.
A chave pública do mikrotik precisa ser convertida
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key
e coloque-o na pasta /etc/racoon/certs, sem esquecer do proprietário e dos direitos.
configuração do racoon com comentários: /etc/racoon/racoon.conf
log info; # Уровень логирования, при отладке используем Debug или Debug2.
listen {
isakmp 1.1.1.1 [500]; # Адрес и порт, на котором будет слушать демон.
isakmp_natt 1.1.1.1 [4500]; # Адрес и порт, на котором будет слушать демон для клиентов за NAT.
strict_address; # Выполнять обязательную проверку привязки к указанным выше IP.
}
path certificate "/etc/racoon/certs"; # Путь до папки с сертификатами.
remote anonymous { # Секция, задающая параметры для работы демона с ISAKMP и согласования режимов с подключающимися хостами. Так как IP, с которого подключается Mikrotik, динамический, то используем anonymous, что разрешает подключение с любого адреса. Если IP у хостов статический, то можно указать конкретный адрес и порт.
passive on; # Задает "серверный" режим работы демона, он не будет пытаться инициировать подключения.
nat_traversal on; # Включает использование режима NAT-T для клиентов, если они за NAT.
exchange_mode main; # Режим обмена параметрами подключения, в данном случае ---согласование.
my_identifier address 1.1.1.1; # Идентифицируем наш linux хост по его ip адресу.
certificate_type plain_rsa "server/server-name.priv.key"; # Приватный ключ сервера.
peers_certfile plain_rsa "mikrotik.pub.key"; # Публичный ключ Mikrotik.
proposal_check claim; # Режим согласования параметров ISAKMP туннеля. Racoon будет использовать значения подключающегося хоста (инициатора) для срока действия сессии и длины ключа, если его срок действия сессии больше, или длина его ключа короче, чем у инициатора. Если срок действия сессии короче, чем у инициатора, racoon использует собственное значение срока действия сессии и будет отправлять сообщение RESPONDER-LIFETIME.
proposal { # Параметры ISAKMP туннеля.
encryption_algorithm aes; # Метод шифрования ISAKMP туннеля.
hash_algorithm sha512; # Алгоритм хеширования, используемый для ISAKMP туннеля.
authentication_method rsasig; # Режим аутентификации для ISAKMP туннеля - по RSA ключам.
dh_group modp2048; # Длина ключа для алгоритма Диффи-Хеллмана при согласовании ISAKMP туннеля.
lifetime time 86400 sec; Время действия сессии.
}
generate_policy on; # Автоматическое создание ESP туннелей из запроса, пришедшего от подключающегося хоста.
}
sainfo anonymous { # Параметры ESP туннелей, anonymous - указанные параметры будут использованы как параметры по умолчанию. Для разных клиентов, портов, протоколов можно задавать разные параметры, сопоставление происходит по ip адресам, портам, протоколам.
pfs_group modp2048; # Длина ключа для алгоритма Диффи-Хеллмана для ESP туннелей.
lifetime time 28800 sec; # Срок действия ESP туннелей.
encryption_algorithm aes; # Метод шифрования ESP туннелей.
authentication_algorithm hmac_sha512; # Алгоритм хеширования, используемый для аутентификации ESP туннелей.
compression_algorithm deflate; # Сжимать передаваемые данные, алгоритм сжатия предлагается только один.
}
configuração do mikrotik
Retorne à seção "IP" - "IPsec"
Guia "Perfis"
Parâmetro
Valor
Nome
A seu critério (por padrão)
Algoritmo de hash
sha512
Algoritmo de encriptação
aes-128
Grupo DH
modp2048
Proposta_check
reivindicar
Lifetime
1d 00:00:00
Percurso NAT
verdadeiro (marque a caixa)
DPD
120
Falha máxima do DPD
5
Guia Pares
Parâmetro
Valor
Nome
A seu critério (doravante denominado MyPeer)
Endereço
1.1.1.1 (máquinas IP Linux)
Endereço local
10.0.0.2 (Interface IP WAN mikrotik)
Perfil
omissão
Modo de Troca
principal
Renda
falso
Enviar INITIAL_CONTACT
verdadeiro
Guia Proposta
Parâmetro
Valor
Nome
A seu critério (doravante MyPeerProposal)
Autorização Algoritmos
sha512
Encr. Algoritmos
aes-128-cbc
Lifetime
08:00:00
Grupo PFS
modp2048
Guia "Identidades"
Parâmetro
Valor
Ponto
MeuPeer
Ah, sim. Método
chave rsa
Chave
mikrotik.privet.key
Chave remota
nome do servidor.pub.pem
Grupo de modelos de política
omissão
Corrente Notrack
está vazio
Meu tipo de identificação
auto
Tipo de ID remoto
auto
Corresponder por
id remoto
Configuração de Modo
está vazio
Gerar política
não
Aba "Políticas - Geral"
Parâmetro
Valor
Ponto
MeuPeer
Túnel
verdadeiro
Sr. Endereço
192.168.0.0/30
Dest. Endereço
192.168.0.0/30
Protocolo
255 (todos)
Modelo
falso
Aba "Políticas - Ação"
Parâmetro
Valor
Açao Social
criptografar
Nível
exigir
Protocolos IPsec
esp
Proposta
Proposta MyPeer
Muito provavelmente, como eu, você tem snat/masquerade configurado em sua interface WAN; esta regra precisa ser ajustada para que os pacotes ipsec de saída entrem em nosso túnel:
Vá para a seção "IP" - "Firewall".
Aba "NAT", abra nossa regra snat/masquerade.
Guia Avançado
Parâmetro
Valor
Política IPsec
fora: nenhum
Reiniciando o demônio guaxinim
sudo systemctl restart racoon
Se o racoon não iniciar na reinicialização, há um erro na configuração; no syslog, o racoon exibe informações sobre o número da linha na qual o erro foi detectado.
Quando o sistema operacional inicializa, o daemon racoon inicia antes que as interfaces de rede sejam ativadas e especificamos a opção strict_address na seção listen; você precisa adicionar a unidade racoon ao arquivo systemd
/lib/systemd/system/racoon.service, na seção [Unit], linha After=network.target.
Agora nossos túneis ipsec devem estar ativos, veja a saída:
sudo ip xfrm policy
src 192.168.255.0/30 dst 192.168.255.0/30
dir out priority 2147483648
tmpl src 1.1.1.1 dst "IP NAT через который подключается mikrotik"
proto esp reqid 0 mode tunnel
src 192.168.255.0/30 dst 192.168.255.0/30
dir fwd priority 2147483648
tmpl src "IP NAT через который подключается mikrotik" dst 1.1.1.1
proto esp reqid 0 mode tunnel
src 192.168.255.0/30 dst 192.168.255.0/30
dir in priority 2147483648
tmpl src "IP NAT через который подключается mikrotik" dst 1.1.1.1
proto esp reqid 0 mode tunnel
Se os túneis não estiverem funcionando, consulte o syslog ou o journalctl -u racoon.
Agora você precisa configurar interfaces L3 para que o tráfego possa ser roteado. Existem diferentes opções, usaremos IPIP, já que o mikrotik suporta, eu usaria vti, mas, infelizmente, ainda não foi implementado no mikrotik. Ele difere do IPIP porque pode encapsular adicionalmente multicast e colocar fwmarks em pacotes pelos quais eles podem ser filtrados em iptables e iproute2 (roteamento baseado em políticas). Se você precisar de funcionalidade máxima, por exemplo, GRE. Mas não se esqueça de que pagamos por funcionalidades adicionais com uma grande sobrecarga.
Você pode ver a tradução de uma boa visão geral das interfaces de túnel
No Linux:
# Создаем интерфейс
sudo ip tunnel add ipip-ipsec0 local 192.168.255.1 remote 192.168.255.2 mode ipip
# Активируем
sudo ip link set ipip-ipsec0 up
# Назначаем адрес
sudo ip addr add 192.168.255.1/30 dev ipip-ipsec0
Agora você pode adicionar rotas para redes atrás do mikrotik
sudo ip route add A.B.C.D/Prefix via 192.168.255.2
Para que nossa interface e rotas sejam levantadas após uma reinicialização, precisamos descrever a interface em /etc/network/interfaces e adicionar rotas lá no post-up, ou escrever tudo em um arquivo, por exemplo, /etc/ ipip-ipsec0.conf e puxe-o através do post-up, não se esqueça do proprietário do arquivo, dos direitos e torne-o executável.
Abaixo está um arquivo de exemplo
#!/bin/bash
ip tunnel add ipip-ipsec0 local 192.168.255.1 remote 192.168.255.2 mode ipip
ip link set ipip-ipsec0 up
ip addr add 192.168.255.1/30 dev ipip-ipsec0
ip route add A.B.C.D/Prefix via 192.168.255.2
No Mikrotik:
Seção “Interfaces”, adicione uma nova interface “Túnel IP”:
Aba “Túnel IP” - “Geral”
Parâmetro
Valor
Nome
A seu critério (doravante denominado IPIP-IPsec0)
MTU
1480 (se não for especificado o mikrotik começa a cortar o mtu para 68)
Endereço local
192.168.0.2
Endereço Remoto
192.168.0.1
Segredo IPsec
Desative o campo (caso contrário será criado um novo Peer)
Mantenha vivo
Desative o campo (caso contrário a interface será desligada constantemente, pois o mikrotika possui formato próprio para esses pacotes e não funciona com Linux)
DSCP
herdar
Não fragmente
não
Fixação TCP MSS
verdadeiro
Permitir atalho
verdadeiro
Seção “IP” - “Endereços”, adicione o endereço:
Parâmetro
Valor
Endereço
192.168.0.2/30
Interface
IPIP-IPsec0
Agora você pode adicionar rotas à rede atrás de uma máquina Linux; ao adicionar uma rota, o gateway será nossa interface IPIP-IPsec0.
PS
Como nosso servidor Linux é transitivo, faz sentido definir o parâmetro Clamp TCP MSS para interfaces ipip nele:
crie um arquivo /etc/iptables.conf com o seguinte conteúdo:
*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
e em /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf
Tenho o nginx rodando na rede atrás do mikrotik (ip 10.10.10.1), torne-o acessível pela Internet, adicione-o ao /etc/iptables.conf:
*nat
-A PREROUTING -d 1.1.1.1/32 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 10.10.10.1
#На mikrotik, в таблице mangle, надо добавить правило route с назначением 192.168.0.1 для пакетов с адресом источника 10.10.10.1 и портов 80, 443.
# Так же на linux работает OpenVPN сервер 172.16.0.1/24, для клиентов которые используют подключение к нему в качестве шлюза даем доступ в интернет
-A POSTROUTING -s 172.16.0.0/24 -o eth0 -j SNAT --to-source 1.1.1.1
COMMIT
Não se esqueça de adicionar as permissões apropriadas ao iptables se você tiver filtros de pacotes habilitados.
Mantenha-se saudável!
Fonte: habr.com