IPIP IPsec VPN ٹنل لینکس مشین اور Mikrotik کے درمیان NAT فراہم کنندہ کے پیچھے

لینکس: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-generic x86_64)

  • Eth0 1.1.1.1/32 بیرونی IP
  • ipip-ipsec0 192.168.0.1/30 ہماری سرنگ ہوگی

Miktoik: CCR 1009, RouterOS 6.46.5

  • فراہم کنندہ سے Eth0 10.0.0.2/30 اندرونی IP۔ فراہم کنندہ کا بیرونی NAT IP متحرک ہے۔
  • ipip-ipsec0 192.168.0.2/30 ہماری سرنگ ہوگی

ہم ریکون کا استعمال کرتے ہوئے لینکس مشین پر ایک IPsec سرنگ بنائیں گے۔ میں تفصیلات بیان نہیں کروں گا، ایک اچھی بات ہے۔ مضمون у vvpoloskin.

ضروری پیکجوں کو انسٹال کریں:

sudo install racoon ipsec-tools

ہم racoon کو ترتیب دیتے ہیں، یہ مشروط طور پر ipsec سرور کے طور پر کام کرے گا۔ چونکہ مین موڈ میں میکروٹک ایک اضافی کلائنٹ شناخت کنندہ کو منتقل نہیں کر سکتا، اور بیرونی IP ایڈریس جس کے ذریعے یہ لینکس سے جڑتا ہے متحرک ہے، اس لیے پہلے سے شیئر کردہ کلید (پاس ورڈ کی اجازت) کا استعمال کام نہیں کرے گا، کیونکہ پاس ورڈ کو یا تو کے IP ایڈریس کے ساتھ ملایا جانا چاہیے۔ کنیکٹنگ ہوسٹ، یا شناخت کنندہ کے ساتھ۔

ہم RSA کیز کا استعمال کرتے ہوئے اجازت کا استعمال کریں گے۔

ریکون ڈیمون RSA فارمیٹ میں چابیاں استعمال کرتا ہے، اور mikrotik PEM فارمیٹ استعمال کرتا ہے۔ اگر آپ racoon کے ساتھ آنے والی plainrsa-gen یوٹیلیٹی کا استعمال کرتے ہوئے کیز تیار کرتے ہیں، تو آپ اس کی مدد سے Mikrotika کے لیے عوامی کلید کو PEM فارمیٹ میں تبدیل نہیں کر پائیں گے - یہ صرف ایک سمت میں تبدیل ہوتی ہے: PEM سے RSA۔ نہ تو openssl اور نہ ہی ssh-keygen تیار کردہ کلید کو plainrsa-gen کے ذریعے پڑھ سکتے ہیں، اس لیے ان کا استعمال کرکے بھی تبدیلی نہیں کی جا سکتی۔

ہم openssl کا استعمال کرتے ہوئے ایک PEM کلید بنائیں گے اور پھر اسے plainrsa-gen کا استعمال کرتے ہوئے racoon میں تبدیل کریں گے:

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

ہم موصول ہونے والی چابیاں فولڈر میں ڈالیں گے: /etc/racoon/certs/server۔ اس صارف کے مالک کو جس کے نام سے ریکون ڈیمون لانچ کیا گیا ہے (عام طور پر جڑ) کو 600 پرمیشنز پر سیٹ کرنا نہ بھولیں۔

WinBox کے ذریعے منسلک ہونے پر میں mikrotik سیٹ اپ کی وضاحت کروں گا۔

mikrotik پر سرور-name.pub.pem کلید اپ لوڈ کریں: مینو "فائلز" - "اپ لوڈ"۔

"IP" سیکشن - "IP سیکنڈ" - "کیز" ٹیب کو کھولیں۔ اب ہم چابیاں تیار کرتے ہیں - "کی پیدا کریں" بٹن، پھر mikrotika پبلک کی "Expor Pub" کو برآمد کریں۔ کلید، آپ اسے "فائلز" سیکشن سے ڈاؤن لوڈ کر سکتے ہیں، فائل پر دائیں کلک کریں - "ڈاؤن لوڈ"۔

ہم ریکون پبلک کلید، "درآمد" درآمد کرتے ہیں، "فائل کا نام" فیلڈ کی ڈراپ ڈاؤن فہرست میں ہم سرور-name.pub.pem کو تلاش کرتے ہیں جسے ہم نے پہلے ڈاؤن لوڈ کیا تھا۔

mikrotik عوامی کلید کو تبدیل کرنے کی ضرورت ہے۔

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

اور اسے /etc/racoon/certs فولڈر میں ڈالیں، مالک اور حقوق کو نہ بھولیں۔

