IPIP IPsec VPN tunnel ma waena o ka mīkini Linux a me Mikrotik ma hope o ka mea hoʻolako NAT

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

  • Eth0 1.1.1.1/32 IP waho
  • ʻO ipip-ipsec0 192.168.0.1/30 ko mākou tunnel

Miktoik: CCR 1009, RouterOS 6.46.5

  • Eth0 10.0.0.2/30 IP kūloko mai ka mea hāʻawi. He ikaika ka NAT IP waho o ka mea hoʻolako.
  • ʻO ipip-ipsec0 192.168.0.2/30 ko mākou tunnel

E hana mākou i kahi tunnel IPsec ma kahi mīkini Linux e hoʻohana ana i ka racoon. ʻAʻole wau e wehewehe i nā kikoʻī, aia kahi maikaʻi 'atikala у vvpoloskin.

E hoʻouka i nā pūʻolo pono:

sudo install racoon ipsec-tools

Hoʻonohonoho mākou i ka racoon, e hana ia ma ke ʻano he kikowaena ipsec. No ka mea ʻaʻole hiki i ka mikrotik ma ke ʻano nui ke hoʻouna i kahi mea kūʻai aku hou, a ʻo ka IP IP waho kahi e hoʻopili ai iā Linux he ikaika, me ka hoʻohana ʻana i kahi kī preshared (ʻae ʻōlelo huna) ʻaʻole e hana, no ka mea, pono e hoʻohālikelike ʻia ka ʻōlelo huna me ka IP address o ka mea hoʻopili, a i ʻole me ka mea hōʻike.

E hoʻohana mākou i ka mana me ka hoʻohana ʻana i nā kī RSA.

Hoʻohana ka racoon daemon i nā kī ma ke ʻano RSA, a hoʻohana ʻo mikrotik i ka format PEM. Inā hana ʻoe i nā kī me ka hoʻohana ʻana i ka pono plainrsa-gen e hele mai me ka racoon, a laila ʻaʻole hiki iā ʻoe ke hoʻololi i ke kī ākea no Mikrotika i ka format PEM me kāna kōkua - hoʻololi ʻo ia i hoʻokahi ala: PEM i RSA. ʻAʻole hiki i openssl a i ʻole ssh-keygen ke heluhelu i ke kī i hana ʻia e plainrsa-gen, no laila ʻaʻole hiki ke hoʻololi ʻia me ka hoʻohana ʻana iā lākou.

E hana mākou i kahi kī PEM me ka hoʻohana ʻana i openssl a laila hoʻololi iā ia no ka racoon me ka hoʻohana ʻana i ka 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

E kau mākou i nā kī i loaʻa i loko o ka waihona: /etc/racoon/certs/server. Mai poina e hoʻonoho i ka mea nona ka mea hoʻohana ma lalo o kona inoa i hoʻokuʻu ʻia ka daemon racoon (maʻamau maʻamau) i 600 mau ʻae.

E wehewehe wau i ka hoʻonohonoho mikrotik i ka wā e hoʻopili ai ma WinBox.

Hoʻouka i ke kī server-name.pub.pem i mikrotik: Menu "Files" - "Upload".

E wehe i ka ʻāpana "IP" - "IP sec" - "Keys" tab. I kēia manawa, hana mākou i nā kī - ke pihi "Generate Key", a laila e hoʻokuʻu aku i ke kī lehulehu mikrotika "Expor Pub. Key", hiki iā ʻoe ke hoʻoiho iā ia mai ka ʻāpana "Files", kaomi pololei ma ka faila - "Download".

Hoʻokomo mākou i ke kī lehulehu racoon, "Import", i ka papa inoa hāʻule i lalo o ka kahua "File name" e ʻimi mākou i ka server-name.pub.pem i hoʻoiho mua ʻia.

Pono e hoʻololi ʻia ke kī lehulehu mikrotik

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

a waiho i loko o ka waihona /etc/racoon/certs, me ka poina ole i ka mea nona a me na pono.

Racoon config me nā ʻōlelo: /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

E hoʻi i ka ʻāpana "IP" - "IPsec"

