Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generično x86_64)
- Eth0 1.1.1.1/32 zunanji IP
- ipip-ipsec0 192.168.0.1/30 bo naš tunel
Miktoik: CCR 1009, RouterOS 6.46.5
- Eth0 10.0.0.2/30 notranji IP od ponudnika. Zunanji NAT IP ponudnika je dinamičen.
- ipip-ipsec0 192.168.0.2/30 bo naš tunel
Ustvarili bomo tunel IPsec na računalniku Linux z racoonom. Ne bom opisoval podrobnosti, obstaja dober
Namestite potrebne pakete:
sudo install racoon ipsec-tools
Konfiguriramo racoon, pogojno bo deloval kot strežnik ipsec. Ker mikrotik v glavnem načinu ne more prenesti dodatnega identifikatorja odjemalca in je zunanji naslov IP, prek katerega se povezuje z Linuxom, dinamičen, uporaba ključa v predhodni skupni rabi (avtorizacija gesla) ne bo delovala, saj se mora geslo ujemati z naslovom IP povezovalni gostitelj ali z identifikatorjem.
Uporabili bomo avtorizacijo s ključi RSA.
Racoon daemon uporablja ključe v formatu RSA, mikrotik pa v formatu PEM. Če ključe generirate s pripomočkom plainrsa-gen, ki je priložen racoonu, potem javnega ključa za Mikrotiko ne boste mogli pretvoriti v format PEM z njegovo pomočjo - pretvori samo v eno smer: PEM v RSA. Niti openssl niti ssh-keygen nista mogla prebrati ključa, ki ga je ustvaril plainrsa-gen, zato pretvorba tudi z njuno uporabo ne bo mogoča.
Ustvarili bomo ključ PEM z uporabo openssl in ga nato pretvorili za racoon z uporabo 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
Prejete ključe bomo shranili v mapo: /etc/racoon/certs/server. Ne pozabite nastaviti lastnika uporabnika, pod imenom katerega se zažene racoon daemon (običajno root) na 600 dovoljenj.
Opisal bom nastavitev mikrotika pri povezovanju preko WinBoxa.
Naložite ključ server-name.pub.pem v mikrotik: Meni “Datoteke” - “Naloži”.
Odprite razdelek »IP« - »IP sec« - zavihek »Ključi«. Sedaj generiramo ključe - gumb “Generate Key”, nato izvozimo javni ključ mikrotika “Expor Pub. Ključ«, ga lahko prenesete iz razdelka »Datoteke«, z desno miškino tipko kliknite datoteko - »Prenos«.
Uvozimo javni ključ racoon, »Uvoz«, na spustnem seznamu polja »Ime datoteke« poiščemo ime-strežnika.pub.pem, ki smo ga prenesli prej.
Javni ključ mikrotik je treba pretvoriti
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key
in ga postavite v mapo /etc/racoon/certs, pri čemer ne pozabite na lastnika in pravice.
konfiguracija racoon s komentarji: /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 config
Nazaj na razdelek "IP" - "IPsec"
Zavihek "Profili".
Parameter
Vrednost
Ime
Po vaši presoji (privzeto privzeto)
Algoritem razpršitve
sha512
Šifrirni algoritem
aes-128
DH-skupina
modp2048
Proposhal_check
trdijo
Lifetime
1d 00:00:00
Prehod NAT
res (označite polje)
DPD
120
Največja napaka DPD
5
Kartica Vrste
Parameter
Vrednost
Ime
Po vaši presoji (v nadaljevanju MyPeer)
Naslov:
1.1.1.1 (stroji IP Linux)
Lokalni naslov
10.0.0.2 (IP WAN vmesnik mikrotik)
profil
privzeto
Način izmenjave
Glavni
Pasivna
false
Pošlji INITIAL_CONTACT
Res
Zavihek s predlogi
Parameter
Vrednost
Ime
Po vaši presoji (v nadaljevanju MyPeerProposal)
Auth. Algoritmi
sha512
Encr. Algoritmi
aes-128-cbc
Lifetime
08:00:00
Skupina PFS
modp2048
Zavihek "Identitete".
Parameter
Vrednost
Kruška
MyPeer
Atuh. Metoda
ključ rsa
Ključne
mikrotik.privet.key
Daljinski ključ
ime-strežnika.pub.pem
Skupina predlog pravilnika
privzeto
Notrack veriga
prazno
Vrsta moje osebne izkaznice
avto
Vrsta daljinskega ID-ja
avto
Ujemaj po
daljinski id
Konfiguracija načina
prazno
Ustvari pravilnik
št
Zavihek "Pravilniki - Splošno"
Parameter
Vrednost
Kruška
MyPeer
Predor
Res
Src Naslov
192.168.0.0/30
Cilj Naslov
192.168.0.0/30
Protokol
255 (vse)
predloga
false
Zavihek "Pravilniki - dejanje"
Parameter
Vrednost
Ukrep
šifriranje
Stopnja
zahtevati
Protokoli IPsec
esp
Predlog
MyPeerProposal
Najverjetneje imate, tako kot jaz, na vmesniku WAN konfiguriran snat/masquerade; to pravilo je treba prilagoditi tako, da gredo odhodni paketi ipsec v naš tunel:
Pojdite na razdelek "IP" - "Požarni zid".
Zavihek "NAT", odprite naše pravilo snat/masquerade.
Zavihek Napredno
Parameter
Vrednost
Politika IPsec
ven: nobena
Ponovni zagon racoon demona
sudo systemctl restart racoon
Če se racoon ob ponovnem zagonu ne zažene, je prišlo do napake v konfiguraciji; v sistemskem dnevniku racoon prikaže informacije o številki vrstice, v kateri je bila odkrita napaka.
Ko se operacijski sistem zažene, se demon racoon zažene, preden se prikažejo omrežni vmesniki, v razdelku poslušanja pa smo določili možnost strict_address; v datoteko systemd morate dodati enoto racoon
/lib/systemd/system/racoon.service, v razdelku [Enota], vrstica After=network.target.
Zdaj bi morali naši tuneli ipsec delovati, poglejte izhod:
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
Če tuneli niso odprti, poglejte syslog ali journalctl -u racoon.
Zdaj morate konfigurirati vmesnike L3, da bo promet lahko usmerjen. Možne so različne možnosti, uporabili bomo IPIP, ker ga mikrotik podpira, jaz bi uporabil vti, a žal še ni implementiran v mikrotik. Od IPIP-a se razlikuje po tem, da zna dodatno inkapsulirati multicast in na pakete postavljati oznake fwmark, s katerimi jih je mogoče filtrirati v iptables in iproute2 (policy-based routing). Če potrebujete največjo funkcionalnost, potem na primer GRE. Vendar ne pozabite, da plačujemo dodatno funkcionalnost z velikimi režijskimi stroški.
Ogledate si lahko prevod dobrega pregleda tunelskih vmesnikov
V sistemu 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
Zdaj lahko dodate poti za omrežja za mikrotik
sudo ip route add A.B.C.D/Prefix via 192.168.255.2
Da bi se naš vmesnik in poti dvignili po ponovnem zagonu, moramo vmesnik opisati v /etc/network/interfaces in tja dodati poti v post-upu ali vse napisati v eno datoteko, na primer /etc/ ipip-ipsec0.conf in jo potegnite skozi post-up, ne pozabite na lastnika datoteke, pravice in jo naredite izvršljivo.
Spodaj je primer datoteke
#!/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
Na Mikrotiku:
V razdelku »Vmesniki« dodajte nov vmesnik »IP tunel«:
Zavihek “IP tunel” - “Splošno”
Parameter
Vrednost
Ime
Po vaši presoji (v nadaljevanju IPIP-IPsec0)
MTU
1480 (če ni podano, začne mikrotik rezati mtu na 68)
Lokalni naslov
192.168.0.2
Oddaljeni naslov
192.168.0.1
Skrivnost IPsec
Deaktiviraj polje (sicer bo ustvarjen nov Peer)
Obdržati pri življenju
Deaktiviraj polje (sicer se bo vmesnik nenehno izklapljal, saj ima mikrotika svoj format za te pakete in ne deluje z Linuxom)
DSCP
dediščino
Ne fragmentiraj
št
Sponka TCP MSS
Res
Dovoli hitro pot
Res
V razdelek »IP« - »Naslovi« dodajte naslov:
Parameter
Vrednost
Naslov:
192.168.0.2/30
vmesnik
IPIP-IPsec0
Zdaj lahko dodate poti v omrežje za računalnikom Linux; pri dodajanju poti bo prehod naš vmesnik IPIP-IPsec0.
PS
Ker je naš strežnik Linux tranzitiven, je smiselno na njem nastaviti parameter Clamp TCP MSS za vmesnike ipip:
ustvarite datoteko /etc/iptables.conf z naslednjo vsebino:
*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
in v /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf
Imam nginx, ki teče v omrežju za mikrotikom (ip 10.10.10.1), naredim ga dostopnega iz interneta, dodam ga v /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 pozabite dodati ustreznih dovoljenj za iptables, če imate omogočene paketne filtre.
Ostanite zdravi!
Vir: www.habr.com