В інтернет-центрах серії Keenetic, починаючи з версії ОС NDMS V2.08, з'явилася можливість створювати тунелі IPIP (IP over IP), GRE (Generic Routing Encapsulation), EoIP (Ethernet over IP) як в простому вигляді, так і в поєднанні з тунелем IPSec, що дозволить використовувати для захисту цих тунелів стандарти безпеки IPSec VPN.
Підтримка тунелів IPIP, GRE, EoIP в інтернет-центрах Keenetic дозволяє встановити VPN-з'єднання з апаратними шлюзами, Linux-маршрутизаторами, комп'ютерами і серверами c ОС UNIX / Linux, а також c іншим мережевим і телекомунікаційним обладнанням, що має підтримку зазначених тунелів.
Для роботи з тунелями потрібно в налаштуваннях інтернет-центру додатково встановити відповідні компоненти системи NDMS:
Тунелі IP-IP (Дозволяє створювати тунелі IP-over-IP);
Тунелі GRE (Дозволяє створювати тунелі GRE);
Тунелі EoIP (Дозволяє створювати тунелі Ethernet over IP).
Короткий опис
IPIP і GRE-тунелі - це тунелі 3-го мережевого рівня L3 моделі OSI, на яких видно IP-адреси обох сторін. Вони представляються в системі у вигляді інтерфейсів GreX і IPIPX, і через них можна прокидати маршрутизацію (в тому числі і default route) точно також, як і через будь-які інші інтерфейси. Плюс до всього для цих інтерфейсів можна налаштувати рівень доступу security level - private, protected або public (інформацію за описами рівнів доступу можна знайти в статті «Опис роботи з міжмережевим екраном»).
IPIP (IP over IP) один з найпростіших в налаштуванні тунелів (інкапсулює тільки unicast IPv4-трафік). Його можна налаштувати як на UNIX / Linux-системі, так і на різних маршрутизаторах (наприклад, Cisco).
GRE (Generic Routing Encapsulation) тунель є одним з популярних різновидів VPN. Інкапсулює трафік unicast / multicast IPv4 / IPv6. Основна перевага GRE це можливість передавати широкомовний трафік. Тунелі GRE сумісні з усіма шлюзами безпеки, маршрутизаторами Mikrotik, Linux-роутерами, а також з обладнанням, яке вміє працювати з GRE (наприклад, Cisco, Juniper і ін).
EoIP-тунель (Ethernet over IP) - це тунель 2-го канального рівня L2 моделі OSI поверх 3-го рівня L3. Дані через цей тунель передаються на рівні Ethernet-кадрів. EoIP дозволяє створити прозору мережеву середу, емулює пряме Ethernet-підключення між мережами. При цьому можна бачити всі MAC-адреси, і можна об'єднати дві локальні мережі на рівні L2 через Інтернет за допомогою цього типу тунелю. В якості транспорту EoIP використовує GRE. EoIP-тунель може працювати поверх IPIP, PPTP і будь-яких інших з'єднань, здатних передавати IP-пакети. Через нього крім IP можна передавати будь-який трафік, в тому числі і ARP, DHCP, PPPoE, IPv6 і ін. За замовчуванням в тунелі при зміні security level на private / protected буде працювати сканування підмережі за допомогою ARP. В системі представлений у вигляді інтерфейсу EoIPX.
EoIP розроблений компанією MikroTik, тому присутня сумісність з ними, а також з Linux-роутерами, які вміють працювати з EoIP.
Важливо! Тунелі IPIP, GRE, EoIP відносяться до типу точка-точка. Обидва учасники тунелю повинні мати зовнішні IP-адреси (або знаходитись в одній мережі) і між ними не повинно бути ніякої трансляції адрес NAT. Це необхідні умови для встановлення тунелю.
У простому вигляді, ніяких механізмів безпеки для цих тунелів не передбачено (відсутні механізми шифрування і аутентифікації).
Звертаємо вашу увагу, що самі по собі тунелі IPIP, GRE і EoIP є connectionless (без збереження стану з'єднання), тобто неможливо зрозуміти чи знаходиться в працездатному стані тунель чи ні. Ми можемо тільки налаштувати обидві сторони і після цього перевірити передачу даних.
Тунелі IPIP, GRE і EoIP працюють безпосередньо поверх IPv4-протоколу. IPIP використовує номер IP-протоколу 4, GRE і EoIP використовують номер IP-протоколу 47.
Приклади
На даний момент налаштування тунелів IPIP, GRE і EoIP реалізована через
інтерфейс командного рядка (CLI) інтернет-центра.
Налаштування тунелю GRE / IPIP між двома інтернет-центрами Keenetic.
Приклад1:
Налаштування на одному боці тунелю:
(config)> interface IPIP0
(config-if)> tunnel destination router1.example.com
(config-if)> ip address 192.168.100.1 255.255.255.0
(config-if)> security-level private
(config-if)> up
На другому боці тунелю задаються "дзеркальні" наалаштування:
(config)> interface IPIP0
(config-if)> tunnel destination 8.6.5.4
(config-if)> ip address 192.168.100.2 255.255.255.0
(config-if)> security-level private
(config-if)> up
Після цього можна спробувати пропінгувати з кожної зі сторін адреси віддаленої сторони в тунелі для перевірки працездатності тунелю.
Варто звернути увагу, що в якості destination можна вказати як доменне ім'я (через Cloud-режим в KeenDNS працювати не буде), так і IP-адресу віддаленої сторони (WAN-інтерфейсу пристрою).
Для GRE ім'я інтерфейсу буде Gre0.
Приклад 2:
Налаштування на одному боці тунелю:
(config)> interface IPIP0
(config-if)> tunnel destination router1.example.com
(config-if)> ip address 192.168.100.1 255.255.255.0
(config-if)> up
(config-if)> exit
(config)> no isolate-private
(config)> ip route 10.10.2.0 255.255.255.0 IPIP0 /*статический маршрут в удаленную частную подсеть 10.10.2.0/24 через туннель*/
Налаштування на другому боці тунелю:
(config)>interface IPIP0
(config-if)> tunnel destination 8.6.5.4
(config-if)> ip address 192.168.100.2 255.255.255.0
(config-if)> up
(config-if)> exit
(config)> no isolate-private
(config)> ip route 10.10.1.0 255.255.255.0 IPIP0 /*статичний маршрут в вддалену приватну мережу 10.10.1.0/24 через тунель*/
Налаштування тунелю EoIP між двома інтернет-центрами Keenetic.
У випадку з тунелем EoIP налаштування будуть абсолютно ті ж самі, крім двох моментів:
- можна задати MAC-адресу інтерфейсу;
- необхідно задати EoIP tunnel ID, ідентифікатор тунелю (число в діапазоні від 1 до 65535), причому на обох кінцях він повинен збігатися.
Налаштування на одному кінці тунелю:
(config)> interface EoIP0
(config-if)> tunnel destination router1.example.com
(config-if)> tunnel eoip id 1500
(config-if)> ip address 192.168.100.1 255.255.255.0
(config-if)> security-level private
(config-if)> up
"Дзеркальне" налаштування на іншому кінці тунелю:
(config)> interface EoIP0
(config-if)> tunnel destination 8.6.5.4
(config-if)> tunnel eoip id 1500
(config-if)> ip address 192.168.100.2 255.255.255.0
(config-if)> security-level private
(config-if)> up
Після цього можна спробувати пропінгувати з кожної зі сторін адреси віддаленої сторони в тунелі для перевірки працездатності тунелю.
Інтерфейс EoIPX можна включити в Bridge для об'єднання локальних мереж. Для цього на обох боках потрібно налаштувати EoIP-інтерфейс без IP-адреси, і потім включити в Bridge Home:
(config)> interface Home
(config-if)> include EoIP0
Увага! Для інтерфейсів тунелів IPIP, GRE і EoIP значення MTU автоматично обчислюється на основі інтерфейсу, через який буде проходити трафік, але також його можна і задати вручну через команду interface ip mtu
Використання тунелів IPIP, GRE і EoIP спільно з IPSec
У разі встановлення спеціального компонента ОС NDMS IPSec VPN з'являється можливість захищати ці тунелі за допомогою стандартів безпеки IPSec, причому як в автоматичному, так і в повністю ручному режимі. Ручний режим ми описувати не будемо, оскільки досвідчені користувачі самостійно можуть налаштувати тунель IPSec з вірним режимом, а потім поверх IPSec підняти тунель. У разі автоматичного налаштування вирішується відразу кілька проблем ручного режиму:
- вірність значення MTU;
- з'єднання стає connection-oriented, і потрібно вибирати, хто з кінців тунелю стає клієнтом, а хто сервером;
- автоматично вирішується проблема з проходом через NAT, оскільки використовується IPSec NAT Traversal (NAT-T), при якому весь тунельний трафік перетворюється в потік UDP на порт 500/4500;
- використовується шифрування і перевірка цілісності даних.
Компонент IPSec VPN додає наступні налатування до тунелів:
interface ipsec preshared-key <key> — PSK для шифрування
interface ipsec encryption-level <level> —рівень шифрування, за замовчуванням заданий таким, щоб охоплювати максимально велике число пристроїв і прискорюватися апаратно. Можна не міняти.
Оскільки IPSec розмежовує клієнта і сервер, то тепер для налатування клієнта (ініціатора, тієї сторони, яка буде намагатися встановити з'єднання) необхідно використовувати команду interface tunnel destination, а для увімнення режиму сервера (тієї сторони, яка буде відповідати на спроби встановлення з'єднання) необхідно використовувати команду interface tunnel source.
Приклад налаштування тунелю EoIP з IPsec (в нашому прикладі сторона з WAN-адресою 8.6.5.4 є сервером):
Сервер:
(config)> interface EoIP0
(config-if)> tunnel source ISP
(config-if)> tunnel eoip id 1500
(config-if)> ipsec preshared-key mytestingkey
(config-if)> ip address 192.168.100.1 255.255.255.0
(config-if)> security-level private
(config-if)> up
Клієнт:
(config)> interface EoIP0
(config-if)> tunnel destination 8.6.5.4
(config-if)> tunnel eoip id 1500
(config-if)> ipsec preshared-key mytestingkey
(config-if)> ip address 192.168.100.2 255.255.255.0
(config-if)> security-level private
(config-if)> up
Увага! Потрібно, щоб попередньо узгоджений ключ IPSec PSK (preshared-key) збігався на обох кінцях тунелю.
У команді interface tunnel source можна вказати як інтерфейс-джерело, так і IP-адресу, на якій буде "висіти" сервер. Однак перевага віддається інтерфейсу, оскільки в такому випадку всі переналаштування при зміні адреси і інші події будуть виконуватися автоматично.
Відомі обмеження
Тунелі на базі EoIP / IPSec і GRE / IPSec несумісні з PPTP-підключеннями через використання одного і того ж протоколу GRE. В цьому випадку залишається використовувати всього лише один доступний варіант: IPIP / IPsec
Важливо
Звертайте увагу на параметр isolate-private
Між інтерфейсами private встановлювати з'єднання заборонено за замовчуванням, але при необхідності, доступ можна дозволити. Якщо Вам потрібно дозволити з'єднання між інтерфейсами типу private (тобто не ізолювати доступ), для цього виконайте команду
no isolate-private
KB-5185