Linux makinesi ile NAT sağlayıcısının arkasındaki Mikrotik arasında IPIP IPsec VPN tüneli

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

  • Eth0 1.1.1.1/32 harici IP
  • ipip-ipsec0 192.168.0.1/30 bizim tünelimiz olacak

Miktoik: CCR 1009, YönlendiriciOS 6.46.5

  • Eth0 10.0.0.2/30 sağlayıcının dahili IP'si. Sağlayıcının harici NAT IP'si dinamiktir.
  • ipip-ipsec0 192.168.0.2/30 bizim tünelimiz olacak

Racoon kullanarak Linux makinede IPsec tüneli oluşturacağız. Detayları anlatmayacağım, iyi bir tane var makale у vvpoloskin.

Gerekli paketleri kurun:

sudo install racoon ipsec-tools

Racon'u yapılandırıyoruz, koşullu olarak ipsec sunucusu görevi görecek. Mikrotik ana modda ek bir istemci tanımlayıcısı iletemediğinden ve Linux'a bağlandığı harici IP adresi dinamik olduğundan, şifrenin IP adresiyle eşleşmesi gerektiğinden önceden paylaşılmış bir anahtar (şifre yetkilendirmesi) kullanmak işe yaramayacaktır. bağlanan ana bilgisayar veya tanımlayıcı ile.

Yetkilendirmeyi RSA anahtarlarını kullanarak kullanacağız.

Racoon arka plan programı RSA formatındaki anahtarları kullanır ve mikrotik PEM formatını kullanır. Anahtarları racoon ile birlikte gelen plainrsa-gen yardımcı programını kullanarak oluşturursanız, Mikrotika'nın genel anahtarını onun yardımıyla PEM formatına dönüştüremezsiniz - yalnızca tek yönde dönüştürür: PEM'den RSA'ya. Ne openssl ne de ssh-keygen, plainrsa-gen tarafından oluşturulan anahtarı okuyamadı, dolayısıyla bunları kullanarak dönüşüm de mümkün olmayacak.

Openssl'yi kullanarak bir PEM anahtarı oluşturacağız ve ardından bunu plainrsa-gen'i kullanarak racoon'a dönüştüreceğiz:

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

Alınan anahtarları şu klasöre koyacağız: /etc/racoon/certs/server. Racoon arka plan programının başlatıldığı kullanıcının sahibini (genellikle root) 600 izne ayarlamayı unutmayın.

WinBox üzerinden bağlanırken mikrotik kurulumunu anlatacağım.

Server-name.pub.pem anahtarını mikrotik'e yükleyin: Menü “Dosyalar” - “Yükle”.

“IP” bölümünü - “IP sn” - “Anahtarlar” sekmesini açın. Şimdi anahtarlar oluşturuyoruz - "Anahtar Oluştur" düğmesi, ardından mikrotika ortak anahtarı "Expor Pub"ı dışa aktarıyoruz. Anahtar", "Dosyalar" bölümünden indirebilirsiniz, dosyaya sağ tıklayın - "İndir".

Daha önce indirdiğimiz sunucu-adı.pub.pem dosyasını aradığımız “Dosya adı” alanının açılır listesinden “Import” adlı racoon public anahtarını içe aktarıyoruz.

Mikrotik genel anahtarının dönüştürülmesi gerekiyor

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

ve sahibini ve haklarını unutmadan onu /etc/racoon/certs klasörüne koyun.

Yorumlarla birlikte racoon yapılandırması: /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 yapılandırma

"IP" bölümüne dönün - "IPsec"

"Profiller" sekmesi
Parametre
Değer

Name
Kendi takdirinize bağlı olarak (varsayılan olarak varsayılan)

Karma Algoritma
sha512

Şifreleme Algoritması
AES-128

DH Grubu
modp2048

Teklif_check
iddia

Ömür
1 gün 00:00:00

NAT Geçişi
doğru (kutuyu işaretleyin)

DPD
120

DPD Maksimum arıza
5

Benzerler sekmesi
Parametre
Değer

Name
Kendi takdirinize bağlı olarak (bundan sonra MyPeer olarak anılacaktır)

Adres
1.1.1.1 (IP Linux makineleri)

Yerel adres
10.0.0.2 (IP WAN arayüzü mikrotik)

Profil
varsayılan

Değişim modu
ana

Pasif
yanlış

INITIAL_CONTACT'ı gönder
gerçek

Teklif sekmesi
Parametre
Değer

Name
Kendi takdirinize bağlı olarak (bundan böyle MyPeerProposal olarak anılacaktır)

Yetki. Algoritmalar
sha512

Enkr. Algoritmalar
aes-128-cbc

Ömür
08:00:00

PFS Grubu
modp2048

"Kimlikler" sekmesi
Parametre
Değer

Armut
BenimAkranım

Ahh. Yöntem
rsa anahtarı

anahtar
mikrotik.privet.key

Uzak Anahtar
sunucu-adı.pub.pem

Politika Şablonu Grubu
varsayılan

Nottrack Zinciri
boş

Kimlik Türüm
Oto

Uzak Kimlik Türü
Oto

Şuna Göre Eşleştir:
uzak kimlik

Mod Yapılandırması
boş

Politika Oluştur
yok hayır

"Politikalar - Genel" Sekmesi
Parametre
Değer

