Интересное

Сообщение об ошибке

Warning: ini_set(): A session is active. You cannot change the session module's ini settings at this time in drupal_environment_initialize() (line 684 of /home/www/nixtalk.com/includes/bootstrap.inc).

Роутер на Raspberry Pi

Опубликовано сб, 12/06/2014 - 05:51 пользователем Demontager

router_raspberrypi
В ноябре приобрел по предзаказу Raspberry Pi модель B+. Отличительной особенностью модели B c плюсом является наличие 4-x USB портов и слота для MicroSD карты.
Брал для организации раздачи интернета через USB модем и подключения по WIFI. Установка и настройка роутера максимально проста, с использованием только коммандной строки.
Также для удобства настраивается раздача через WIFI на базе зарекомендовашего себя адаптера TP-LINK TL-WN722N. WI-Fi и локальная сеть будут находится в одной сети - соединение типа "мост".
По кабелю и по WIFI устройства будут получать IP адресса от DHCP сервера. Шаринг интернета будет работать на оба интерфейса.

Рекомендую выполнять установку на OC Linux Raspberrian, можно и другие образы взять, к примеру Pidora Linux.

Для начала обновляем репозитории

  1. sudo apt-get update
  2. sudo apt-get upgrade

Меняем пароль рута если необходимо (дефолтный пароль для pi юзера raspberry)

  1. passwd root

Устанавливаем пакет утилит для создания "моста" между LAN и WIFI

  1. sudo apt-get install bridge-utils

Редактируем файл настройки сетевых интерфейсов

  1. # nano /etc/network/interfaces
  2.  
  3. # The loopback network interface
  4. auto lo br0
  5. iface lo inet loopback
  6.  
  7. # Set up interfaces manually, avoiding conflicts with, e.g., network manager
  8. iface eth0 inet manual
  9.  
  10. iface wlan0 inet manual
  11.  
  12. # Bridge setup
  13. iface br0 inet static
  14. bridge_ports eth0 wlan0
  15. address 192.168.1.1
  16. broadcast 192.168.1.255
  17. netmask 255.255.255.0
  18. bridge_maxwait 1

Поясняю, eth0 и wlan0 это наши физические интерфейсы, а br0 виртуальный, который их объединяет. Как видите IP адресс мы задали статически, это будет IP br0. Чтобы мост долго не ожидал поднятия
всех своих интерфейсов, я установил параметр bridge_maxwait 1, иначе будет задержка 32 сек.

Для наглядности показываю сетевые интерфейсы, которые в итоге после всей настройки у нас появятся.

  1. pi@raspberrypi /root $ ifconfig -a
  2. br0 Link encap:Ethernet HWaddr 64:70:02:2e:a4:28
  3. inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
  4. inet6 addr: fe80::6670:2ff:fe2e:a428/64 Scope:Link
  5. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  6. RX packets:478 errors:0 dropped:0 overruns:0 frame:0
  7. TX packets:317 errors:0 dropped:0 overruns:0 carrier:0
  8. collisions:0 txqueuelen:0
  9. RX bytes:44989 (43.9 KiB) TX bytes:39862 (38.9 KiB)
  10.  
  11. eth0 Link encap:Ethernet HWaddr b8:27:eb:30:af:6f
  12. UP BROADCAST MULTICAST MTU:1500 Metric:1
  13. RX packets:0 errors:0 dropped:0 overruns:0 frame:0
  14. TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
  15. collisions:0 txqueuelen:1000
  16. RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
  17.  
  18. lo Link encap:Local Loopback
  19. inet addr:127.0.0.1 Mask:255.0.0.0
  20. inet6 addr: ::1/128 Scope:Host
  21. UP LOOPBACK RUNNING MTU:65536 Metric:1
  22. RX packets:0 errors:0 dropped:0 overruns:0 frame:0
  23. TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
  24. collisions:0 txqueuelen:0
  25. RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
  26.  
  27. mon.wlan0 Link encap:UNSPEC HWaddr 64-70-02-2E-A4-28-00-00-00-00-00-00-00-00-00-00
  28. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  29. RX packets:16309 errors:0 dropped:0 overruns:0 frame:0
  30. TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
  31. collisions:0 txqueuelen:1000
  32. RX bytes:3272953 (3.1 MiB) TX bytes:0 (0.0 B)
  33.  
  34. wlan0 Link encap:Ethernet HWaddr 64:70:02:2e:a4:28
  35. UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
  36. RX packets:477 errors:0 dropped:0 overruns:0 frame:0
  37. TX packets:429 errors:0 dropped:0 overruns:0 carrier:0
  38. collisions:0 txqueuelen:1000
  39. RX bytes:51661 (50.4 KiB) TX bytes:65505 (63.9 KiB)

