LINUX.ORG.RU
ФорумAdmin

Как раздать 3G-интернет при помощи Raspberry Pi, и другие вопросы

 , ,


2

2

Введение

Возникла необходимость раздать интернет с 3G-модема на несколько компьютеров. Эти компьютеры подключены к одному и тому же роутеру: 3 компьютера проводами, один - вай-ваем.

Вот только на роутере D-Link DIR-300 нет разъёма USB. Как подключить к нему 3G-модем? Можно на одном из компьютеров поднять интернет через данный модем, а на других компьютерах - указать первый компьютер в качестве шлюза интернета... Собственно, я так и делал до недавнего времени (благо, что и винда, и Linux, умеют расшаривать интернет по локальной сети).

А что если купить роутер с USB? использовать вместо роутера - Raspberry Pi?

Что я сделал?

Выключаем DIR-300, включаем 5-портовый свитч на 100 мегабит. Подключаем к нему 3 компьютера из 4. Компьютеры ругаются «неизвестная сеть!», не видят друг друга, файловый обмен не идёт!

Это не удивительно. Роутер, это же свитч «с мозгами». Роутер раздавал всем компьютерам IP-адреса. А свитч не раздаёт.

Задал каждому компьютеру статичный IP-адрес в диапазоне 192.168.1.[1-4]. Что ж, теперь они друг друга видят, и файловый обмен тоже работает.

Подключил к свичу Raspberry Pi 3. Дал ему IP-адрес 192.168.1.1. Настроил DHCP-сервер в диапазоне 192.168.1.[2-5]. После чего, подключил компьютеры (кроме одного, который по Wi-Fi). Получился вот такой бутерброд. Проверил - работает. Теперь на всех компьютерах можно вернуть «получение IP-адреса автоматически».

По сути, я получил то же самое, что и было с DIR-300. Только без Wi-Fi.

«Подводные камни»

Я боялся, что, так как Raspberry Pi 3 имеет медленный eth0-интерфейс, то файловый обмен между компьютерами будет медленный. Но я зря боялся: оказалось, что компьютеры устанавливают между собой прямые соединения, а не гоняют трафик через Raspberry Pi. Странно: почему я думал, что трафик между 192.168.1.2 и 192.168.1.3 идёт транзитом через 192.168.1.1?

Что ж, теперь я буду знать, что 192.168.1.1 не участвует в файловом обмене. Он раздаёт IP-адреса, после чего, фактически, не нужен. Хотя, потом он будет нужен, потому что потом он станет шлюзом в интернет...

Подключаем Wi-Fi

Файл /etc/network/interfaces

auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet static
    address 192.168.1.1
    netmask 255.255.255.0
    network 192.168.1.0
    broadcast 192.168.1.255

allow-hotplug wlan0
iface wlan0 inet static
    address 192.168.2.1
    netmask 255.255.255.0
    network 192.168.2.0
    broadcast 192.168.2.255

Файл DHCP-сервера dnsmasq:

interface=eth0
interface=wlan0
dhcp-range=eth0,192.168.1.2,192.168.1.8,72h
dhcp-range=wlan0,192.168.2.2,192.168.2.8,72h

Файл точки доступа Wi-Fi hostapd:

interface=wlan0
#bridge=br0
driver=nl80211
ssid=НАЗВАНИЕТОЧКИДОСТУПА
hw_mode=g
ieee80211d=1
country_code=RU
ieee80211n=1
auth_algs=1
channel=11
wpa=2
wpa_passphrase=ПАРОЛЬТОЧКИДОСТУПА
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
macaddr_acl=0

Запускаем... Смотрим... Появилась точка доступа. Подключаем последний компьютер по Wi-Fi. Теперь он тоже в локальной сети, вот только в другом диапазоне адресов 192.168.2.x. Может создать интерфейс br0 и кинуть туда eth0 и wlan0? Тогда по Wi-Fi тоже будут адреса 192.168.1.x

Раздаём интернет

Включаем 3G-модем, ждём когда 3G-модем начнёт имитировать сетевую карту и создаст устройство usb0, раздающее интернет. Нет, не создаёт (старый модем, который не умеет так делать). Тогда соединяемся с интернетом при помощи wvdial, получив устройство ppp0. Запускаем раздачу интернета с интерфейса ppp0 на все доступные интерфейсы:

sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
sudo sysctl -w net.ipv4.ip_forward=1

Проверяем... Интернет на компьютерах есть. DHCP-сервер уже раздал адрес шлюза интернета 192.168.1.1.

Осталось это всё запихать в автозагрузку как-то, и включить SSH и VNC для удалённого администрирования. Эх, веб-интерфейс бы...

Вопросы специалистам

Я добавил правило iptables в автозагрузку, создав файл /etc/network/if-up.d/00-iptables. Сделал этот файл исполняемым при помощи chmod +x. Содержимое файла:

#!/bin/sh
iptables-restore < /etc/firewall.conf

Файл /etc/firewall.conf я создал командой sudo iptables-save /etc/firewall.conf. Вот что получилось:

# Generated by iptables-save v1.4.21 on Mon Dec 12 21:37:11 2016
*filter
:INPUT ACCEPT [139:9528]
:FORWARD ACCEPT [19:1955]
:OUTPUT ACCEPT [100:10836]
COMMIT
# Completed on Mon Dec 12 21:37:11 2016
# Generated by iptables-save v1.4.21 on Mon Dec 12 21:37:11 2016
*nat
:PREROUTING ACCEPT [24347:1868498]
:INPUT ACCEPT [6804:526860]
:OUTPUT ACCEPT [1879:137379]
:POSTROUTING ACCEPT [39:2515]
-A POSTROUTING -o ppp0 -j MASQUERADE
COMMIT
# Completed on Mon Dec 12 21:37:11 2016

