Mesh-роутер — це просто

З того моменту, коли cjdns додали в офіційний репозиторій OpenWRT, процес підготовки mesh-роутера став просто тривіальний. Саму установку OpenWRT на роутери описувати детально не бачу сенсу, оскільки це популярна тема. На багатьох офіційно підтримуваних роутерах завдання встановлення вільної прошивки зводиться до простого скачування Factory архіву і згодовування її стандартній формі оновлення прошивки на заводській системі. Головне, щоб не було блокування на установку сторонніх прошивки, але і в цьому випадку, як я вважаю, буде безліч обхідних шляхів.

До появи офіційної підтримки пакетів cjdns, доводилося возитися трохи більше. Можна було збирати пакети самому або шукати зібрані кимось пакети і встановлювати їх. Ще були прошивки від ентузіастів з уже встановленим потрібних. У будь-якому випадку, доводилося повозитися трохи більше, ніж зараз.



Отже, ми маємо роутер на OpenWRT, виконує звичайні функції домашнього маршрутизатора. Адмініструвати все це справа будемо лівою кнопкою мишки в LuCY.

Установка
Як написав вище, OpenWrt Chaos Calmer 15.05 має необхідні пакети в офіційному репозиторії. Заходимо в меню System -> Software. Оновлюємо список і встановлюємо пакети luci-app-cjdns і cjdns. Останній є залежністю першого і повинен автоматично встановитися.

Mesh режим
Після установки, cjdns відразу почне працювати. Тобто звичайна установка проходить в один крок. Але ми хочемо, щоб роутер не тільки з'єднувався з cjdns нодами в нашій локальній мережі, але і став активним учасником меш-мережі. У меню з'являється розділ Services -> cjdns. У вкладці Overview відображаються всі поточні з'єднання. Якщо на ваших домашніх комп'ютерах працює cjdns, з великою ймовірністю роутер встановить з ними з'єднання в меш-режимі. Нам потрібно додати 802.11 s WiFi мережу. Робиться це так само просто:
йдемо в розділ Network -> WiFi,
на потрібному фізичному інтерфейсі натискаємо Add,
за поточної домовленості на форумі cjdroute.net вибираємо 11 канал в 2.4 ГГц,
поле Mode буде 802.11 s — WiFi mesh,
Network у неї буде окремий, т. к. нам не потрібно, щоб ці учасники потрапляли у внутрішню Lan мережа (я створив новий з ім'ям Mesh),
SSID: hyperboria_mesh,
захищати цю мережу не потрібно.

У розділі Network -> Interfaces у нас з'явиться нова мережа. Protocol я вибрав unmanaged — нам немає необхідності надавати учасникам звичайні IP адреси.

Так само можна додати просту точку доступу без захисту з ім'ям, наприклад, cjdoute.net, яка підключає пристрою до цієї мережі. Це дозволить підключати девайси, які не вміють у 802.11 s, але вміють в cjdns, до hyperboria.

Тепер йдемо в Services -> cjdns -> Settings, спускаємося до пункту Ethernet Interfaces і додаємо там нашу нову мережу (якщо забули ім'я, то можна підглянути в списку Network -> Interfaces). Beacon Mode я вибрав 2, щоб він не тільки очікував там спеціальні кадри Ethernet, за допомогою яких буде встановлювати mesh-з'єднання, але і сам розсилав такі. Так само варто переконатися, що в домашньої локальної мережі теж єднаємося. Якщо провайдер надає локалку свою, можна спробувати і через WAN інтерфейс з'єднуватися з іншими клієнтами провайдера.

Оверлэйные UDP з'єднання (він же UDP транспорт)

Природно, нерозумно очікувати, що по всьому місту розсипані вже ці коробочки, і функціонує повноцінна мережа на всю країну. Тим більше, що між містами вкрай низька щільність населення. Для додаткової зв'язку нам потрібно буде додати коннекти через UDP транспорт. Це звичайний оверлэйный режим поверх інших мереж типу інтернету. Приблизно так працює TOR. Тільки в даному випадку, сполуки будуть встановлюватися безпосередньо без спроб анонімізації і втрати швидкості.

Варто так само згадати про те, що тут є незрозуміла багатьма, але дуже важливий момент — необхідність додавати такі з'єднання вручну і встановлювати зв'язок з тими, з ким обмінявся ключами і паролями. На перший погляд, ця процедура ідіотська і створює зайві складності в установці: адже в оверлэйных мережах типу Tor і I2P цього робити не треба — є bootstrap ноди, які передають вам список всіх адрес інших учасників. Однак, це зручність є вразливістю — в тому ж Китаї до цих нодам підключаються атакуючі, отримують список всіх учасників і блокують з'єднання з цими адресами і самої нодою. Тобто зручність додає в систему єдину точку відмови і ставить під загрозу стабільність роботи взагалі.

Обмінятися ключами і адресами можна на тому ж форумі cjdroute.net в спеціальному розділі. Ймовірно, пізніше, ваші друзі і колеги теж приєднуватися до мережі і обміняються з вами потрібними даними.

Додавання сполук відбувається так само просто у розділі Services -> cjdns -> Вузли. Там можна додати паролі для вхідних підключень (пам'ятайте, що для цього треба роутеру мати білий IP адреса і відкрити UPD порт) і інформацію про вихідні з'єднання. Кожне нове з'єднання збільшує стабільність роботи. А завдяки простоті інтерфейсу, додавати нові можна буде між справою протягом пари хвилин.

На цьому пункті налаштування повноцінного mesh-роутера можна вважати завершеною. Тепер ваш роутер буде виконувати свої звичайні функції домашнього маршрутизатора, але при появі таких же свідомих сусідів, буде створювати з ними нові коннекти, незалежні від вашого провайдера.

Бонусний пункт: захищений вихід в інтернет

Cjdns — це по суті рішення, яке дозволяє створювати розподілену віртуальну приватну мережу. Завдяки своїй розподіленої архітектурі ця VPN виростає у величезну Semi-meh (оверлэйная + меш) мережу і будує новий інтернет майбутнього (Hyperboria).
Якщо на ваших комп'ютерах встановлений і правильно налаштований CJDNS, значить буде «бачити» один одного, навіть якщо обидва знаходяться в тисячах кілометрах один від одного за провайдерськими NATами. CJDNS надає IPv6, і всі підтримують його програми будуть відмінно працювати. Отакий хамачі здорової людини. Але крім власне доступу в hyperboria і з'єднання особистих пристроїв в єдину мережу хотілося б в пару кліків зробити захищений тунель у звичайний інтернет.

Налаштування на сервері, який буде випускати в інтернет.

Припустимо, у нас є VPS в якійсь нормальній країні, де інтернет не піддається агресивним нападкам. Ми налаштували на цьому VPS таку ж CJDNS ноду і хочемо мати можливість виходу через неї в інтернет. Для цього в конфіги cjdns нашої VPS потрібно додати вхідний тунель в розділі ipTunnel -> allowedConnections. Наприклад:
{
 
"publicKey": "kdddddgfgsftrtrtrnrmnmnmgnmdfndmfnmdfnmdnfmdfmdndfdf0.k", // Публічний ключ нашого клієнта. Для роутера дістаємо в налаштуваннях Services -> cjdns -> Settings
 
"ip4Address": "192.168.45.10", // IP-адреса клієнта, який буде автоматично присвоєно 
 
"ip4Prefix": 24 // Префікс. Відповідає масці 255.255.255.0
 
}
 


В консолі додаємо IPv4-адресу на інтерфейс тунелю і дозволяємо Forwarding, щоб випускати в інтернет клієнтів.
ip addr add dev tun0 192.168.45.1/24
echo 1 > /proc/sys/net/ipv4/conf/all/forwarding

Додаємо рауса і правила для firewall

ip route add dev tun0 192.168.45.0/24
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT

Тепер наш VPS сервер може заміняти нам звичайні платні VPN сервіси. До речі, за моїми відчуттями, налаштування Виходить набагато швидше і простіше ніж того ж OpenVPN.

Я на цьому пункті попався в цікаву пастку. Захотів підключати відразу і роутер, і ноутбук, видаючи їм різні IPv4 адреси, але в одній підмережі. Як з'ясувалося, він для цього не призначений, перший вписаний клієнт нормально роутился, а другий просто отримував адресу, але навіть не міг пінговать сервер. Якщо хочете декілька пристроїв підрубувати, то треба робити різні підмережі. Це може знадобитися, наприклад, для забезпечення безпечного виходу в інтернет поверх не довіреної інтернет-з'єднання.

Налаштування на роутері

Тут все просто. Йдемо в Services -> cjdns -> IP Tunnel і в Outgoing connections додаємо публічний ключ cjdns з конфига нашої VPS ноди. Прописаний айпішнік присвоюється автоматично. Маршрутизація клієнтів роутера в інтернет через цей VPN налаштовується додаванням відповідних правил на фаєрволі.

image

Ви можете прописати адресу нашого сервера 192.168.45.1 в якості шлюзу для всіх з'єднань, а можете просто додати статичні роуты і перенаправляти запити тільки для конкретних сайтів: Network -> Static routesimage

В даному випадку, я зробив захищені і стійкі сполуки для всіх пристроїв в домашній мережі на рутрекер і btc-e.com. З якоїсь дивної причини, мені захотілося зробити підключення до сайтів більш безпечними.

У цьому бонусному пункті є і зворотний варіант: зробити роутер таким сервером. Наприклад ви перебували десь у гостях чи користуєтеся громадським WiFi і хочете зробити з'єднання більш безпечними. В тій же вкладці налаштувань роутера додаємо вхідні з'єднання, а на ноутбуці вихідні. Трохи інші правила для роутінга — і ось вам більш захищена зв'язок з будь-якого місця.

Таким чином, ми лівою і правою кнопками миші домоглися поставлених завдань. На написання, можливо, банальної для хабра статті мене надихнула ця карта cjdroute.net/map. Багато додали своє місце розташування з коментарем, що готові приєднатися, якщо їм допоможуть все налаштувати. У часи перших статей про CJDNS, процедура налаштування була місцями заплутаною, а більшість мінлива передбачали ручну зборку OpenWRT і колупання конфіги. Звичайно, є ряд налаштувань, які добре б додати пізніше в консолі, але для старту досить описаних пунктів. Сподіваюся, це може багатьом перетворити своє бажання намір. Якщо будуть якісь питання, ми охоче відповімо на форумі cjdroute.net

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.