В качестве DCHP сервера будем использовать dnsmasq

  1. sudo apt-get install dnsmasq

Открываем файл настроек dhcp сервера, в итоге у нас должны быть активны такие строки (пустые строки и комментарии убраны через regexp)

  1. root@raspberrypi:~# sed -e '/^#/d' /etc/dnsmasq.conf |sed -e '/^$/d'
  2. interface=br0
  3. bind-interfaces
  4. dhcp-range=192.168.1.100,192.168.1.200,12h

Поясняю, мы указываем что br0 является интерфейсом на котором следует запускать dhcp сервер, также делаем привязку к интерфейсу bind-interfaces и в третьей строке указываем диапазон dhcp адрессов, 12h - это
время на которое выдаются IP.

Настраиваем hostapd, ставим

  1. sudo apt-get install hostapd

Открываем файл настроек hostapd, по умолчанию его нет, создаем

  1. # nano /etc/hostapd.conf

и вписываем настройки нашей точки доступа

  1. # WiFi Hotspot
  2. interface=wlan0
  3. driver=nl80211
  4. #Access Point
  5. ssid=RASPBERRY
  6. hw_mode=g
  7. # WiFi Channel:
  8. channel=1
  9. macaddr_acl=0
  10. auth_algs=1
  11. ignore_broadcast_ssid=0
  12. wpa=3
  13. wpa_passphrase=VerySecretPassword
  14. wpa_key_mgmt=WPA-PSK
  15. wpa_pairwise=TKIP
  16. wpa_pairwise=CCMP

шифрование конечно же WPA, точка доступа называется RASPBERRY, пароль задается в wpa_passphrase= изменяйте как вам необходимо, все остальные настройки можно не трогать.

Теперь активируем наш конфиг hostapd, указываем в DAEMON_CONF= наш путь к файлу настроек

  1. #nano /etc/default/hostapd
  2.  
  3. DAEMON_CONF="/etc/hostapd.conf"

С конфигурационными файлами на этом все, теперь нам нужно включить шаринг и возможность пересылки пакетов ядром.
Вносим правила в iptables. Внимание! Это самая простая настройка шаринга, я специально не писал длинные цепочки проверок для большей безопасности.

  1. # iptables -A FORWARD -j ACCEPT
  2. # iptables -t nat -A POSTROUTING -j MASQUERADE

Ативируем forwarding

  1. #nano /etc/sysctl.conf
  2.  
  3. раскомментируем
  4.  
  5. net.ipv4.ip_forward=1

На этом собственно установка закончена, но не хватает автоматизации правил iptables, также нужно делать вручную перезапуск dhcp сервера. Поэтому я создал простенький bash скрипт
и назвал его firewall.sh

  1. root@raspberrypi:~# cat /root/firewall.sh
  2. #!/bin/bash
  3. iptables -A FORWARD -j ACCEPT
  4. iptables -t nat -A POSTROUTING -j MASQUERADE
  5.  
  6. #Delay network start
  7. sleep 5; ifdown br0
  8. sleep 1; ifup br0
  9. service dnsmasq restart

чтобы он отрабатывал при запуске системы, делаем его исполняемым и прописывал в rc.local

  1. # chmod +x /root/firewall.sh
  2.  
  3. # nano /etc/rc./local
  4.  
  5. /root/firewall.sh
  6. exit 0

Для подключения к Интернету я использовал модем Huawei E1550, а в качестве звонилки выступает wvdialer, устанавливаем его и открываем настройки.

  1. sudo apt-get install wvdialer

В файле настроек добавляем опциональную секцию, у меня это 3mob и вписываем после нее данные своего оператора

  1. #nano /etc/wvdial.conf
  2.  
  3. [Dialer Defaults]
  4. Init1 = ATZ
  5. Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
  6. Modem Type = Analog Modem
  7. ; Phone = <Target Phone Number>
  8. ISDN = 0
  9. ; Password = <Your Password>
  10. New PPPD = yes
  11. ; Username = <Your Login Name>
  12. Modem = /dev/ttyUSB2
  13. Baud = 9600
  14.  
  15. [Dialer 3mob]
  16. Init1 = ATH
  17. Init2 = ATE1
  18. Init3 = AT+CGDCONT=1,"IP","internet"
  19. Stupid mode = yes
  20. Phone = *99#
  21. Modem = /dev/ttyUSB0
  22. Username = blank
  23. Dial Command = ATD
  24. Password = blank
  25. Baud = 460800

