IPIP Đường hầm IPsec VPN giữa máy Linux và Mikrotik phía sau nhà cung cấp NAT

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

  • Eth0 1.1.1.1/32 IP bên ngoài
  • ipip-ipsec0 192.168.0.1/30 sẽ là đường hầm của chúng tôi

Miktoik: CCR 1009, Bộ định tuyến 6.46.5

  • Eth0 10.0.0.2/30 IP nội bộ từ nhà cung cấp. IP NAT bên ngoài của nhà cung cấp là động.
  • ipip-ipsec0 192.168.0.2/30 sẽ là đường hầm của chúng tôi

Chúng tôi sẽ tạo một đường hầm IPsec trên máy Linux bằng racoon. Tôi sẽ không mô tả chi tiết, có một cái hay bài viết у vvpoloskin.

Cài đặt các gói cần thiết:

sudo install racoon ipsec-tools

Chúng tôi định cấu hình racoon, nó sẽ hoạt động có điều kiện như một máy chủ ipsec. Vì mikrotik ở chế độ chính không thể truyền mã nhận dạng khách hàng bổ sung và địa chỉ IP bên ngoài mà nó kết nối với Linux là địa chỉ động nên việc sử dụng khóa chia sẻ trước (ủy quyền mật khẩu) sẽ không hoạt động vì mật khẩu phải khớp với địa chỉ IP của máy chủ kết nối hoặc với mã định danh.

Chúng tôi sẽ sử dụng ủy quyền bằng khóa RSA.

Racoon daemon sử dụng các khóa ở định dạng RSA và mikrotik sử dụng định dạng PEM. Nếu bạn tạo khóa bằng tiện ích plainrsa-gen đi kèm với racoon, thì bạn sẽ không thể chuyển đổi khóa chung cho định dạng Mikrotika sang PEM với sự trợ giúp của nó - nó chỉ chuyển đổi theo một hướng: PEM sang RSA. Cả openssl và ssh-keygen đều không thể đọc khóa được tạo bởi plainrsa-gen, do đó việc chuyển đổi cũng không thể được thực hiện bằng cách sử dụng chúng.

Chúng tôi sẽ tạo khóa PEM bằng openssl và sau đó chuyển đổi nó cho racoon bằng 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

Chúng tôi sẽ đặt các khóa nhận được vào thư mục: /etc/racoon/certs/server. Đừng quên đặt chủ sở hữu của người dùng có tên mà daemon racoon được khởi chạy (thường là root) ở mức 600 quyền.

Tôi sẽ mô tả cách thiết lập mikrotik khi kết nối qua WinBox.

Tải key server-name.pub.pem lên mikrotik: Menu “Files” - “Upload”.

Mở phần “IP” - tab “IP giây” - “Khóa”. Bây giờ chúng tôi tạo khóa - nút “Tạo khóa”, sau đó xuất khóa công khai mikrotika “Expor Pub. Key", bạn có thể tải xuống từ phần "Tệp", nhấp chuột phải vào tệp - "Tải xuống".

Chúng tôi nhập khóa công khai racoon, “Nhập”, trong danh sách thả xuống của trường “Tên tệp”, chúng tôi tìm server-name.pub.pem mà chúng tôi đã tải xuống trước đó.

Khóa công khai mikrotik cần được chuyển đổi

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

và đặt nó vào thư mục /etc/racoon/certs, không quên chủ sở hữu và các quyền.

cấu hình racoon với các bình luận: /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; # Сжимать передаваемые данные, алгоритм сжатия предлагается только один.
}

cấu hình mikrotik

Quay lại phần “IP” - “IPsec”

tab "Hồ sơ"
Thông số
Giá trị

Họ tên
Theo quyết định của bạn (theo mặc định mặc định)

Thuật toán băm
sha512

Thuật toán mã hóa
aes-128

Tập đoàn DH
modp2048

Đề xuất_kiểm tra
xin

Lifetime
1d 00: 00: 00

Truyền tải NAT
đúng (đánh dấu vào ô)

DPD
120

DPD Thất bại tối đa
5

Tab ngang hàng
Thông số
Giá trị

Họ tên
Theo quyết định của bạn (sau đây gọi là MyPeer)

Địa Chỉ
1.1.1.1 (Máy IP Linux)

Địa chỉ địa phương
10.0.0.2 (Giao diện IP WAN mikrotik)

Hồ sơ
mặc định

Chế độ trao đổi
chính

Thụ động
sai

Gửi INITIAL_CONTACT
đúng

Tab đề xuất
Thông số
Giá trị

Họ tên
Theo quyết định của bạn (sau đây gọi là MyPeerProposal)

Xác thực. Thuật toán
sha512

Encr. Thuật toán
aes-128-cbc

Lifetime
08:00:00

Nhóm PFS
modp2048

Tab "Danh tính"
Thông số
Giá trị

Peer
MyPeer

Atuh. Phương pháp
khóa rsa

Key
mikrotik.privet.key

Khóa từ xa
tên máy chủ.pub.pem

Nhóm mẫu chính sách
mặc định

Chuỗi Notrack
trống rỗng

Loại ID của tôi
tự động

Loại ID từ xa
tự động

So khớp theo
id từ xa

Cấu hình chế độ
trống rỗng

Tạo chính sách
Không

Tab "Chính sách - Chung"
Thông số
Giá trị