تبصروں کے ساتھ racoon config: /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 ترتیب

"IP" سیکشن پر واپس جائیں - "IPsec"

"پروفائلز" ٹیب
پیرامیٹر
ویلیو

نام
آپ کی صوابدید پر (بطور ڈیفالٹ)

ہیش الگورتھم
Sh512

خفیہ کاری الگورتھم
aes-128

DH-گروپ
modp2048

Proposhal_check
کا دعوی

لائفٹائم
1d 00:00:00

NAT ٹراورسل
سچ (باکس کو چیک کریں)

DPD
120

ڈی پی ڈی زیادہ سے زیادہ ناکامی۔
5

ساتھیوں کا ٹیب
پیرامیٹر
ویلیو

نام
آپ کی صوابدید پر (اس کے بعد اسے MyPeer کہا جاتا ہے)

ایڈریس
1.1.1.1 (آئی پی لینکس مشینیں)

مقامی پتہ
10.0.0.2 (IP WAN انٹرفیس mikrotik)

پروفائل
پہلے سے طے شدہ

ایکسچینج وضع
اہم

غیر فعال
جھوٹی

INITIAL_CONTACT بھیجیں۔
سچ

تجویز ٹیب
پیرامیٹر
ویلیو

نام
آپ کی صوابدید پر (اس کے بعد اسے MyPeerProposal کہا جاتا ہے)

تصنیف الگورتھم
Sh512

اینکر الگورتھم
aes-128-cbc

لائفٹائم
08:00:00

پی ایف ایس گروپ
modp2048

"شناخت" ٹیب
پیرامیٹر
ویلیو

پیر
مائی پیر

آتوہ طریقہ
rsa کلید

کلیدی
mikrotik.privet.key

ریموٹ کلید
server-name.pub.pem

پالیسی ٹیمپلیٹ گروپ
پہلے سے طے شدہ

نوٹریک چین
خالی

میری شناخت کی قسم
آٹو

ریموٹ ID کی قسم
آٹو

میچ از
ریموٹ آئی ڈی

موڈ کنفیگریشن
خالی

پالیسی بنائیں
نہیں

ٹیب "پالیسیز - جنرل"
پیرامیٹر
ویلیو

پیر
مائی پیر

ٹنل
سچ

Src پتہ
192.168.0.0/30

منزل پتہ
192.168.0.0/30

پروٹوکول
255 (تمام)

سانچہ
جھوٹی

ٹیب "پالیسیز - ایکشن"
پیرامیٹر
ویلیو

عمل
خفیہ

سطح
ضرورت ہے

IPsec پروٹوکول
ESP

تجویز
MyPeerProposal

غالباً، میری طرح، آپ نے اپنے WAN انٹرفیس پر snat/masquerade کو ترتیب دیا ہے؛ اس اصول کو ایڈجسٹ کرنے کی ضرورت ہے تاکہ باہر جانے والے ipsec پیکٹ ہماری سرنگ میں جائیں:
"IP" - "فائر وال" سیکشن پر جائیں۔
"NAT" ٹیب، ہمارے snat/masquerade اصول کو کھولیں۔

اعلی درجے کی ٹیب
پیرامیٹر
ویلیو

IPsec پالیسی
out: کوئی نہیں۔

ریکون شیطان کو دوبارہ شروع کرنا

sudo systemctl restart racoon

اگر ریکون دوبارہ شروع ہونے پر شروع نہیں ہوتا ہے، تو ترتیب میں ایک خرابی ہے؛ syslog میں، racoon اس لائن نمبر کے بارے میں معلومات دکھاتا ہے جس میں غلطی کا پتہ چلا تھا۔

OS کے بوٹ ہونے پر، نیٹ ورک انٹرفیس کے سامنے آنے سے پہلے ریکون ڈیمون شروع ہو جاتا ہے، اور ہم نے سننے کے سیکشن میں strict_address کا اختیار بیان کیا ہے؛ آپ کو سسٹمڈ فائل میں racoon یونٹ شامل کرنے کی ضرورت ہے۔
/lib/systemd/system/racoon.service، [Unit] سیکشن میں، لائن After=network.target۔

اب ہماری ipsec سرنگیں اوپر ہونی چاہئیں، آؤٹ پٹ کو دیکھیں:

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

اگر سرنگیں اوپر نہیں ہیں تو، syslog، یا journalctl -u racoon کو دیکھیں۔

