Linukso: Ubuntu 18.04.4 LTS (GNU/Linukso 4.15.0-91-genera x86_64)
- Eth0 1.1.1.1/32 ekstera IP
- ipip-ipsec0 192.168.0.1/30 estos nia tunelo
Miktoik: CCR 1009, RouterOS 6.46.5
- Eth0 10.0.0.2/30 interna IP de la provizanto. La ekstera NAT IP de la provizanto estas dinamika.
- ipip-ipsec0 192.168.0.2/30 estos nia tunelo
Ni kreos IPsec-tunelon sur Linukso-maŝino uzante lavurson. Mi ne priskribos la detalojn, estas bona
Instalu la necesajn pakaĵojn:
sudo install racoon ipsec-tools
Ni agordas racoon, ĝi kondiĉe funkcios kiel ipsec-servilo. Ĉar mikrotik en ĉefa reĝimo ne povas transdoni aldonan klientidentigilon, kaj la ekstera IP-adreso per kiu ĝi konektas al Linukso estas dinamika, uzi antaŭdividitan ŝlosilon (pasvortpermeso) ne funkcios, ĉar la pasvorto devas esti kongrua aŭ kun la IP-adreso de la kunliganta gastiganto, aŭ kun identigilo.
Ni uzos rajtigon per RSA-ŝlosiloj.
La lavurso-demono uzas ŝlosilojn en la RSA-formato, kaj mikrotik uzas la PEM-formaton. Se vi generas ŝlosilojn per la ilo plainrsa-gen, kiu venas kun lavurso, tiam vi ne povos konverti la publikan ŝlosilon por Mikrotika al formato PEM kun ĝia helpo - ĝi konvertas nur en unu direkto: PEM al RSA. Nek openssl nek ssh-keygen povis legi la generitan ŝlosilon per plainrsa-gen, do la konvertiĝo ankaŭ ne eblos uzante ilin.
Ni generos PEM-ŝlosilon per openssl kaj poste konverti ĝin por racoon uzante 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
Ni metos la ricevitajn ŝlosilojn en la dosierujon: /etc/racoon/certs/server. Ne forgesu agordi la posedanton de la uzanto sub kies nomo la lavurso-demono estas lanĉita (kutime radiko) al 600 permesoj.
Mi priskribos la mikrotik-aranĝon kiam mi konektos per WinBox.
Alŝutu la ŝlosilon server-name.pub.pem al mikrotik: Menuo "Dosieroj" - "Alŝutu".
Malfermu la sekcion "IP" - "IP sek" - langeto "Ŝlosiloj". Nun ni generas ŝlosilojn - la butonon "Generu Ŝlosilon", tiam eksportu la mikrotika publikan ŝlosilon "Expor Pub. Ŝlosilo", vi povas elŝuti ĝin el la sekcio "Dosieroj", dekstre alklaku la dosieron - "Elŝuti".
Ni importas la publikan ŝlosilon de la lavurso, "Importu", en la fallisto de la kampo "Dosieronomo" ni serĉas la server-name.pub.pem, kiun ni elŝutis antaŭe.
La mikrotik publika ŝlosilo devas esti konvertita
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key
kaj metu ĝin en la dosierujon /etc/racoon/certs, ne forgesante pri la posedanto kaj rajtoj.
racoon-agordo kun komentoj: /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; # Сжимать передаваемые данные, алгоритм сжатия предлагается только один.
}
mikrotik agordo
Reiru al la sekcio "IP" - "IPsec"
langeto "Profiloj".
Parametro
valoro
Nomo
Laŭ via bontrovo (defaŭlte)
Hash Algoritmo
sha512
Ĉifrada Algoritmo
aes-128
DH-Grupo
modp2048
Proposhal_check
pretendo
vivdaŭro
1d 00:00:00
NAT Traversal
vera (marku la skatolon)
DPD
120
DPD Maksimuma fiasko
5
Samuloj langeto
Parametro
valoro
Nomo
Laŭ via bontrovo (ĉi-poste nomata MyPeer)
Adreso
1.1.1.1 (IP Linuksaj maŝinoj)
Loka Adreso
10.0.0.2 (IP WAN-interfaco mikrotik)
Profilo
defaŭlte
Interŝanĝreĝimo
ĉefa
pasivaj
falsa
Sendu INITIAL_CONTACT
veraj
Propona langeto
Parametro
valoro
Nomo
Laŭ via bontrovo (ĉi-poste MyPeerProposal)
Aŭt. Algoritmoj
sha512
Enkr. Algoritmoj
aes-128-cbc
vivdaŭro
08:00:00
Grupo PFS
modp2048
langeto "Identecoj".
Parametro
valoro
Kunulo
MiaPeer
Atuh. Metodo
rsa klavo
ŝlosilo
mikrotik.privet.key
Fora Ŝlosilo
servilo-nomo.pub.pem
Politika Ŝablona Grupo
defaŭlte
Notrack Ĉeno
malplena
Mia ID-Tipo
aŭto
Fora ID-Tipo
aŭto
Match By
fora id
Reĝima Agordo
malplena
Generu Politikon
ne
Langeto "Politiko - Ĝenerala"
Parametro
valoro
Kunulo
MiaPeer
Tunelo
veraj
Sr. Adreso
192.168.0.0/30
Dest. Adreso
192.168.0.0/30
protokolon
255 (ĉiuj)
template
falsa
Langeto "Politiko - Ago"
Parametro
valoro
ago
ĉifri
nivelo
postuli
IPsec-Protokoloj
esp
Propono
MiaPeerProposal
Plej verŝajne, kiel mi, vi havas snat/masquerade agordita sur via WAN-interfaco; ĉi tiu regulo devas esti alĝustigita por ke elirantaj ipsec-pakoj eniru nian tunelon:
Iru al la sekcio "IP" - "Fajroŝirmilo".
"NAT" langeto, malfermu nian snat/masquerade regulon.
Altnivela Tab
Parametro
valoro
IPsec Politiko
ekstere: neniu
Rekomencante la lavurso-demonon
sudo systemctl restart racoon
Se racoon ne komenciĝas post rekomenco, tiam estas eraro en la agordo; en syslog, racoon montras informojn pri la linionumero en kiu la eraro estis detektita.
Kiam la OS ekfunkciigas, la lavurso-demono komenciĝas antaŭ ol la retaj interfacoj aperas, kaj ni specifis la strict_address-opcion en la aŭskulta sekcio; vi devas aldoni la lavron-unuon al la systemd-dosiero.
/lib/systemd/system/racoon.service, en la sekcio [Unuo], linio After=network.target.
Nun niaj ipsec-tuneloj devus esti supre, rigardu la eligon:
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 la tuneloj ne funkcias, rigardu syslog, aŭ journalctl -u racoon.
Nun vi devas agordi L3-interfacojn por ke trafiko estu direktita. Estas malsamaj opcioj, ni uzos IPIP, ĉar mikrotik subtenas ĝin, mi uzus vti, sed, bedaŭrinde, ĝi ankoraŭ ne estis efektivigita en mikrotik. Ĝi diferencas de IPIP en tio ke ĝi povas aldone enkapsuligi multicast kaj meti fwmarks sur pakaĵetojn, per kiuj ili povas esti filtritaj en iptables kaj iproute2 (politik-bazita vojigo). Se vi bezonas maksimuman funkciecon, tiam, ekzemple, GRE. Sed ne forgesu, ke ni pagas por plia funkcieco kun granda supra kapo.
Vi povas vidi la tradukon de bona recenzo de tunelaj interfacoj
Sur Linukso:
# Создаем интерфейс
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
Nun vi povas aldoni itinerojn por retoj malantaŭ mikrotik
sudo ip route add A.B.C.D/Prefix via 192.168.255.2
Por ke nia interfaco kaj itineroj estu levitaj post rekomenco, ni devas priskribi la interfacon en /etc/network/interfaces kaj aldoni itinerojn tie en la post-up, aŭ skribi ĉion en unu dosiero, ekzemple, /etc/ ipip-ipsec0.conf kaj tiri ĝin tra post-supren, ne forgesu pri la dosierposedanto, rajtoj kaj faru ĝin efektivigebla.
Malsupre estas ekzempla dosiero
#!/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
Sur Mikrotik:
Sekcio "Interfacoj", aldonu novan interfacon "IP-tunelo":
Langeto "IP-tunelo" - "Ĝenerala"
Parametro
valoro
Nomo
Laŭ via bontrovo (ĉi-poste nomata IPIP-IPsec0)
MTU
1480 (se ne specifita, mikrotik komencas tranĉi mtu al 68)
Loka Adreso
192.168.0.2
Fora Adreso
192.168.0.1
IPsec Sekreto
Malaktivigu la kampon (alie nova Samulo estos kreita)
konserviviva
Malaktivigu la kampon (alie la interfaco konstante malŝaltos, ĉar mikrotika havas sian propran formaton por ĉi tiuj pakoj kaj ne funkcias kun Linukso)
DSCP
heredu
Ne Fragmentu
ne
Krampo TCP MSS
veraj
Permesu Rapidan Vojon
veraj
Sekcio "IP" - "Adresoj", aldonu la adreson:
Parametro
valoro
Adreso
192.168.0.2/30
interfaco
IPIP-IPsec0
Nun vi povas aldoni itinerojn al la reto malantaŭ Linukso-maŝino; kiam vi aldonos itineron, enirejo estos nia IPIP-IPsec0-interfaco.
PS
Ĉar nia Linuksa servilo estas transitiva, estas senco agordi la parametron Clamp TCP MSS por ipip-interfacoj sur ĝi:
kreu dosieron /etc/iptables.conf kun la jena enhavo:
*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
kaj en /etc/network/interfaces
post-supren iptables-restore < /etc/iptables.conf
Mi havas nginx funkciantan en la reto malantaŭ mikrotik (ip 10.10.10.1), faru ĝin alirebla de la Interreto, aldonu ĝin al /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
Ne forgesu aldoni la taŭgajn permesojn al iptables se vi havas pakatajn filtrilojn ebligitaj.
Benu vin!
fonto: www.habr.com