IPIP IPsec VPN tunnel ระหว่างเครื่อง Linux และ Mikrotik ที่อยู่ด้านหลังผู้ให้บริการ NAT

ลินุกซ์: Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-91-ทั่วไป x86_64)

  • Eth0 1.1.1.1/32 IP ภายนอก
  • ipip-ipsec0 192.168.0.1/30 จะเป็นอุโมงค์ของเรา

มิกโตอิก: CCR 1009, เราเตอร์ OS 6.46.5

  • Eth0 10.0.0.2/30 IP ภายในจากผู้ให้บริการ NAT IP ภายนอกของผู้ให้บริการเป็นแบบไดนามิก
  • ipip-ipsec0 192.168.0.2/30 จะเป็นอุโมงค์ของเรา

เราจะสร้างอุโมงค์ IPsec บนเครื่อง Linux โดยใช้ racoon ฉันจะไม่อธิบายรายละเอียดมีสิ่งที่ดี บทความ у วีวีโปโลสกิน.

ติดตั้งแพ็คเกจที่จำเป็น:

sudo install racoon ipsec-tools

เรากำหนดค่าแร็กคูนมันจะทำหน้าที่เป็นเซิร์ฟเวอร์ ipsec ตามเงื่อนไข เนื่องจาก mikrotik ในโหมดหลักไม่สามารถส่งตัวระบุไคลเอนต์เพิ่มเติมได้และที่อยู่ IP ภายนอกที่เชื่อมต่อกับ Linux นั้นเป็นแบบไดนามิก การใช้คีย์ที่แชร์ล่วงหน้า (การอนุญาตรหัสผ่าน) จะไม่ทำงานเนื่องจากรหัสผ่านจะต้องตรงกับที่อยู่ IP ของ โฮสต์ที่เชื่อมต่อหรือมีตัวระบุ

เราจะใช้การอนุญาตโดยใช้คีย์ RSA

racoon daemon ใช้คีย์ในรูปแบบ RSA และ mikrotik ใช้รูปแบบ PEM หากคุณสร้างคีย์โดยใช้ยูทิลิตี้ plainrsa-gen ที่มาพร้อมกับ racoon คุณจะไม่สามารถแปลงคีย์สาธารณะสำหรับ Mikrotika เป็นรูปแบบ PEM ด้วยความช่วยเหลือ โดยจะแปลงในทิศทางเดียวเท่านั้น: PEM เป็น RSA ทั้ง openssl และ ssh-keygen ไม่สามารถอ่านคีย์ที่สร้างโดย plainrsa-gen ได้ ดังนั้นการแปลงจะไม่สามารถทำได้เช่นกัน

เราจะสร้างคีย์ PEM โดยใช้ openssl จากนั้นแปลงเป็น racoon โดยใช้ 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

เราจะใส่คีย์ที่ได้รับลงในโฟลเดอร์: /etc/racoon/certs/server อย่าลืมตั้งค่าเจ้าของผู้ใช้ภายใต้ชื่อ racoon daemon ที่เปิดตัว (โดยปกติคือรูท) เป็น 600 สิทธิ์

ฉันจะอธิบายการตั้งค่า mikrotik เมื่อเชื่อมต่อผ่าน WinBox

อัปโหลดคีย์ server-name.pub.pem ไปที่ mikrotik: เมนู "ไฟล์" - "อัปโหลด"

เปิดส่วน "IP" - "IP วินาที" - แท็บ "คีย์" ตอนนี้เราสร้างคีย์ - ปุ่ม "สร้างคีย์" จากนั้นส่งออกคีย์สาธารณะของ Mikrotika "Expor Pub คีย์" คุณสามารถดาวน์โหลดได้จากส่วน "ไฟล์" คลิกขวาที่ไฟล์ - "ดาวน์โหลด"

เรานำเข้าคีย์สาธารณะแร็กคูน "นำเข้า" ในรายการแบบเลื่อนลงของฟิลด์ "ชื่อไฟล์" ที่เราค้นหา server-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; # Сжимать передаваемые данные, алгоритм сжатия предлагается только один.
}

การกำหนดค่าไมโครติก

กลับไปที่ส่วน "IP" - "IPsec"

แท็บ "โปรไฟล์"
พารามิเตอร์
มูลค่า

Name
ขึ้นอยู่กับดุลยพินิจของคุณ (โดยค่าเริ่มต้น)

อัลกอริทึมแฮช
sha512

อัลกอริทึมการเข้ารหัส
aes-128

DH-กลุ่ม
ม็อดพี2048

Proposhal_check
ข้อเรียกร้อง

ตลอดชีวิต
1 วัน 00:00:00 น

การข้ามผ่านของ NAT
จริง (ทำเครื่องหมายในช่อง)

DPD
120

DPD ความล้มเหลวสูงสุด
5

แท็บเพียร์
พารามิเตอร์
มูลค่า

Name
ขึ้นอยู่กับดุลยพินิจของคุณ (ต่อไปนี้จะเรียกว่า MyPeer)

ที่อยู่
1.1.1.1 (เครื่อง IP Linux)

ที่อยู่ในท้องถิ่น
10.0.0.2 (ไมโครติกอินเตอร์เฟส IP WAN)

โปรไฟล์
ผิดนัด

โหมดการแลกเปลี่ยน
หลัก

Passive
เท็จ

ส่ง INITIAL_CONTACT
จริง

แท็บข้อเสนอ
พารามิเตอร์
มูลค่า

Name
ขึ้นอยู่กับดุลยพินิจของคุณ (ต่อไปนี้จะเรียกว่า MyPeerProposal)