اب آپ کو L3 انٹرفیس کو ترتیب دینے کی ضرورت ہے تاکہ ٹریفک کو روٹ کیا جاسکے۔ مختلف آپشنز ہیں، ہم IPIP استعمال کریں گے، چونکہ mikrotik اس کی حمایت کرتا ہے، میں vti استعمال کروں گا، لیکن بدقسمتی سے، یہ ابھی تک mikrotik میں لاگو نہیں ہوا ہے۔ یہ IPIP سے اس لحاظ سے مختلف ہے کہ یہ اضافی طور پر ملٹی کاسٹ کو سمیٹ سکتا ہے اور پیکٹوں پر fwmarks لگا سکتا ہے جس کے ذریعے انہیں iptables اور iproute2 (پالیسی پر مبنی روٹنگ) میں فلٹر کیا جا سکتا ہے۔ اگر آپ کو زیادہ سے زیادہ فعالیت کی ضرورت ہے، تو، مثال کے طور پر، GRE. لیکن یہ نہ بھولیں کہ ہم ایک بڑے اوور ہیڈ کے ساتھ اضافی فعالیت کے لیے ادائیگی کرتے ہیں۔

آپ ٹنل انٹرفیس کے اچھے جائزے کا ترجمہ دیکھ سکتے ہیں۔ یہاں.

لینکس پر:

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

اب آپ mikrotik کے پیچھے نیٹ ورکس کے لیے راستے شامل کر سکتے ہیں۔

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

ریبوٹ کے بعد ہمارے انٹرفیس اور روٹس کے بڑھنے کے لیے، ہمیں انٹرفیس کو /etc/network/interfaces میں بیان کرنا ہوگا اور پوسٹ اپ میں وہاں روٹس شامل کرنا ہوں گے، یا سب کچھ ایک فائل میں لکھنا ہوگا، مثال کے طور پر، /etc/ipip -ipsec0.conf اور اسے پوسٹ اپ کے ذریعے کھینچیں، فائل کے مالک، حقوق کے بارے میں مت بھولیں اور اسے قابل عمل بنائیں۔

ذیل میں ایک مثال فائل ہے۔

#!/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 پر:

سیکشن "انٹرفیس"، ایک نیا انٹرفیس "IP سرنگ" شامل کریں:

ٹیب "IP سرنگ" - "جنرل"
پیرامیٹر
ویلیو

نام
آپ کی صوابدید پر (اس کے بعد IPIP-IPsec0 کہا جاتا ہے)

MTU
1480 (اگر متعین نہ ہو تو میکروٹک ایم ٹی یو کو 68 تک کاٹنا شروع کر دیتا ہے)

مقامی پتہ
192.168.0.2

دور دراز کا پتہ
192.168.0.1

IPsec خفیہ
فیلڈ کو غیر فعال کریں (ورنہ ایک نیا پیر بنایا جائے گا)

زندہ رہو
فیلڈ کو غیر فعال کریں (بصورت دیگر انٹرفیس مسلسل بند ہو جائے گا، کیونکہ میکروٹیکا کا ان پیکجز کے لیے اپنا فارمیٹ ہے اور یہ لینکس کے ساتھ کام نہیں کرتا)

ڈی ایس سی پی
میراث

ٹکڑے ٹکڑے نہ کریں۔
نہیں

کلیمپ TCP MSS
سچ

فاسٹ پاتھ کی اجازت دیں۔
سچ

سیکشن "IP" - "پتے"، پتہ شامل کریں:

پیرامیٹر
ویلیو

ایڈریس
192.168.0.2/30

انٹرفیس
IPIP-IPsec0

اب آپ لینکس مشین کے پیچھے نیٹ ورک میں روٹس شامل کر سکتے ہیں؛ روٹ شامل کرتے وقت، گیٹ وے ہمارا IPIP-IPsec0 انٹرفیس ہوگا۔

PS

چونکہ ہمارا لینکس سرور عبوری ہے، اس پر ipip انٹرفیس کے لیے Clamp TCP MSS پیرامیٹر سیٹ کرنا سمجھ میں آتا ہے:

درج ذیل مواد کے ساتھ فائل /etc/iptables.conf بنائیں:

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

اور /etc/network/interfaces میں
پوسٹ اپ iptables-restore < /etc/iptables.conf

میرے پاس نیٹ ورک پر mikrotik (ip 10.10.10.1) کے پیچھے nginx چل رہا ہے، اسے انٹرنیٹ سے قابل رسائی بنائیں، اسے /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 

اگر آپ کے پاس پیکٹ فلٹرز فعال ہیں تو iptables میں مناسب اجازتیں شامل کرنا نہ بھولیں۔

آپ کو مبارک ہو!

ماخذ: www.habr.com

نیا تبصرہ شامل کریں