Tunela IPIP IPsec VPN di navbera makîneya Linux û Mikrotik de li pişt peydakarê NAT

Linux: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generic x86_64)

  • Eth0 1.1.1.1/32 IP-ya derve
  • ipip-ipsec0 192.168.0.1/30 dê tunela me be

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 IP-ya navxweyî ji pêşkêşkerê. IP-ya NAT-a derveyî ya pêşkêşker dînamîk e.
  • ipip-ipsec0 192.168.0.2/30 dê tunela me be

Em ê li ser makîneyek Linux-ê bi karanîna racoon tunelek IPsec biafirînin. Ez ê hûrguliyan nebêjim, yek baş heye gotara у vvpoloskin.

Pakêtên pêwîst saz bikin:

sudo install racoon ipsec-tools

Em racoon mîheng dikin, ew ê bi şert wekî serverek ipsec tevbigere. Ji ber ku mikrotik di moda sereke de nikare nasnameyek xerîdarek din veguhezîne, û navnîşana IP-ya derveyî ya ku ew bi Linux-ê ve girêdide dînamîk e, karanîna mifteyek pêş-hevkirî (destûrdana şîfreyê) dê nexebite, ji ber ku şîfre divê bi navnîşana IP-yê re were hevber kirin. mêvandarê girêdanê, an bi nasnameyê.

Em ê destûrnameyê bi karanîna mifteyên RSA bikar bînin.

Racoon daemon bişkojkên di formata RSA de bikar tîne, û mikrotik formata PEM bikar tîne. Ger hûn bi karanîna amûra plainrsa-gen a ku bi racoon ve tê, mifteyan biafirînin, wê hingê hûn ê nikaribin bi alîkariya wê mifteya giştî ya Mikrotika veguherînin forma PEM - ew tenê di yek alî de diguhere: PEM bo RSA. Ne openssl û ne jî ssh-keygen nikaribûn mifteya çêkirî ji hêla plainrsa-gen ve bixwînin, ji ber vê yekê veguhertin dê bi karanîna wan jî ne mumkun be.

Em ê bi karanîna openssl mifteyek PEM çêbikin û dûv re bi karanîna plainrsa-gen wê ji bo racoon veguherînin:

#  Генерируем ключ
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

Em ê mifteyên wergirtî têxin peldankê: /etc/racoon/certs/server. Ji bîr nekin ku xwediyê bikarhênerê ku di bin navê wî de racoon daemon tê destpêkirin (bi gelemperî root) li 600 destûran bicîh bikin.

Dema ku bi WinBox ve tê girêdan ez ê sazkirina mîkrotîkê diyar bikim.

Mifteya server-name.pub.pem li mikrotikê bar bikin: Pêşeka "Pel" - "Barkirin".

Beşa "IP" - "IP sec" - "Keys" vekin. Naha em bişkojan diafirînin - bişkoka "Klîftê biafirîne", dûv re mifteya giştî ya mikrotîka "Expor Pub" derdixe. Key", hûn dikarin wê ji beşa "Pel" dakêşin, li ser pelê rast-klîk bikin - "Daxistin".

Em mifteya giştî ya racoon, "Import", di navnîşa dakêşana qada "Navê pelê" de em li server-name.pub.pem-a ku me berê dakêşand digerin.

Pêdivî ye ku mifteya giştî ya mikrotik were veguheztin

plainrsa-gen -i mikrotik.pub.pem -f mikrotik.pub.key

û wê têxin peldanka /etc/racoon/certs, xwedan û mafan ji bîr nekin.

veavakirina racoon bi şîroveyan: /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; # Сжимать передаваемые данные, алгоритм сжатия предлагается только один.
}

mîkrotik config

Vegere beşa "IP" - "IPsec"

Tabloya "Profilan".
Parîsê
nirxê

Nav
Li gorî we (ji hêla xwerû)

Hash Algorithm
sha512

Algorîtmaya şîfrekirinê
aes-128

DH-Group
modp2048

Proposhal_check
maf

jiyana
1 00:00:00

NAT Traversal
rast (qeçikê kontrol bikin)

DPD
120

DPD Têkçûna herî zêde
5

Peers tab
Parîsê
nirxê

Nav
Li gorî we (li vir şûnda wekî MyPeer tê binav kirin)

Navnîşan
1.1.1.1 (makîneyên IP Linux)

Navnîşana Herêmî
10.0.0.2 (IP WAN interface mikrotik)

Profîla Te
destçûnî

Mode Exchange
dest

Nejîr
şaş

INITIAL_CONTACT bişîne
rast

Tabloya pêşniyarê
Parîsê
nirxê

Nav
Li gorî we (li vir şûnda wekî MyPeerProposal tê binav kirin)

Auth. Algorîtmayan
sha512

Encr. Algorîtmayan
aes-128-cbc

jiyana
08:00:00

Koma PFS
modp2048

Tabloya "Nasname".
Parîsê
nirxê

hevrê
MyPeer

Atuh. Awa
rsa key

Qûfle
mikrotik.privet.key

Mifteya Dûr
server-name.pub.pem

Siyaseta Şablon Koma
destçûnî

Notrack Chain
vala

Tîpa Nasnameya Min
auto

Type ID dûr
auto

Match By
id dûr

Veavakirina Mode
vala

Polîtîka çêbikin
na

Tab "Siyaset - Giştî"
Parîsê
nirxê

hevrê
MyPeer

Tûnêl
rast

Src. Navnîşan
192.168.0.0/30