RPi при запуске раздаёт IP-адреса по eth0 и wlan0, благодаря чему работает локалка. А вот интернет приходится стартовать вручную, так как я не знаю, как запускать wvdial автоматически. Пока что решил мега-костылём: создал нового пользователя startap, дал ему права sudoers, разрешил этому юзеру автологин в tty2, и в ~/.bashrc прописал sudo wvdial. Как же всё-таки cделать правильно?

Дальшейние планы

  1. Сделать ФС устройства read only. Потому что, при внезапной потере питания, есть риск повредить системные файлы, и система больше не стартанёт. А система должна быть отказо-устойчивой.
  2. Настроить сервер Samba. В данный момент мастер-сервером становится тот компьютер, который был включен раньше всех. Если его выключить - остальные компьютеры перестают видеть друг друга, разве что напрямую вбивать IP или имя компьютера в адресной строке. Надо чтобы мастер-сервером стал роутер.
  3. Настроить видеонаблюдение (CCTV) при помощи видеокамеры для Raspberry Pi. Есть удобная софтина MotionEye, которая использует ImageMagick и аппаратный энкодер h264 на RPi. Осталось только сделать что-то вроде видеорегистратора, с записью видео в файлы по 15 минут каждый, и удалением старых файлов по мере переполнения storage. А также возможность смотреть это через VNC на мониторе, либо сами файлы через SMB.
  4. Подключить SSD в качестве storage для пункта 3, так как microSD-флешка очень медленная и лагучая. Какой SSD посоветуете? Должен ли SSD уметь делать trim самостоятельно? Или операционка Raspbian делает это сама? И можно ли установить систему на SSD вообще? Ну или tmpfs на SSD поднять, чтоб ускорить устройство.
  5. Может ещё что-нибудь вкусное поднять на устройстве.

Ответ на: комментарий от zgen

Видимо, ОП хочет узнать, что он делает не так.

l4gfcm ★★ ()
Ответ на: комментарий от zgen

вот же он, вопрос — ТС не умеет в systemd (и наверное гордится этим)

А вот интернет приходится стартовать вручную, так как я не знаю, как запускать wvdial автоматически. Пока что решил мега-костылём: создал нового пользователя startap, дал ему права sudoers, разрешил этому юзеру автологин в tty2, и в ~/.bashrc прописал sudo wvdial. Как же всё-таки cделать правильно?

pohepi ()

Большое спасибо за написанное ховто.
Но есть вопрос: настройки iptables сбросятся при перезагрузке сети, как вы предлагаете сделать их постоянными?

П.С. Продублируйте ховто на ховтовнике опеннета.

torvn77 ★★★★★ ()

А вот интернет приходится стартовать вручную, так как я не знаю, как запускать wvdial автоматически.

Ну это же просто, лезешь в /etc/init.d, выбираешь там скрипт какой понравится и переписываешь секции start, stop и reload|restart, после чего создаёшь симлинки в /etc/rc.*
Создавать их можно методом копирования и редактирования симлинков от уже существующих сервисов.

torvn77 ★★★★★ ()

Раздача интернета включается типом сети shared в настройках NetworkManager. Он и проводные сети поддерживает, и Wi-Fi, и DHCP сам поднимет, и NAT настроит. И «звонить» через PPP модема он тоже умеет. Конфигурировать можно псевдографическим nmtui.

А в современных десктоп-версиях и вовсе есть кнопка «hotspot» настраивающая всё буквально одним кликом.

Systemd-networkd не имеет графического конфигуратора, но им тоже можно настроить раздачу адреса через DHCP и NAT парой строк в конфигурационном файле интерфейса.

ValdikSS ★★★★★ ()
Последнее исправление: ValdikSS (всего исправлений: 3 )

Какая захватывающая история.
По сабжу: ТС, решать конечно тебе, но я бы на твоём месте забил на всю эту «костыльную» затею и купил нормальный роутер с USB. Б/у в районе 500руб обойдётся. Если нету 500р, то я бы из всего этого огорода, оставил DIR-300 с функцией DHCP и раздачей Wi-fi. Дал бы rPI статичный адрес из сети 192.168.1.Х, а DHCP серверу на DIR-300 сказал, чтоб в качестве шлюза он выдавал адрес rPI. Если DHCP на DIR-300 не умеет этого делать, то прошить OpenWRT на DIR-300 и в путь. В сухом остатке - малинка на себя берёт задачу поднятия ppp через 3G и раздачу его в локалку.

CeMKa ()
Ответ на: комментарий от CeMKa

Кстати, да. Спасибо, я так и сделаю. Прошивка DD-WRT.

Вчера пытался сделать br0 и не смог подключиться к устройству после перезагрузки. Пришлось подключать монитор.

ZenitharChampion ★★★★★ ()
Ответ на: комментарий от ZenitharChampion

Если так то рекомендую Zixel, там у них целая ОС с кучей плугинов от сообщества.

Бери с двумя usb портами, в один воткнёшь модем, в другой usb накопитель для использования в качестве сетевой шары и места для закачки торрентов встроенным в роутер клиентом.

torvn77 ★★★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.