ʻO ka pā "Profiles".
ʻO ka pākuhi
waiwai

inoa
Ma kou manaʻo (ma ka paʻamau)

Hash Algorithm
sha512

Algorithm hoʻopunipuni
aes-128

DH-Puʻupuʻu
modp2048

Hōʻike_kau
koi ana

Lifetime
1d 00:00:00

NAT Kaahele
ʻoiaʻiʻo (e nānā i ka pahu)

DPD
120

DPD ʻAʻole hiki ke kiʻekiʻe
5

Peers tab
ʻO ka pākuhi
waiwai

inoa
Ma kou manaʻo (i kapa ʻia ʻo MyPeer)

Address
1.1.1.1 (nā mīkini IP Linux)

Wahi Kūlana
10.0.0.2 (IP WAN interface mikrotik)

Profile
ka paʻamau

ʻAno Kūʻai
ka papa kuhikuhiE

ʻO Passive
wahahee

E hoʻouna iā INITIAL_CONTACT
oiaio

Pākuʻi manaʻo
ʻO ka pākuhi
waiwai

inoa
Ma kou manaʻo (i kapa ʻia ʻo MyPeerProposal)

Auth. Algorithms
sha512

ʻO Encr. Algorithms
aes-128-cbc

Lifetime
08:00:00

Pūʻulu PFS
modp2048

ʻO ka ʻaoʻao "Identities".
ʻO ka pākuhi
waiwai

Hoa hele
MyPeer

Atuh. Kaʻina hana
kī rsa

Key
mikrotik.privet.key

Kī Mamao
server-name.pub.pem

Pūʻulu Kūlana Kūlana
ka paʻamau

Notrack Chain
nele

ʻO kaʻu ʻano ID
ola auto

ʻAno ID mamao
ola auto

Pāʻani Na
id mamao

Hoʻonohonoho ʻano
nele

Hoʻokumu i ke kulekele
ʻaʻole

Tab "Kulekele - General"
ʻO ka pākuhi
waiwai

Hoa hele
MyPeer

Kohu
oiaio

Ua ʻōlelo ʻo Src. Heluhelu
192.168.0.0/30

ʻO Dest. Heluhelu
192.168.0.0/30

Hōʻoia
255 (nā mea a pau)

UAAIIeIA
wahahee

Pahu "Kulekele - Hana"
ʻO ka pākuhi
waiwai

hana
hoʻopā'ālua

Papa
koi

Nā Kūlana IPsec
esp

Hāʻawi
MyPeerProposal

ʻO ka mea nui, e like me aʻu, ua hoʻonohonoho ʻia ʻoe i ka snat/masquerade ma kāu interface WAN; pono e hoʻoponopono ʻia kēia lula i hiki i nā ʻeke ipsec puka i loko o kā mākou tunnel:
E hele i ka ʻāpana "IP" - "Firewall".
"NAT", wehe i kā mākou lula snat/masquerade.

Papa Kiekie
ʻO ka pākuhi
waiwai

Kulekele IPsec
waho: ʻaʻohe

Hoʻomaka hou i ka daimonio racoon

sudo systemctl restart racoon

Inā ʻaʻole hoʻomaka ka racoon i ka hoʻomaka hou ʻana, aia ka hewa i ka config; ma ka syslog, hōʻike ʻo racoon i ka ʻike e pili ana i ka helu laina i ʻike ʻia ai ka hewa.

Ke hoʻomaka nei nā kāmaʻa OS, hoʻomaka ka racoon daemon ma mua o ka lawe ʻia ʻana o nā kikowaena pūnaewele, a ua kuhikuhi mākou i ke koho strict_address ma ka ʻāpana hoʻolohe; pono ʻoe e hoʻohui i ka hui racoon i ka faila systemd.
/lib/systemd/system/racoon.service, ma ka ʻāpana [Unit], laina After=network.target.

I kēia manawa, pono kā mākou ipsec tunnels, e nānā i ka hopena:

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

Inā ʻaʻole i luna nā tunnels, e nānā i ka syslog, a i ʻole journalctl -u racoon.