Dest. Navnîşan
192.168.0.0/30

Protokola
255 (hemû)

Şablon
şaş

Tab "Siyaset - Çalakî"
Parîsê
nirxê

Çalakî
encrypt

Serrast
xwestin

Protokolên IPsec
esp

Pêşnîyar
MyPeerProposal

Bi îhtîmaleke mezin, mîna min, we snat/masquerade li ser navbeyna xweya WAN-ê hatî mîheng kirin; pêdivî ye ku ev rêgez were sererast kirin da ku pakêtên ipsec ên derketinê biçin tunela me:
Herin beşa "IP" - "Firewall".
Tabloya "NAT", qaîdeya meya snat/masquerade veke.

Tab pêşketî
Parîsê
nirxê

Siyaseta IPsec
der: tune

Ji nû ve destpêkirina cinê racoon

sudo systemctl restart racoon

Ger racoon bi ji nû ve destpêkirinê dest pê neke, wê hingê di mîhengê de xeletiyek heye; di syslogê de, racoon agahdariya li ser jimareya rêzê ya ku tê de xeletî hatiye dîtin nîşan dide.

Dema ku OS-ê dest pê dike, berî ku navberên torê werin hilanîn, racoon daemon dest pê dike, û me vebijarka strict_address di beşa guhdarîkirinê de destnîşan kir; hûn hewce ne ku yekîneya racoon li pelê systemd zêde bikin.
/lib/systemd/system/racoon.service, di beşa [Unit] de, rêza After=network.target.

Naha divê tunelên me yên ipsec rabin, li derketinê binêrin:

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

Ger tunel nebin, li syslog, an journalctl -u racoon binêrin.

Naha hûn hewce ne ku navgînên L3 mîheng bikin da ku seyrûsefer were rêve kirin. Vebijarkên cihêreng hene, em ê IPIP bikar bînin, ji ber ku mikrotik wê piştgirî dike, ez ê vti bikar bînim, lê, mixabin, ew hîn di mikrotikê de nehatiye bicîh kirin. Ew ji IPIP-ê cûda dibe ku ew dikare di heman demê de multicast vehewîne û fwmarkan deyne ser pakêtan, ku ji hêla wan ve ew dikarin di iptables û iproute2 (rêveberiya li ser bingeha siyasetê) de werin fîlter kirin. Heke hûn hewceyê fonksiyona herî zêde hewce ne, wê hingê, mînakî, GRE. Lê ji bîr nekin ku em ji bo fonksiyonek zêde bi serê serekî mezin didin.

Hûn dikarin wergera serpêhatiyek baş a navberên tunelê bibînin vir.

Li ser 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

Naha hûn dikarin rêgezên ji bo torên li pişt mikrotik zêde bikin

sudo ip route add A.B.C.D/Prefix via 192.168.255.2

Ji bo ku navbeynkar û rêgezên me piştî ji nû ve destpêkirinê werin rakirin, pêdivî ye ku em navberê di nav /etc/torê/ navgînan de diyar bikin û rêçikan li wir li paş-up zêde bikin, an jî her tiştî di yek pelê de binivîsin, mînakî, /etc/. ipip-ipsec0.conf û wê bi paş-vekêşanê bikişîne, xwediyê pelê, mafan ji bîr nekin û wê bikin îcrakar.

Li jêr pelek mînakek heye

#!/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

Li ser Mikrotik:

Beşa "Navpeyvîn", navgînek nû "Tunnel IP" lê zêde bike:

Tab "Tunnel IP" - "Giştî"
Parîsê
nirxê

Nav
Li gorî we (li vir şûnda wekî IPIP-IPsec0 tê binav kirin)

Mtu
1480 (heke ne diyar be, mikrotik dest bi qutkirina mtu li 68 dike)

Navnîşana Herêmî
192.168.0.2

Navnîşana Dûr
192.168.0.1

IPsec Secret
Zeviyê neçalak bike (ku nebe dê Peerek nû were afirandin)

keepalive
Zeviyê neçalak bikin (wekî din dê navbeynkar bi domdarî qut bibe, ji ber ku mikrotika ji bo van pakêtan formata xwe heye û bi Linux re naxebite)

DSCP
mîratgirtin

Parçe nekin
na

TCP MSS bişkînin
rast

Destûrê bide Fast Path
rast

Beşa "IP" - "Navnîşan", navnîşan lê zêde bike:

Parîsê
nirxê

Navnîşan
192.168.0.2/30

virtual
IPIP-IPsec0

Naha hûn dikarin li pişt makîneyek Linux rê li torê zêde bikin; dema ku rêyek lê zêde bikin, derî dê navbeynkariya meya IPIP-IPsec0 be.

PS

Ji ber ku servera meya Linux transîtîv e, maqûl e ku meriv parametreya Clamp TCP MSS-ê ji bo navgînên ipip-ê li ser wê saz bike:

pelek /etc/iptables.conf bi naveroka jêrîn biafirînin:

*mangle
-A POSTROUTING -o ipip+ -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
COMMIT

û di /etc/torê/navberan de
piştî-up iptables-restore < /etc/iptables.conf

Min nginx li ser torê li pişt mikrotik (ip 10.10.10.1) dimeşîne, wê ji Înternetê bigihîne, lê zêde bike /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 

Ji bîr nekin ku heke hûn fîlterên pakêtê çalak in, destûrên guncan li iptables zêde bikin.

Xweşîn bimînin!

Source: www.habr.com

Add a comment