Теперь чтобы подсоединиться к оператору, вводим

  1. # wvdialer 3mob

Чтобы отсоединиться нажимаем CTRL+C, процесс wvdialer можно отправить и в фон #wvdialer 3mob &, останавливать тогда его нужно через kill сигнал по PID-у процесса.

category_index: 
Поделится: 

2 комментария

Аватар пользователя Alex

автор Alex вкл пт, 02/20/2015 - 21:48

Привет. Сначала: спасибо за прекрасную статью.

Такой вопрос: малина стартует, поднимает связь через модем. сразу поднимает tun0 - openvpn туннель.

Как перенаправить клиентов, подключившихся к малине, в этот туннель.

Кстати. Малина не выдает IP клиентам.

pi@pi ~ $ ifconfig
br0 Link encap:Ethernet HWaddr b8:27:eb:93:9b:80
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

eth0 Link encap:Ethernet HWaddr b8:27:eb:93:9b:80
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1104 (1.0 KiB) TX bytes:1104 (1.0 KiB)

mon.wlan0 Link encap:UNSPEC HWaddr BC-F6-85-65-EE-8B-00-00-00-00-00-00-00-00-00-00
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RXpi@pi ~ $ ifconfig
br0 Link encap:Ethernet HWaddr b8:27:eb:93:9b:80
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

eth0 Link encap:Ethernet HWaddr b8:27:eb:93:9b:80
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1104 (1.0 KiB) TX bytes:1104 (1.0 KiB)

mon.wlan0 Link encap:UNSPEC HWaddr BC-F6-85-65-EE-8B-00-00-00-00-00-00-00-00-00-00
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:7041 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1579358 (1.5 MiB) TX bytes:0 (0.0 B)

ppp0 Link encap:Point-to-Point Protocol
inet addr:x.x.x.x P-t-P:10.64.64.64 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:207 errors:0 dropped:0 overruns:0 frame:0
TX packets:208 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:29292 (28.6 KiB) TX bytes:27265 (26.6 KiB)

tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.10 P-t-P:10.8.0.9 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:100 errors:0 dropped:0 overruns:0 frame:0
TX packets:98 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:10913 (10.6 KiB) TX bytes:10439 (10.1 KiB)

wlan0 Link encap:Ethernet HWaddr bc:f6:85:65:ee:8b
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

wwan0 Link encap:Ethernet HWaddr 02:50:f3:00:00:00
inet6 addr: fe80::50:f3ff:fe00:0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)
packets:7041 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1579358 (1.5 MiB) TX bytes:0 (0.0 B)

ppp0 Link encap:Point-to-Point Protocol
inet addr:x.x.x.x P-t-P:10.64.64.64 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:207 errors:0 dropped:0 overruns:0 frame:0
TX packets:208 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:29292 (28.6 KiB) TX bytes:27265 (26.6 KiB)

tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.8.0.10 P-t-P:10.8.0.9 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:100 errors:0 dropped:0 overruns:0 frame:0
TX packets:98 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:10913 (10.6 KiB) TX bytes:10439 (10.1 KiB)

wlan0 Link encap:Ethernet HWaddr bc:f6:85:65:ee:8b
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

wwan0 Link encap:Ethernet HWaddr 02:50:f3:00:00:00
inet6 addr: fe80::50:f3ff:fe00:0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:648 (648.0 B)

Скорее всего, нашел проблему с выдачей IP. Как выяснить, нормально ли работает dwa-127? Нашел статью для сборки драйвера, боюсь, не потяну сам. {ссылка не вставляется}

З.Ы. Один разок малина выдала=таки IP-шник и успешно пустила в сеть, но это было с подключенным LAN.

Аватар пользователя Demontager

автор Demontager вкл пн, 02/23/2015 - 07:52

По поводу перенаправления сразу что приходит на ум - это iptables конечно. Но именно так я никогда не делал, т.е. на самом роутере не перенаправлял клиентов в тунель, а использовал openvpn на клиентах напрямую, когда оно требовалось. Пробуйте составлять правила для iptables и не забудьте включить форвардинг в sysctl.conf. Я не в курсе как работает dwa-127 не доводилось щупать, видимо не особо стабильно раз у вас возникли проблемы.
В процессе тестов я заметил что если отваливается один из интерфейсов подключенных в мост, тогда dhcpd сервер перестает выдавать адресса, тогда помогает перезапуск dnsmasq

ps. Ссылки вставляйти в тег для кода, в редакторе он разрешен, вверху окна редактирования есть необходимые инструменты.

Добавить комментарий