การรับรองความถูกต้อง อัลกอริทึม
sha512

ทั้งหมด อัลกอริทึม
aes-128-cbc

ตลอดชีวิต
08:00:00

พีเอฟเอส กรุ๊ป
ม็อดพี2048

แท็บ "ข้อมูลประจำตัว"
พารามิเตอร์
มูลค่า

ลูกแพร์
มายเพียร์

อาตู่. วิธี
คีย์อาร์เอสเอ

คีย์
mikrotik.privet.key

กุญแจรีโมท
เซิร์ฟเวอร์ name.pub.pem

กลุ่มเทมเพลตนโยบาย
ผิดนัด

นอแทรค เชน
ว่างเปล่า

ประเภทบัตรประจำตัวของฉัน
รถยนต์

ประเภท ID ระยะไกล
รถยนต์

จับคู่โดย
รหัสระยะไกล

การกำหนดค่าโหมด
ว่างเปล่า

สร้างนโยบาย
ไม่

แท็บ "นโยบาย - ทั่วไป"
พารามิเตอร์
มูลค่า

ลูกแพร์
มายเพียร์

อุโมงค์
จริง

รศ. ที่อยู่
192.168.0.0/30

ปลายทาง ที่อยู่
192.168.0.0/30

โปรโตคอล
255 (ทั้งหมด)

แบบ
เท็จ

แท็บ "นโยบาย - การดำเนินการ"
พารามิเตอร์
มูลค่า

การกระทำ
การเข้ารหัสลับ

ชั้น
จำเป็นต้อง

โปรโตคอล IPsec
ESP

ข้อเสนอ
MyPeerProposal

เป็นไปได้มากเช่นเดียวกับฉัน คุณได้กำหนดค่า snat/masquerade บนอินเทอร์เฟซ WAN ของคุณ กฎนี้จำเป็นต้องได้รับการปรับเปลี่ยนเพื่อให้แพ็กเก็ต ipsec ขาออกเข้าไปในอุโมงค์ของเรา:
ไปที่ส่วน "IP" - "ไฟร์วอลล์"
แท็บ "NAT" เปิดกฎ snat/masquerade ของเรา

แท็บขั้นสูง
พารามิเตอร์
มูลค่า

นโยบาย IPsec
ออก: ไม่มี

รีสตาร์ทแรคคูนอสูร

sudo systemctl restart racoon

หาก racoon ไม่เริ่มทำงานเมื่อรีสตาร์ท แสดงว่าเกิดข้อผิดพลาดในการกำหนดค่า ใน syslog racoon จะแสดงข้อมูลเกี่ยวกับหมายเลขบรรทัดที่ตรวจพบข้อผิดพลาด

เมื่อระบบปฏิบัติการบูท racoon daemon จะเริ่มทำงานก่อนที่อินเทอร์เฟซเครือข่ายจะปรากฏขึ้น และเราระบุตัวเลือก strict_address ไว้ในส่วน Listen คุณต้องเพิ่มหน่วย racoon ลงในไฟล์ systemd
/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

บนไมโครติก:

ส่วน “อินเทอร์เฟซ” เพิ่มอินเทอร์เฟซใหม่ “อุโมงค์ IP”:

แท็บ “อุโมงค์ IP” - “ทั่วไป”
พารามิเตอร์
มูลค่า

Name
ขึ้นอยู่กับดุลยพินิจของคุณ (ต่อไปนี้จะเรียกว่า IPIP-IPsec0)

MTU
1480 (ถ้าไม่ระบุ mikrotik จะเริ่มตัด mtu เป็น 68)

ที่อยู่ในท้องถิ่น
192.168.0.2

ที่อยู่ระยะไกล
192.168.0.1

ความลับของ IPsec
ปิดการใช้งานฟิลด์ (มิฉะนั้นจะสร้าง Peer ใหม่)

ให้มีชีวิตอยู่
ปิดการใช้งานฟิลด์ (มิฉะนั้นอินเทอร์เฟซจะปิดอยู่ตลอดเวลาเนื่องจาก mikrotika มีรูปแบบของตัวเองสำหรับแพ็คเกจเหล่านี้และไม่ทำงานกับ Linux)

ดีเอสซีพี
สืบทอด

อย่าแยกส่วน
ไม่

แคลมป์ TCP MSS
จริง

อนุญาตเส้นทางด่วน
จริง

ส่วน “IP” - “ที่อยู่” เพิ่มที่อยู่:

พารามิเตอร์
มูลค่า

ที่อยู่
192.168.0.2/30

อินเตอร์เฟซ
IPIP-IPsec0

ตอนนี้คุณสามารถเพิ่มเส้นทางไปยังเครือข่ายด้านหลังเครื่อง Linux ได้ เมื่อเพิ่มเส้นทาง เกตเวย์จะเป็นอินเทอร์เฟซ IPIP-IPsec0 ของเรา

PS

เนื่องจากเซิร์ฟเวอร์ Linux ของเราเป็นแบบสกรรมกริยา จึงเหมาะสมที่จะตั้งค่าพารามิเตอร์ Clamp TCP MSS สำหรับอินเทอร์เฟซ ipip บนเซิร์ฟเวอร์ดังกล่าว:

สร้างไฟล์ /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

ฉันมี nginx ทำงานบนเครือข่ายด้านหลัง mikrotik (ip 10.10.10.1) ทำให้สามารถเข้าถึงได้จากอินเทอร์เน็ต เพิ่มลงใน /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 หากคุณเปิดใช้งานตัวกรองแพ็คเก็ต

มีสุขภาพดี!

ที่มา: will.com

เพิ่มความคิดเห็น