Linux: Ubuntu 18.04.4 LTS (GNU / Linux 4.15.0-91-generic x86_64)
- Eth0 1.1.1.1/32 išorinis IP
- ipip-ipsec0 192.168.0.1/30 bus mūsų tunelis
Miktoik: CCR 1009, RouterOS 6.46.5
- Eth0 10.0.0.2/30 vidinis IP iš teikėjo. Teikėjo išorinis NAT IP yra dinamiškas.
- ipip-ipsec0 192.168.0.2/30 bus mūsų tunelis
Sukursime IPsec tunelį Linux kompiuteryje naudodami racoon. Detalių neaprašysiu, yra gera
Įdiekite reikiamus paketus:
sudo install racoon ipsec-tools
Mes sukonfigūruojame racoon, jis sąlyginai veiks kaip ipsec serveris. Kadangi mikrotik pagrindiniu režimu negali perduoti papildomo kliento identifikatoriaus, o išorinis IP adresas, per kurį jis jungiasi prie Linux, yra dinamiškas, iš anksto bendrinamo rakto naudojimas (slaptažodžio autorizacija) neveiks, nes slaptažodis turi būti suderintas su IP adresu. jungiantį pagrindinį kompiuterį arba su identifikatoriumi.
Naudosime autorizaciją naudodami RSA raktus.
Rakonų demonas naudoja RSA formato raktus, o mikrotik – PEM formatą. Jei sugeneruosite raktus naudodami plainrsa-gen įrankį, pateiktą kartu su racoon, tada negalėsite konvertuoti viešojo Mikrotika rakto į PEM formatą - jis konvertuoja tik viena kryptimi: PEM į RSA. Nei openssl, nei ssh-keygen negalėjo nuskaityti plainrsa-gen sugeneruoto rakto, todėl naudojant juos konvertuoti taip pat nepavyks.
Sugeneruosime PEM raktą naudodami openssl ir konvertuosime jį į racoon naudodami 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
Gautus raktus patalpinsime į aplanką: /etc/racoon/certs/server. Nepamirškite vartotojo, kurio vardu paleistas racoon demonas, savininkui (dažniausiai root) nustatyti 600 leidimų.
Aprašysiu mikrotik sąranką jungiantis per WinBox.
Įkelkite serverio pavadinimas.pub.pem raktą į mikrotik: meniu „Failai“ - „Įkelti“.
Atidarykite skyrių „IP“ - „IP sek“ - skirtuką „Raktai“. Dabar generuojame raktus - mygtuką „Generuoti raktą“, tada eksportuojame mikrotika viešąjį raktą „Expor Pub. Raktas“, galite jį atsisiųsti iš skyriaus „Failai“, dešiniuoju pelės mygtuku spustelėkite failą - „Atsisiųsti“.
Mes importuojame viešąjį raktą „Importuoti“, išskleidžiamajame lauko „Failo pavadinimas“ sąraše ieškome serverio pavadinimas.pub.pem, kurį atsisiuntėme anksčiau.
Mikrotik viešąjį raktą reikia konvertuoti
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key
ir įdėkite į aplanką /etc/racoon/certs, nepamiršdami apie savininką ir teises.
racoon konfigūracija su komentarais: /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 konfigūracija
Grįžkite į skyrių „IP“ - „IPsec“
Skirtukas „Profiliai“.
Parametras
Vertė
Vardas
Savo nuožiūra (pagal numatytuosius nustatymus)
Maišos algoritmas
sha512
Šifravimo algoritmas
aes-128
DH grupė
modp2048
Proposhal_check
reikalavimas
Gyvenimo trukmė
1d 00:00:00
NAT Traversal
tiesa (pažymėkite langelį)
DPD
120
DPD Maksimalus gedimas
5
Bendraamžių skirtukas
Parametras
Vertė
Vardas
Jūsų nuožiūra (toliau – MyPeer)
Adresas
1.1.1.1 (IP Linux įrenginiai)
Vietinis adresas
10.0.0.2 (IP WAN sąsaja mikrotik)
Profilis
numatytasis
Mainų režimas
pagrindinis
Pasyvus
klaidingas
Siųsti INITIAL_CONTACT
tiesa
Pasiūlymo skirtukas
Parametras
Vertė
Vardas
Savo nuožiūra (toliau – MyPeerProposal)
Aut. Algoritmai
sha512
Encr. Algoritmai
aes-128-cbc
Gyvenimo trukmė
08:00:00
PFS grupė
modp2048
Skirtukas „Tapatybės“.
Parametras
Vertė
Peer
„MyPeer“.
Atuh. Metodas
rsa raktas
raktas
mikrotik.privet.key
Nuotolinis raktas
serverio pavadinimas.pub.pem
Politikos šablonų grupė
numatytasis
„Notrack“ grandinė
tuščia
Mano ID tipas
automatinis
Nuotolinio ID tipas
automatinis
Suderinti pagal
nuotolinis ID
Režimo konfigūracija
tuščia
Sukurti politiką
ne
Skirtukas „Politika – Bendra“
Parametras
Vertė
Peer
„MyPeer“.
Tunelis
tiesa
Src. Adresas
192.168.0.0/30
Pask. Adresas
192.168.0.0/30
Protokolas
255 (visi)
šablonas
klaidingas
Skirtukas „Politika – veiksmas“
Parametras
Vertė
Veikla
šifruoti
Lygis
reikalauti
IPsec protokolai
Traukos kontrolės sistema
Pasiūlymas
„MyPeerProposal“.
Greičiausiai, kaip ir aš, savo WAN sąsajoje sukonfigūravote snat/masquerade; šią taisyklę reikia pakoreguoti taip, kad siunčiami ipsec paketai patektų į mūsų tunelį:
Eikite į skyrių „IP“ - „Ugniasienė“.
„NAT“ skirtuke atidarykite mūsų „snat/masquerade“ taisyklę.
Išplėstinis skirtukas
Parametras
Vertė
IPsec politika
išeina: nėra
Meškėno demono paleidimas iš naujo
sudo systemctl restart racoon
Jei racoon neįsijungia paleidus iš naujo, konfigūracijoje yra klaida; syslog'e racoon rodo informaciją apie eilutės numerį, kurioje buvo aptikta klaida.
Kai OS paleidžiama, racoon demonas paleidžiamas prieš iškeliant tinklo sąsajas, o klausymo skiltyje nurodėme parinktį strict_address; turite pridėti racoon vienetą prie systemd failo
/lib/systemd/system/racoon.service, skiltyje [Unit], eilutė After=network.target.
Dabar mūsų ipsec tuneliai turėtų būti pakelti, pažiūrėkite į išvestį:
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
Jei tunelių nėra, pažiūrėkite į syslog arba journalctl -u racoon.
Dabar reikia sukonfigūruoti L3 sąsajas, kad būtų galima nukreipti srautą. Yra įvairių variantų, naudosime IPIP, nes mikrotik jį palaiko, aš naudočiau vti, bet, deja, jis dar neįdiegtas mikrotik. Jis skiriasi nuo IPIP tuo, kad gali papildomai apklijuoti multicast ir ant paketų įdėti fwmarks, pagal kuriuos juos galima filtruoti iptables ir iproute2 (politika pagrįstas maršrutas). Jei jums reikia maksimalaus funkcionalumo, tada, pavyzdžiui, GRE. Tačiau nepamirškite, kad už papildomą funkcionalumą mokame su didele viršutine galvute.
Galite pamatyti geros tunelio sąsajų apžvalgos vertimą
„Linux“ sistemoje:
# Создаем интерфейс
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
Dabar galite pridėti maršrutų tinklams už mikrotik
sudo ip route add A.B.C.D/Prefix via 192.168.255.2
Kad mūsų sąsaja ir maršrutai būtų pakelti po perkrovimo, turime apibūdinti sąsają /etc/network/interfaces ir pridėti maršrutus ten post-up, arba įrašyti viską į vieną failą, pavyzdžiui, /etc/ ipip-ipsec0.conf ir perkelkite jį per post-up, nepamirškite apie failo savininką, teises ir padarykite jį vykdomąjį.
Žemiau yra failo pavyzdys
#!/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
„Mikrotik“ svetainėje:
Skyriuje „Sąsajos“, pridėkite naują sąsają „IP tunelis“:
Skirtukas „IP tunelis“ - „Bendra“
Parametras
Vertė
Vardas
Jūsų nuožiūra (toliau – IPIP-IPsec0)
MTU
1480 (jei nenurodyta, mikrotik pradeda pjauti mtu iki 68)
Vietinis adresas
192.168.0.2
Nuotolinis adresas
192.168.0.1
IPsec paslaptis
Išjunkite lauką (kitaip bus sukurtas naujas partneris)
Išlaikyti gyvą
Išjunkite lauką (kitaip sąsaja nuolat išsijungs, nes mikrotika turi savo formatą šiems paketams ir neveikia su Linux)
DSCP
paveldėti
Neskaldykite
ne
Užfiksuokite TCP MSS
tiesa
Leisti greitąjį kelią
tiesa
Skyrius „IP“ - „Adresai“, pridėkite adresą:
Parametras
Vertė
Adresas
192.168.0.2/30
Sąsaja
IPIP-IPsec0
Dabar galite pridėti maršrutų į tinklą už „Linux“ įrenginio; pridedant maršrutą, šliuzas bus mūsų IPIP-IPsec0 sąsaja.
PS
Kadangi mūsų „Linux“ serveris yra pereinamasis, tikslinga jame nustatyti „Clamp TCP MSS“ parametrą „ipip“ sąsajoms:
sukurkite failą /etc/iptables.conf su tokiu turiniu:
*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
ir /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf
Tinkle už mikrotik (ip 10.10.10.1) veikia nginx, padarykite jį pasiekiamą iš interneto, pridėkite prie /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
Nepamirškite pridėti atitinkamų iptables leidimų, jei įjungėte paketų filtrus.
Būk sveikas!
Šaltinis: www.habr.com