Armut
BenimAkranım

Tünel
gerçek

Src. Adres
192.168.0.0/30

Hedef Adres
192.168.0.0/30

Protokol
255 (tümü)

şablon
yanlış

"Politikalar - Eylem" Sekmesi
Parametre
Değer

Action
şifrelemek

seviye
gerekmek

IPsec Protokolleri
esp

öneri
MyPeerProposal

Büyük olasılıkla, benim gibi, WAN arayüzünüzde yapılandırılmış snat/maskeli balo var; bu kuralın, giden ipsec paketlerinin tünelimize gireceği şekilde ayarlanması gerekir:
"IP" - "Güvenlik Duvarı" bölümüne gidin.
"NAT" sekmesi, snat/maskeli balo kuralımızı açın.

Gelişmiş sekme
Parametre
Değer

IPsec Politikası
dışarı: yok

Rakun iblisini yeniden başlatmak

sudo systemctl restart racoon

Eğer racoon yeniden başlatıldığında başlamazsa, yapılandırmada bir hata vardır; sistem günlüğünde racoon, hatanın tespit edildiği satır numarası hakkındaki bilgileri görüntüler.

İşletim sistemi önyüklendiğinde, ağ arayüzleri açılmadan önce racoon arka plan programı başlar ve dinleme bölümünde strict_address seçeneğini belirttik; racoon ünitesini systemd dosyasına eklemeniz gerekir.
/lib/systemd/system/racoon.service, [Birim] bölümünde After=network.target satırı.

Artık ipsec tünellerimiz açık olmalı, çıktıya bakın:

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

Tüneller açık değilse sistem günlüğüne veya Journalctl -u racoon'a bakın.

Artık trafiğin yönlendirilebilmesi için L3 arayüzlerini yapılandırmanız gerekiyor. Farklı seçenekler var, IPIP kullanacağız, mikrotik desteklediği için vti kullanırdım ama maalesef mikrotik'te henüz uygulanmadı. Ek olarak çok noktaya yayını kapsülleyebilmesi ve paketlere iptables ve iproute2 (politika tabanlı yönlendirme) ile filtrelenebilecek fwmark'lar koyabilmesi açısından IPIP'ten farklıdır. Maksimum işlevselliğe ihtiyacınız varsa, örneğin GRE. Ancak büyük bir baş üstü yükün ek işlevselliği için para ödediğimizi unutmayın.

Tünel arayüzlerine ilişkin iyi bir incelemenin çevirisini görebilirsiniz burada.

Linux'ta:

# Создаем интерфейс
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

Artık mikrotik arkasındaki ağlar için rotalar ekleyebilirsiniz

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

Arayüzümüzün ve rotalarımızın yeniden başlatmanın ardından yükseltilmesi için, arayüzü /etc/network/interfaces dosyasında tanımlamamız ve post-up'ta buraya rotalar eklememiz veya her şeyi tek bir dosyaya yazmamız gerekir, örneğin /etc/ ipip-ipsec0.conf dosyasını açın ve post-up yoluyla çekin, dosya sahibini, haklarını unutmayın ve onu yürütülebilir hale getirin.

Aşağıda örnek bir dosya bulunmaktadır

#!/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'te:

“Arayüzler” bölümüne yeni bir “IP tüneli” arayüzü ekleyin:

“IP tüneli” sekmesi - “Genel”
Parametre
Değer

Name
Kendi takdirinize bağlı olarak (bundan sonra IPIP-IPsec0 olarak anılacaktır)

MTU
1480 (belirtilmemişse mikrotik mtu'yu 68'e kesmeye başlar)

Yerel adres
192.168.0.2

Uzak Adres
192.168.0.1

IPsec Sırrı
Alanı devre dışı bırakın (aksi takdirde yeni bir Eş oluşturulacaktır)

Hayatta kal
Alanı devre dışı bırakın (aksi takdirde mikrotika'nın bu paketler için kendi formatı olduğundan ve Linux ile çalışmadığından arayüz sürekli olarak kapanacaktır)

DSCP
miras

Parçalama
yok hayır

TCP MSS'yi kelepçeleyin
gerçek

Hızlı Yola İzin Ver
gerçek

“IP” - “Adresler” bölümü, adresi ekleyin:

Parametre
Değer

Adres
192.168.0.2/30

arayüzey
IPIP-IPsec0

Artık bir Linux makinesinin arkasındaki ağa rota ekleyebilirsiniz; rota eklerken ağ geçidi IPIP-IPsec0 arayüzümüz olacaktır.

PS

Linux sunucumuz geçişli olduğundan ipip arayüzleri için Clamp TCP MSS parametresini üzerinde ayarlamak mantıklıdır:

aşağıdaki içeriğe sahip bir /etc/iptables.conf dosyası oluşturun:

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

ve /etc/network/interfaces içinde
post-up iptables-restore < /etc/iptables.conf

Mikrotik'in (ip 10.10.10.1) arkasındaki ağda çalışan nginx'im var, onu internetten erişilebilir hale getiriyorum, /etc/iptables.conf dosyasına ekliyorum:

*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 

Paket filtreleriniz etkinse iptables'a uygun izinleri eklemeyi unutmayın.

Sağlıklı kalın!

Kaynak: habr.com

Yorum ekle