Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generiese x86_64)
- Eth0 1.1.1.1/32 eksterne IP
- ipip-ipsec0 192.168.0.1/30 sal ons tonnel wees
Miktoik: CCR 1009, RouterOS 6.46.5
- Eth0 10.0.0.2/30 interne IP van die verskaffer. Die verskaffer se eksterne NAT IP is dinamies.
- ipip-ipsec0 192.168.0.2/30 sal ons tonnel wees
Ons sal 'n IPsec-tonnel op 'n Linux-masjien skep met behulp van wasbeer. Ek sal nie die besonderhede beskryf nie, daar is 'n goeie een
Installeer die nodige pakkette:
sudo install racoon ipsec-tools
Ons konfigureer wasbeer, dit sal voorwaardelik optree as 'n ipsec-bediener. Aangesien mikrotik in hoofmodus nie 'n bykomende kliëntidentifiseerder kan oordra nie, en die eksterne IP-adres waardeur dit aan Linux koppel dinamies is, sal die gebruik van 'n voorafgedeelde sleutel (wagwoordmagtiging) nie werk nie, aangesien die wagwoord óf met die IP-adres van die verbindende gasheer, of met identifiseerder.
Ons sal magtiging gebruik deur RSA-sleutels te gebruik.
Die wasbeer-demoon gebruik sleutels in die RSA-formaat, en mikrotik gebruik die PEM-formaat. As jy sleutels genereer met behulp van die plainrsa-gen-nutsding wat saam met wasbeer kom, sal jy nie die publieke sleutel vir Mikrotika na PEM-formaat met sy hulp kan omskakel nie - dit skakel net in een rigting om: PEM na RSA. Nóg openssl nóg ssh-keygen kon die gegenereerde sleutel deur plainrsa-gen lees nie, so die omskakeling sal ook nie moontlik wees om hulle te gebruik nie.
Ons sal 'n PEM-sleutel genereer deur openssl te gebruik en dit dan omskep vir wasbeer met 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
Ons sal die ontvangde sleutels in die gids plaas: /etc/racoon/certs/server. Moenie vergeet om die eienaar van die gebruiker onder wie se naam die wasbeer-demoon geloods word (gewoonlik wortel) op 600 toestemmings te stel nie.
Ek sal die mikrotik-opstelling beskryf wanneer u via WinBox verbind.
Laai die bedienernaam.pub.pem-sleutel op na mikrotik: Kieslys "Lêers" - "Laai op".
Maak die "IP"-afdeling oop - "IP sec" - "Sleutels" oortjie. Nou genereer ons sleutels - die "Generate Key" knoppie, voer dan die mikrotika publieke sleutel "Expor Pub. Sleutel", kan jy dit aflaai vanaf die "Lêers"-afdeling, regskliek op die lêer - "Laai af".
Ons voer die wasbeer publieke sleutel, "Import", in die aftreklys van die "Lêernaam"-veld in, ons soek die bediener-naam.pub.pem wat ons vroeër afgelaai het.
Die mikrotik publieke sleutel moet omgeskakel word
plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key
en plaas dit in die /etc/racoon/certs-lêergids, en moenie van die eienaar en regte vergeet nie.
racoon config met opmerkings: /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 konfigurasie
Keer terug na die "IP"-afdeling - "IPsec"
"Profiele" oortjie
Parameter
Waarde
Naam
Na u goeddunke (by verstek)
Hash-algoritme
sha512
Enkripsie-algoritme
aes-128
DH-groep
modp2048
Proposhal_check
eis
Lewensduur
1d 00:00:00
NAT Traversal
waar (merk die blokkie)
DPD
120
DPD Maksimum mislukking
5
Eweknie-oortjie
Parameter
Waarde
Naam
Na u goeddunke (hierna na verwys as MyPeer)
Adres
1.1.1.1 (IP Linux-masjiene)
Plaaslike adres
10.0.0.2 (IP WAN-koppelvlak mikrotik)
Profiel
verstek
Uitruilmodus
hoof
Passiewe
valse
Stuur INITIAL_CONTACT
waar
Voorstel-oortjie
Parameter
Waarde
Naam
Na u goeddunke (hierna na verwys as MyPeerProposal)
Auth. Algoritmes
sha512
Encr. Algoritmes
aes-128-cbc
Lewensduur
08:00:00
PFS Groep
modp2048
"Identiteite" oortjie
Parameter
Waarde
eweknie
MyPeer
Atuh. Metode
rsa sleutel
Sleutel
mikrotik.privet.key
Afstandsleutel
bedienernaam.pub.pem
Beleidsjabloongroep
verstek
Notrack-ketting
leeg
My ID Tipe
motor
Afgeleë ID Tipe
motor
Pas by
afstand-ID
Moduskonfigurasie
leeg
Genereer beleid
No.
Oortjie "Beleide - Algemeen"
Parameter
Waarde
eweknie
MyPeer
Tunnel
waar
Src. Adres
192.168.0.0/30
Dest. Adres
192.168.0.0/30
Protokol
255 (almal)
Sjabloon
valse
Oortjie "Beleide - Aksie"
Parameter
Waarde
Aksie
Enkripteer
Vlak
versoeker
IPsec-protokolle
ESP
Voorstel
MyPeerProposal
Heel waarskynlik, soos ek, het jy snat/maskerade op jou WAN-koppelvlak gekonfigureer; hierdie reël moet aangepas word sodat uitgaande ipsec-pakkies in ons tonnel gaan:
Gaan na die afdeling "IP" - "Firewall".
"NAT"-oortjie, maak ons snat/maskerade-reël oop.
Gevorderde oortjie
Parameter
Waarde
IPsec-beleid
uit: geen
Herbegin die wasbeerdemoon
sudo systemctl restart racoon
As racoon nie begin met herbegin nie, dan is daar 'n fout in die konfigurasie; in syslog, racoon vertoon inligting oor die reëlnommer waarin die fout opgespoor is.
Wanneer die bedryfstelsel opstart, begin die wasbeer-daemon voordat die netwerkkoppelvlakke na vore gebring word, en ons het die strict_address-opsie in die luisterafdeling gespesifiseer; jy moet die wasbeer-eenheid by die systemd-lêer voeg
/lib/systemd/system/racoon.service, in die [Eenheid]-afdeling, reël After=network.target.
Nou moet ons ipsec-tonnels op wees, kyk na die uitset:
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
As die tonnels nie op is nie, kyk na syslog, of journalctl -u wasbeer.
Nou moet jy L3-koppelvlakke opstel sodat verkeer herlei kan word. Daar is verskillende opsies, ons sal IPIP gebruik, aangesien mikrotik dit ondersteun, sal ek vti gebruik, maar dit is ongelukkig nog nie in mikrotik geïmplementeer nie. Dit verskil van IPIP deurdat dit addisioneel multicast kan inkapsel en fw-merke op pakkies kan plaas, waardeur dit in iptables en iproute2 (beleidgebaseerde roetering) gefiltreer kan word. As jy maksimum funksionaliteit benodig, dan, byvoorbeeld, GRE. Maar moenie vergeet dat ons betaal vir bykomende funksionaliteit met 'n groot oorhoofse kop nie.
U kan die vertaling van 'n goeie resensie van tonnel-koppelvlakke sien
Op 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
Nou kan jy roetes vir netwerke agter mikrotik byvoeg
sudo ip route add A.B.C.D/Prefix via 192.168.255.2
Om ons koppelvlak en roetes te verhoog na 'n herlaai, moet ons die koppelvlak in /etc/network/interfaces beskryf en roetes daar byvoeg in die post-up, of alles in een lêer skryf, byvoorbeeld /etc/ ipip-ipsec0.conf en trek dit deur post-up, moenie vergeet van die lêer eienaar, regte en maak dit uitvoerbaar.
Hieronder is 'n voorbeeldlêer
#!/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
Op Mikrotik:
Afdeling "Interfaces", voeg 'n nuwe koppelvlak "IP-tonnel" by:
Oortjie "IP-tonnel" - "Algemeen"
Parameter
Waarde
Naam
Na u goeddunke (hierna verwys as IPIP-IPsec0)
MTU
1480 (indien nie gespesifiseer nie, begin mikrotik mtu na 68 sny)
Plaaslike adres
192.168.0.2
Afgeleë adres
192.168.0.1
IPsec geheim
Deaktiveer die veld (anders sal 'n nuwe eweknie geskep word)
Hou aan die lewe
Deaktiveer die veld (anders sal die koppelvlak voortdurend afskakel, aangesien mikrotika sy eie formaat vir hierdie pakkette het en nie met Linux werk nie)
DSCP
erf
Moenie Fragmenteer nie
No.
Klem TCP MSS
waar
Laat vinnige pad toe
waar
Afdeling "IP" - "Adresse", voeg die adres by:
Parameter
Waarde
Adres
192.168.0.2/30
Interface
IPIP-IPsec0
Nou kan jy roetes by die netwerk voeg agter 'n Linux-masjien; wanneer 'n roete bygevoeg word, sal gateway ons IPIP-IPsec0-koppelvlak wees.
PS
Aangesien ons Linux-bediener transitief is, maak dit sin om die Clamp TCP MSS-parameter vir ipip-koppelvlakke daarop te stel:
skep 'n lêer /etc/iptables.conf met die volgende inhoud:
*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT
en in /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf
Ek het nginx wat op die netwerk agter mikrotik (ip 10.10.10.1) loop, maak dit toeganklik vanaf die internet, voeg dit by /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
Moenie vergeet om die toepaslike toestemmings by iptables te voeg as u pakkiefilters geaktiveer het nie.
Wees gesond!
Bron: will.com