Peer
MyPeer

Tunnel
đúng

Src. Địa chỉ
192.168.0.0/30

đích đến. Địa chỉ
192.168.0.0/30

Nghị định thư
255 (tất cả)

Template
sai

Tab "Chính sách - Hành động"
Thông số
Giá trị

Hoạt động
mã hóa

Cấp
yêu cầu

Giao thức IPsec
đặc biệt

Đề nghị
Đề xuất của tôi ngang hàng

Rất có thể, giống như tôi, bạn đã cấu hình snat/masquerade trên giao diện WAN của mình; quy tắc này cần được điều chỉnh để các gói ipsec gửi đi đi vào đường hầm của chúng ta:
Vào phần "IP" - "Tường lửa".
Tab "NAT", mở quy tắc snat/masquerade của chúng tôi.

Tab nâng cao
Thông số
Giá trị

Chính sách IPsec
ra: không có

Khởi động lại quỷ racoon

sudo systemctl restart racoon

Nếu racoon không khởi động khi khởi động lại thì có lỗi trong cấu hình; trong nhật ký hệ thống, racoon hiển thị thông tin về số dòng phát hiện lỗi.

Khi hệ điều hành khởi động, daemon racoon khởi động trước khi giao diện mạng được hiển thị và chúng tôi đã chỉ định tùy chọn strict_address trong phần nghe; bạn cần thêm đơn vị racoon vào tệp systemd
/lib/systemd/system/racoon.service, trong phần [Unit], dòng After=network.target.

Bây giờ các đường hầm ipsec của chúng ta đã sẵn sàng, hãy nhìn vào kết quả đầu ra:

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

Nếu đường hầm không hoạt động, hãy xem nhật ký hệ thống hoặc tạp chí -u racoon.

Bây giờ bạn cần định cấu hình giao diện L3 để có thể định tuyến lưu lượng. Có nhiều lựa chọn khác nhau, chúng tôi sẽ sử dụng IPIP, vì mikrotik hỗ trợ nó, tôi sẽ sử dụng vti, nhưng thật không may, nó vẫn chưa được triển khai trong mikrotik. Nó khác với IPIP ở chỗ nó có thể đóng gói thêm phát đa hướng và đặt dấu fwmark trên các gói mà chúng có thể được lọc trong iptables và iproute2 (định tuyến dựa trên chính sách). Ví dụ: nếu bạn cần chức năng tối đa thì GRE. Nhưng đừng quên rằng chúng tôi trả tiền cho chức năng bổ sung với chi phí chung lớn.

Bạn có thể xem bản dịch đánh giá tốt về giao diện đường hầm đây.

Trên 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

Bây giờ bạn có thể thêm tuyến đường cho các mạng phía sau mikrotik

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

Để giao diện và các tuyến đường của chúng tôi được nâng lên sau khi khởi động lại, chúng tôi cần mô tả giao diện trong /etc/network/interfaces và thêm các tuyến đường ở đó trong phần hậu kỳ hoặc viết mọi thứ vào một tệp, ví dụ: /etc/ ipip-ipsec0.conf và kéo nó qua quá trình hậu kỳ, đừng quên chủ sở hữu tệp, các quyền và làm cho nó có thể thực thi được.

Dưới đây là một tập tin ví dụ

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

Trên Mikrotik:

Mục “Giao diện”, thêm giao diện mới “Đường hầm IP”:

Tab “Đường hầm IP” - “Chung”
Thông số
Giá trị

Họ tên
Theo quyết định của bạn (sau đây gọi là IPIP-IPsec0)

MTU
1480 (nếu không được chỉ định, mikrotik bắt đầu cắt mtu xuống 68)

Địa chỉ địa phương
192.168.0.2

Địa chỉ từ xa
192.168.0.1

Bí mật IPsec
Vô hiệu hóa trường (nếu không một Peer mới sẽ được tạo)

Cố sống đi
Tắt trường này (nếu không giao diện sẽ liên tục tắt vì mikrotika có định dạng riêng cho các gói này và không hoạt động với Linux)

DSCP
kế thừa

Đừng phân mảnh
Không

Kẹp TCP MSS
đúng

Cho phép đường dẫn nhanh
đúng

Phần “IP” – “Địa chỉ”, thêm địa chỉ:

Thông số
Giá trị

Địa Chỉ
192.168.0.2/30

Giao thức
IPIP-IPsec0

Bây giờ bạn có thể thêm các tuyến vào mạng phía sau máy Linux; khi thêm tuyến, cổng sẽ là giao diện IPIP-IPsec0 của chúng tôi.

PS

Vì máy chủ Linux của chúng tôi có tính bắc cầu, nên việc đặt tham số CLAMP TCP MSS cho giao diện ipip trên đó là điều hợp lý:

tạo một tệp /etc/iptables.conf với nội dung sau:

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

và trong/etc/mạng/giao diện
hậu kỳ iptables-restore < /etc/iptables.conf

Tôi có nginx chạy trên mạng đằng sau mikrotik (ip 10.10.10.1), làm cho nó có thể truy cập được từ Internet, thêm nó vào /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 

Đừng quên thêm các quyền thích hợp vào iptables nếu bạn đã bật bộ lọc gói.

Hãy khỏe mạnh!

Nguồn: www.habr.com

Thêm một lời nhận xét