I kēia manawa pono ʻoe e hoʻonohonoho i nā loulou L3 i hiki ke hoʻokele ʻia ke kaʻa. Aia nā koho like ʻole, e hoʻohana mākou i ka IPIP, ʻoiai ke kākoʻo nei ʻo mikrotik iā ia, e hoʻohana wau i ka vti, akā naʻe, ʻaʻole i hoʻokō ʻia ma mikrotik. He ʻokoʻa ia mai ka IPIP no ka mea hiki iā ia ke hoʻopili hou i ka multicast a kau i nā fwmarks ma nā ʻeke, kahi e hiki ai ke kānana ʻia i nā iptables a me iproute2 (ka hoʻokele pili kulekele). Inā makemake ʻoe i ka hana kiʻekiʻe, a laila, no ka laʻana, GRE. Akā, mai poina e uku mākou no nā hana hou me ke poʻo poʻo nui.

Hiki iā ʻoe ke ʻike i ka unuhi ʻana o kahi loiloi maikaʻi o nā pilina tunnel maanei.

Ma 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

I kēia manawa hiki iā ʻoe ke hoʻohui i nā ala no nā pūnaewele ma hope o mikrotik

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

I mea e hoʻokiʻekiʻe ʻia ai kā mākou interface a me nā ala ma hope o ka reboot, pono mākou e wehewehe i ka interface i /etc/network/interfaces a hoʻohui i nā ala i laila i ka post-up, a i ʻole e kākau i nā mea āpau i hoʻokahi faila, no ka laʻana, /etc/ ipip-ipsec0.conf a huki iā ia ma ka post-up, mai poina e pili ana i ka mea nona ka faila, kuleana a hoʻokō.

Aia ma lalo kahi faila laʻana

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

Ma luna o Mikrotik:

Mahele "Interfaces", hoʻohui i kahi kikowaena hou "IP tunnel":

Ka papa "IP tunnel" - "General"
ʻO ka pākuhi
waiwai

inoa
Ma kou manaʻo (i kapa ʻia ʻo IPIP-IPsec0)

KANAKA
1480 (inā ʻaʻole i kuhikuhi ʻia, hoʻomaka ka mikrotik e ʻoki i ka mtu i 68)

Wahi Kūlana
192.168.0.2

Wahi mamao
192.168.0.1

Mea huna IPsec
Hoʻopau i ke kahua (inā ʻaʻole e hana ʻia kahi Peer hou)

mālama ola
E hoʻopau i ke kahua (inā ʻaʻole e pio mau ka interface, no ka mea, aia ka mikrotika i kāna ʻano ponoʻī no kēia mau pūʻulu a ʻaʻole hana me Linux)

ʻO DSCP
e noho

Mai Māhele
ʻaʻole

Hoʻopili iā TCP MSS
oiaio

ʻAe i ke ala wikiwiki
oiaio

Mahele "IP" - "Addresses", hoʻohui i ka helu wahi:

ʻO ka pākuhi
waiwai

Address
192.168.0.2/30

nānaina
IPIP-IPsec0

I kēia manawa hiki iā ʻoe ke hoʻohui i nā ala i ka pūnaewele ma hope o kahi mīkini Linux; i ka wā e hoʻohui ai i kahi ala, ʻo ka ʻīpuka ko mākou IPIP-IPsec0 interface.

PS

No ka mea he transitive kā mākou kikowaena Linux, kūpono ke hoʻonohonoho ʻana i ka ʻāpana Clamp TCP MSS no nā pili ipip ma luna ona:

hana i kahi faila /etc/iptables.conf me kēia mau mea:

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

a i loko o /etc/network/interfaces
post-up iptables-restore < /etc/iptables.conf

Ke holo nei au i ka nginx ma ka pūnaewele ma hope o mikrotik (ip 10.10.10.1), e hoʻohana iā ia mai ka Pūnaewele, e hoʻohui iā /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 

Mai poina e hoʻohui i nā ʻae kūpono i nā iptables inā loaʻa iā ʻoe nā kānana packet.

E noho maikaʻi!

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka