БЕЗДРОТОВА СВОБОДА. WIREGUARD-CLIENT+OPENWRT НА RASPBERRY PI4
ua_hackДоброго часу доби, читачу! Розпочнемо статтю з визначення OpenWrt.
OpenWrt - це операційна система Linux, націлена на вбудовані пристрої по типу маршрутизаторів. Замість спроби створити єдину статичну прошивку, OpenWrt надає файлову систему з управлінням пакетами. Це звільняє вас від вибору програм та конфігурацій, які надає провайдер, і дозволяє налаштувати пристрій за допомогою пакетів, що підходять для будь-яких цілей. Для розробників OpenWrt - це основа для створення програм без необхідності писати наново прошивку; для користувачів - можливість повного налаштування пристрою. Весь код відкритий, тому фантазувати можна як завгодно.
ПРИЧИНИ ДЛЯ ВИКОРИСТАННЯ OPENWRT
1. Продуктивність та стабільність
OpenWrt розроблений професіоналами, хто піклується про продуктивність своєї мережі. Операційна система включає багато алгоритмів з останніх досліджень мережевих технологій, які працюють значно краще, ніж більшість провайдерів програмного забезпечення. OpenWrt стабільний і надійно працює протягом тривалого періоду часу. OpenWrt зменшує затримки та збільшує пропускну здатність мережі за допомогою алгоритмів управління bufferbloat. Вдосконалений Wi-Fi стандарт підтримує вищу швидкість передачі даних. Старі пристрої все ще підтримують OpenWrt (доти, доки пам’ять вашого пристрою може вміщувати нові дистрибутиви) навіть після того, як виробник припинить оновлювати власний продукт.
2. Безпека
OpenWrt - це програмне забезпечення з відкритим кодом. Багато розробників з усього світу переглядають код ще до його випуску. Жодних прихованих програмних закладок, залишених постачальниками обладнання, не знайдено. OpenWrt стійкий до загальних вразливостей завдяки своїй ОС Linux, на яку не впливає більшість поширених атак. OpenWrt активно оновлюється, тому будь-які вразливості закриваються незабаром після їх виявлення. Конфігурація дистрибутиву за замовчуванням є дуже консервативною, дозволяючи повноцінне підключення до Інтернету, маючи при цьому вже досить добре налаштований firewall. Лише подумайте, наскільки приємно повністю контролювати пристрої і потік даних в них.
3. Розширюваність
Хоча прошивка для маршрутизатора постачається з фіксованим набором можливостей, OpenWrt надає більше 3000 пакетів, готових до встановлення. Деякі з найбільш популярних пакетів дозволяють:
- використовувати подвійне підключення з коробки або забезпечити перехід IPv4/IPv6;
- блокувати рекламу на своєму маршрутизаторі, щоб ви могли насолоджуватися веб-серфингом з будь-якого підключеного пристрою;
- зменшити затримку (bufferbloat) за допомогою Smart Queue Management;
- захистити доступ до домашньої мережі за допомогою OpenVPN або WireGuard;
- забезпечити доступ до Інтернету та запобігти можливості провайдера переглядати ваші дії в Інтернеті за допомогою клієнта OpenVPN або WireGuard;
- запобігти можливості провайдера підробляти та переглядати ваші запити DNS за допомогою шифрування DNS;
- зашифрувати підключення до Інтернету, обійти регіональні обмеження, отримати доступ до Darknet та прихованих служб Tor за допомогою його клієнта;
- примусово під’єднати пристрої до власних DNS-серверів;
- створити гостьову WLAN, що надає доступ до Інтернету, але не для локальних пристроїв;
- контролювати доступ, використовуючи обмеження часу та батьківський контроль;
- встановити квоту на обсяг завантаження або пропускну здатність;
- та багато іншого.
4. Підтримка ком’юніті
Багато команд, які проводять передові дослідження мережевих технологій, використовують OpenWrt як стабільну платформу для своєї роботи. В міру того, як їхні роботи переходять з експериментальної форми в практичну, якісний для виробництва код, доступний спочатку саме у збірках OpenWrt.
5. Конфігурація
Оскільки OpenWrt - система на базі Linux, ви маєте повний контроль над усіма функціями вашого пристрою. OpenWrt надає як інтерфейс командного рядка (через SSH), так і веб-інтерфейс користувача для налаштування. Інформація про конфігурацію зберігається у текстових файлах для полегшення редагування та/або копіювання. Крім того, локалізація WebUI доступна більш ніж на 20 мовах. Нульова вартість OpenWrt забезпечена завдяки ліцензії GPL та зусиллям добровольців (як приватних осіб, так і компаній). Плата за підписку та ліцензування не передбачена.
Що ж, розпочнемо налаштування OpenWrt.
Інсталяція OS на пристрій
Старого роутеру у нас не було, але під руку потрапив Raspberry Pi4, який чудово підійде для цієї задачі. На форумах OpenWrt ми знайшли готовий image, який можна встановити на SD-карту за допомогою BalenaEtcher або Rufus.
Підключення та налаштування мережі
Після встановлення можна підключитись до “малинки” за допомогою Ethernet. За замовчуванням IP-адреса - 192.168.1.1. Під’єднатись можна по SSH, користувач root без паролю. Після підключення введіть passwd та встановіть новий пароль для root.
Схема така:
Наша “малинка” підключена до рідного роутеру як клієнт. Rpi буде виступати в ролі WiFi AP, до якого підключатимуться пристрої. Пізніше ми налаштуємо його так, щоб весь трафік ішов через інтерфейс Wireguard-клієнту, який ми піднімемо на “малинці”.
Налаштування WiFi AP
Конфігурація бездротового інтерфейсу знаходиться в /etc/config/wireless. Якщо пристрій має порти Ethernet, бездротовий зв'язок вимкнено за замовчуванням. Ви можете увімкнути його в /etc/config/wireless, змінивши option disabled '1' на option disabled '0' (достатньо коментування рядка або його видалення). Або так: rm /etc/config/wireless; wifi config; sed -i '/disabled/ s/1/0/g' /etc/config/wireless; wifi up.
Далі vi /etc/config/network і додаємо такі строки:
config interface 'wan'
option proto 'dhcp'
config interface 'wifi'
option proto 'static'
option ipaddr '192.168.2.1'
option netmask '255.255.255.0'
Наш ip WiFi AP буде 192.168.2.1. Ви можете його змінювати, як вам завгодно.
Потім змінимо налаштування самої AP:
vi /etc/config/wireless
config wifi-device 'radio0'
option type 'mac80211'
option path 'platform/soc/fe300000.mmcnr/mmc_host/mmc1/mmc1:0001/mmc1:0001:1'
option country 'DE'
option hwmode '11g'
option channel '10'
option cell_density '0'
config wifi-iface 'default_radio0'
option device 'radio0'
option mode 'ap'
option key 'nottellingyou'
option ssid 'ssid'
option encryption 'psk2'
option network 'wifi'
Налаштуваннями dhcp:
vi /etc/config/dhcp
config dhcp 'wifi'
option interface 'wifi'
option start '100'
option limit '150'
option leasetime '12h'
config dhcp 'wan'
option interface 'wan'
option ignore '1'
Відредагуйте /etc/config/firewall та додайте новий розділ зони, що охоплює інтерфейс wifi:
config zone
option name wifi
list network 'wifi'
option input ACCEPT
option output ACCEPT
option forward ACCEPT
Увімкніть нову бездротову мережу
ifup wifi
wifi
Перезапустіть брандмауер
/etc/init.d/firewall restart
Перезапустіть службу DHCP
/etc/init.d/dnsmasq restart
Підключаємось до Wi-Fi. Таким чином ми звільняємо lan інтерфейс для інтернету.
Налаштування LAN
Дізнайтесь який pool ip-адрес роздає ваш роутер, щоб ми змогли підключити “малинку” по Ethernet, як dhcp-клієнт. У нас це 192.168.7.0/24 мережа.
uci set network.lan.ipaddr="192.168.7.200"
uci set network.lan.gateway="192.168.7.1"
uci set network.lan.dns="192.168.7.1"
uci commit
/etc/init.d/network restart
Вітаємо, ви підключені до інтернету!
Налаштування WireGuard та маршрутизація трафіку
Налаштування WireGuard серверу ми вам показували раніше. В результаті маємо публічний ключ серверу, приватний ключ клієнта та ip адреса серверу.
Етап I. Підготовка
Встановіть пакети та вкажіть параметри конфігурації клієнта VPN.
# Install packages
opkg update
opkg install wireguard
# Configuration parameters
WG_IF = "vpn"
WG_SERV = "SERVER_NAME_OR_IP_ADDRESS"
WG_PORT = "51820"
WG_ADDR = "10.8.0.2/32"
Етап II. Підготовка ключів
# Client private key
WG_KEY="0HxKT8+AUO5h1cАВІВАq01F+0A4PVZ12+58FE="
# Server public key
WG_PUB="szC81lC/+jAWАВІВІСХХVDsnKpf4joF8CcNduUf4tTgE="
У вас всі дані будуть інші.
Етап III. Брандмауер
Вважайте мережу VPN загальнодоступною і призначте інтерфейс VPN зоні WAN, щоб мінімізувати налаштування брандмауера.
# Configure firewall
uci rename firewall.@zone[0]="lan"
uci rename firewall.@zone[1]="wan"
uci del_list firewall.wan.network="${WG_IF}"
uci add_list firewall.wan.network="${WG_IF}"
uci commit firewall
/etc/init.d/firewall restart
Етап IV. Мережа
Налаштування інтерфейсу VPN та PEERS.
# Configure network
uci -q delete network.${WG_IF}
uci set network.${WG_IF}="interface"
uci set network.${WG_IF}.proto="wireguard"
uci set network.${WG_IF}.private_key="${WG_KEY}"
uci add_list network.${WG_IF}.addresses="${WG_ADDR}"
# Add VPN peers
uci -q delete network.wgserver
uci set network.wgserver="wireguard_${WG_IF}"
uci set network.wgserver.public_key="${WG_PUB}"
uci set network.wgserver.endpoint_host="${WG_SERV}"
uci set network.wgserver.endpoint_port="${WG_PORT}"
uci set network.wgserver.route_allowed_ips="1"
uci set network.wgserver.persistent_keepalive="21"
uci add_list network.wgserver.allowed_ips="0.0.0.0/0"
uci add_list network.wgserver.allowed_ips="::/0"
uci commit network
/etc/init.d/network restart
Тепер проводимо тести.
traceroute google.com
Якщо все успішно, ви побачите, що пакети йдуть через інтерфейс VPN.
Звичайно, етична прошивка на роутері - далеко не порятунок від усіх хвороб, але це вбереже вас від проблем пов'язаних з безпекою у вашій мережі і суттєво підвищить функціонал вашого пристрою.
Посилання:
https://openwrt.org/docs/guide-user/services/vpn/wireguard/client
https://openwrt.org/ru/docs/guide-user/network/wan/internet.connection
https://openwrt.org/docs/guide-quick-start/ssh_connect_to_the_internet_and_install_luci
https://forum.openwrt.org/t/raspberry-pi-4-access-point/50728