Безопасный Wi-Fi в отеле для всей семьи на Raspberry Pi
Всем привет! Сегодня хочу рассказать о своем «семейном» проекте на Raspberry Pi. Путешествуя по миру, я постоянно сталкиваюсь с потребностью подключаться к быстрому и, что не менее важно, безопасному интернету.
Представьте ситуацию: вы въехали в отель со своей семьей, пару часов решаете вопросы с размещением и, изрядно устав, пытаетесь подключить всё семейство к сети: дети требуют мультики, супруга хочет поискать ближайшие магазины, где можно пошопиться, а тебе нужно просто поработать. Для этого ты цепляешь каждое устройство к точке доступа отеля и надеешься, что в эту сеть внедрены хоть какие-то механизмы защиты.
К типовым проблемам открытых беспроводных сетей относятся возможность перехвата трафика, подделка ответов веб-приложений и DNS-спуфинг, если сама сеть уже скомпрометирована. Поэтому в любой публичной сети нужно вести себя максимально осторожно. Один из лучших способов защитить свой трафик от влияния извне — использовать свой VPN.
В России с безопасностью беспроводных сетей дело обстоит еще более-менее. В других же странах, где мне довелось побывать, всё не так радужно. Что дает использование своего VPN? Возможность подключать все устройства семьи разом к интернету через публичные сети, при этом еще защищая трафик с помощью VPN. Про настройку собственного VPN есть отличный гайд на Youtube.
Собственно, идея не нова — решил сделать небольшой travel-роутер для семьи. Можно, конечно, использовать и готовые решения, однако у меня уже была «малинка» и внешние адаптеры к ней, поэтому для реализации моей задумки не пришлось ничего докупать. Плюс этот инструмент можно всегда хранить на флешке и использовать в семейных поездках, а в остальное время у «малинки» другая жизнь.
Я решил подготовить пошаговую инструкцию для тех, кто захочет повторить мой опыт. Надеюсь, он окажется для вас полезным.
Вариант первый (роутер на основе OpenWrt)
Суть схемы подключения: мы поднимаем на одном внешнем Wi-Fi интерфейсе «малинки» нашу точку доступа, к которой всегда будут подключаться наши беспроводные клиенты, а вторым адаптером (встроенным в моем случае, но при желании можно и второй внешний использовать) подключаемся к публичному Wi-Fi. При этом весь трафик наших беспроводных девайсов будет идти через наш VPN-туннель.
5) внешний USB Wi-Fi адаптер (у меня недорогой с AliExpress AC-1200 на чипсете MT7612U).
Шаг первый
Зальем образ OpenWRT на microSD-карту. Для этого нам пригодится следующее ПО: Raspberry Pi Imager, а также корректный образ OpenWRT. Нужный образ для вашей «малинки» можно найти по ссылке. Итак, запускаем Raspberry Pi Imager, указываем путь до файла с прошивкой OpenWRT, выбираем нашу microSD-карту, куда нужно записать файл, и жмем WRITE. Дожидаемся окончания процесса записи и проверки, потом извлекаем microSD-карту.
Шаг второй
Вставляем microSD-карту в нашу «малинку» и подключаем ее к питанию. Далее подсоединяем ее к нашему домашнему роутеру, к которому подключен наш ПК, при помощи Ethernet-кабеля. Важно: для дальнейшей настройки нашей «малинки» необходимо, чтобы компьютер и «малинка» находились в одной подсети. В моем случае это 192.168.1.0/24 по умолчанию. После установки свежей прошивки OpenWRT интерфейс «малинки» будет иметь IP 192.168.1.1/24. Соответственно, для обеспечения сетевой связности необходимо, чтобы ваш компьютер находился в той же подсети.
Шаг третий
Чтобы продолжить настройку нашего будущего роутера, необходимо подключиться к нему по SSH. Можно рассмотреть вариант через GUI, однако в моем случае я использую CLI, все действия можно повторить и через графический интерфейс соответственно.
Нас пустит без пароля. Однако оставлять это так не будем, сразу же зададим секурный пароль.
Далее хорошим решением будет забэкапить файлы, которые мы будем править, на случай, если что-то пойдет не по плану 🙂
Настроим сетевые интерфейсы.
config interface 'loopback' option device 'lo' option proto 'static' option ipaddr '127.0.0.1' option netmask '255.0.0.0' config globals 'globals' option ula_prefix 'fd27:468f:224c::/48' config device option name 'br-lan' option type 'bridge' list ports 'eth0' config interface 'lan' option device 'br-lan' option proto 'static' option ipaddr '10.10.10.40' option netmask '255.255.255.0' option ip6assign '60' option force_link '1' config interface 'wwan' option proto 'dhcp' option peerdns '0' option dns '8.8.8.8 1.1.1.1'
А также дадим доступ к Интернету сегменту LAN:
vi /etc/config/firewall (здесь нам нужно изменить только одно значение — в зоне WAN option INPUT выставить ACCEPT).
Перезагружаем нашу малинку и подключаемся уже по измененному IP-адресу (в нашем случае это 10.10.10.40).
Далее нам нужно подключить адаптер Wi-Fi. Но прежде нам нужно доустановить драйверы для этого адаптера. Поэтому сначала подключим «малинку» к нашему домашнему Wi-Fi:
config wifi-device 'radio0' option type 'mac80211' option path 'platform/soc/fe300000.mmcnr/mmc_host/mmc1/mmc1:0001/mmc1:0001:1' option channel '7' option hwmode '11g' option htmode 'HT20' option disabled '0' option short_gi_40 '0' config wifi-iface 'default_radio0' option device 'radio0' option network 'lan' option mode 'ap' option ssid 'OpenWrt' option encryption 'none'
Далее продолжим настройку через GUI:
Вводим те же самые логин и пароль, с которыми мы логинились по SSH.
Переходим в настройки беспроводных сетей Network > Wireless
Нажимаем Scan и подключаемся к домашней беспроводной сети, чтобы установить драйверы для нашего Wi-Fi адаптера.
После того как у «малинки» появился доступ в интернет, обновляем пакеты OpenWRT и ставим драйверы для большинства адаптеров. Однако следует исходить из следующих моментов: чипсет адаптера, который у вас есть, должен быть совместим с OpenWRT (какие чипсеты в данный момент поддерживаются, можно проверить на официальном сайте OpenWrt).
opkg install kmod-mt76x2u kmod-rt2800-lib kmod-rt2800-usb kmod-rt2x00-lib kmod-rt2x00-usb kmod-usb-core kmod-usb-uhci kmod-usb-ohci kmod-usb2 usbutils nano
Убеждаемся, что внешний адаптер установился корректно.
Если интерфейс поднялся, значит, мы на верном пути.
Дальше нам нужно поднять свою точку доступа! Для этого необходимо отредактировать файл еще раз:
config wifi-device 'radio1' option type 'mac80211' option path 'scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb2/2-1/2-1:1.0' < --путь сгенерится автоматом, его трогать не нужно option channel '36' option band '5g' option htmode 'VHT80' option disabled '0'
Теперь у вас есть работающий travel-роутер. Подключаете всю семью один раз к Wi-Fi на «малинке» и всё. Для того чтобы интернет был на всех девайсах, вам достаточно подключиться к публичной сети. (Примечание: при подключении Wi-Fi адаптера используйте тот же USB-разъем, в ином случае интерфейс может не стартануть). Однако ваш трафик по-прежнему передается по незащищенному каналу, поэтому нужно настроить VPN.
В моем случае я буду настраивать подключение к собственному VPN-серверу. Настройка других VPN-провайдеров не будет сильно отличаться.
Наша «малинка» будет клиентом, который при получении доступа в интернет будет автоматически устанавливать соединение с VPN-сервером, формируя защищенный туннель, внутри которого будет передаваться весь трафик.
Установим необходимые пакеты для нашего VPN:
opkg install wireguard-tools
opkg install luci-app-wireguard
Далее заходим через GUI и добавляем новый интерфейс Network > Interfaces > Add New interface.
Даем название интерфейсу и выбираем протокол WireGuard VPN.
Далее импортируем конфигурацию для добавления нового клиента, которую можно получить с нашего VPN-сервера.
Дальше нам нужно настроить правила для межсетевого экрана следующим образом:
Во вкладке Network > Firewall добавить новую зону и выставить параметры:
Интерфейс выбираем тот, который относится к туннелю Wireguard, смотрим из какой зоны нам разрешен форвардинг.
Далее выбираем Save и Save&Apply.
Для того чтобы весь трафик у нас ходил только через наш туннель и никак иначе, можно дополнительно скорректировать правило межсетевого экранирования следующим образом: заходим в настройки зоны Lan и выставляем параметр Allow forward to destination zones таким образом, что из сегмента Lan будет доступ только в сегмент нашего туннеля.
На этом настройка роутера для путешествий на основе Raspbery Pi завершена :) Дальше, когда вам потребуется на новом месте раздать Wi-Fi для всей семьи, вам нужно будет подключиться к «малинке», зайти в Network > Wireless и подключиться к новой сети.
Данный способ настройки travel-роутера не отличается простотой, однако обладает высокой надежностью, позволяет использовать основные преимущества открытой прошивки и требует настройки всего лишь один раз. Дальше можно создать образ и пользоваться им для быстрого развертывания.
Вторым способом превратить «малинку» в travel-роутер поделюсь в следующем посте, чтобы не нагружать этот)
Автор: Евгений Артемьев, Консультант по информационной безопасности "Инфосистемы Джет"
Raspberry Pi 3 в качестве точки достпупа WiFi
Как известно Raspberry Pi 3 имеет встроенную карту WiFi. Почему бы, в таком случае, не делать из Малинки точку доступа?
Нам потребуется установит пакеты hostapd – это сама точка доступа, и isc-dhcp-server – dhcp-сервер, который будет у нас раздавать настройки ip-адресов для беспроводных устройств.
Подключаемся к Raspberry и в терминале вводим следующие команды:
sudo apt-get update sudo apt-get install hostapd isc-dhcp-server
После установки отредактируем некоторые файлы. Начнем с сервера dhcp.
1. Настройка сервера DHCP
sudo nano /etc/dhcp/dhcpd.conf
#option domain-name “example.org”;
#option domain-name-servers ns1.example.org, ns2.example.org;
И, наоборот раскомментируем следующее значение:
authoritative;
Далее, в самом конце файла добавляем следующее:
subnet 192.168.100.0 netmask 255.255.255.0
Сохраняем файл.
Теперь нам надо указать при обращении к какому интерфейсу будут выдаваться адреса для клиентов. У нас это беспроводной интерфейс wlan0.
sudo nano /etc/default/isc-dhcp-server
находим параметр INTERFACES=”” и меняем на INTERFACES=”wlan0″
2. Настройка беспроводного интерфейса
sudo nano /etc/network/interfaces
iface wlan0 inet static address 192.168.100.1 netmask 255.255.255.0
3. Настройка точки доступа
Создадим и отредактируем конфигурационный файл для точки доступа
sudo touch /etc/hostapd/hostapd.conf sudo nano /etc/hostapd/hostapd.conf
Вставим следующее содержимое:
interface=wlan0 driver=rtl871xdrv ssid=Raspberry_AP hw_mode=g channel=6 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=PaSsWoRd wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
ssid= имя сети, wpa_passphrase= пароль для подключения
4. Настройка NAT
Теперь осталось сделать так, чтобы на подключаемых устройствах появился интернет.
Найдем и раскомментируем строку net.ipv4.ip_forward=1
Сохраняем и закрываем файл.
Далее, создадим правила iptables для организации раздачи интернет.
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT
sudo sh -c "iptables-save > /etc/iptables.rules"
Добавим в автозагрузку правила iptables
Идем в самый конец файла и перед exit 0 добавим строку:
Перегружаем Raspberry и смотрим на устройствах заработало или нет.
Если не работает – проверяем что именно не запускается.
sudo service hostapd status sudo service isc-dhcp-server status