LINUX.ORG.RU

Raspberry в качестве моста для wlan и ethernet

 , ,


1

4

Имеется сеть 192.168.1.0 роутер 192.168.1.1 с dhcp Есть распберри с debian Есть сетевой принтер к которому нет возможности провести кабель от роутера

Задача с помошью raspberry протащить принтер и сделать возможность печати из подсети 192.168.1.0

Поставил bridge-utils настройки пробовал разные но не могу заставить работать

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.2.9
#network 192.168.2.0
netmask 255.255.255.0
broadcast 192.168.2.255
gateway 192.168.1.1

#allow-hotplug wlan0
auto wlan0
iface wlan0 inet manual
#address 192.168.1.118
#netmask 255.255.255.0
#gateway 192.168.1.1

auto br0
iface br0 inet dhcp
#iface br0 inet static

bridge_ports wlan0 eth0
#address 192.168.1.119
#netmask 255.255.255.0
#gateway 192.168.1.1

bridge_stp off
#bridge_fd 0
bridge_waitport 5


wpa-iface wlan0
wpa-bridge br0

wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

br0       Link encap:Ethernet  HWaddr b8:27:eb:fa:2a:71  
          inet addr:169.254.217.179  Bcast:169.254.255.255  Mask:255.255.0.0
          inet6 addr: fe80::a873:f735:b8d8:7c8e/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:580 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:202393 (197.6 KiB)

eth0      Link encap:Ethernet  HWaddr b8:27:eb:fa:2a:71  
          inet addr:192.168.2.9  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:873 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:277289 (270.7 KiB)

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:147 errors:0 dropped:0 overruns:0 frame:0
          TX packets:147 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:12608 (12.3 KiB)  TX bytes:12608 (12.3 KiB)

wlan0     Link encap:Ethernet  HWaddr a0:f3:c1:0f:07:6a  
          inet addr:192.168.1.118  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:19522 errors:0 dropped:33 overruns:0 frame:0
          TX packets:598 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4134143 (3.9 MiB)  TX bytes:243916 (238.1 KiB)




настройки принтера
ip 192.168.2.100
255.255.255.0

Как решить задачу, может обойтись iptables без bridge utils?

Не совсем понятно. Есть принтер и малинка в сети 192.168.2.0/24, и есть сеть с вай-фаем 192.168.1.0/24. Малинка через вай-фай цепляется к 192.168.1.0/24. Ты хочешь через нее видеть принтер?

null123 ★★ ()

Купить любой роутер, сделать bridged network в настройках роутера, втыкнуть сетевой кабель принтера в этот самый роутер, спокойно печатать документы. От малинки отстать :)

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

Проще подождать когда помогут с bridge, я вот подписался, у меня та же проблема. Через GUI для openSUSE прекрасно поднимаю Bridge, а через консоль Debian не получается.

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

а почему бы не сделать проброс трафика с одного интерфейса на другой, а на клиентских машинах прописать route add 192.168.2.100 mask 255.255.255.255 <адрес малинки в сети 1> ?

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

не вариант. Зачем мне покупать еще один роутер если у меня уже есть один, только что бы подключить один принтер?

Маланка кстати в моей схеме еще и интернет радио и iptv на балконе. и принт сервер это доп функция на которую я хочу её повесить.

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

2 ноутбука на винде, один стационарный комп с убунту и 10кой, и терминалом. как то не хочется что то на клиентах прописывать.

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

Не совсем понятно. Есть принтер и малинка в сети 192.168.2.0/24, и >есть сеть с вай-фаем 192.168.1.0/24. Малинка через вай-фай цепляется >к 192.168.1.0/24. Ты хочешь через нее видеть принтер?

Да именно, и желательно что бы МФУ так же видела один из компов, так как МФУ без USB интерфейса и складывает отсканированные документы по сети в папку самбы на один из компов 192.168.1.0

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

Сделал так

Решил как писал ZenitharChampion, подойти с другого конца.

Пробросил интерфейсы 1. /etc/network/interfaces

auto lo
iface lo inet loopback

allow-hotplug eth0
#auto eth0
iface eth0 inet static
address 192.168.2.1
network 192.168.2.0
netmask 255.255.255.0
broadcast 192.168.2.255
gateway 192.168.2.1

allow-hotplug wlan0
auto wlan0
iface wlan0 inet static
address 192.168.1.118
netmask 255.255.255.0
broadcast 255.255.1.255
gateway 192.168.1.1

wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

pre-up iptables-restore < /etc/network/iptables



2. iptables
# Generated by iptables-save v1.4.21 on Wed Feb 22 17:51:50 2017
*mangle
:PREROUTING ACCEPT [1058:95012]
:INPUT ACCEPT [1027:93156]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [742:79312]
:POSTROUTING ACCEPT [743:79344]
COMMIT
# Completed on Wed Feb 22 17:51:50 2017
# Generated by iptables-save v1.4.21 on Wed Feb 22 17:51:50 2017
*filter
:INPUT ACCEPT [32:2683]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [18:1672]
-A FORWARD -i eth0 -o wlan0 -j ACCEPT
-A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
# Completed on Wed Feb 22 17:51:50 2017
# Generated by iptables-save v1.4.21 on Wed Feb 22 17:51:50 2017
*nat
:PREROUTING ACCEPT [5:662]
:INPUT ACCEPT [4:474]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o wlan0 -j SNAT --to-source 192.168.1.118
COMMIT
# Completed on Wed Feb 22 17:51:50 2017

3.
#!/bin/sh
#/etc/init.d/setuproutes
#
### BEGIN INIT INFO
# Provides: default routes for wlan0
# Required-Start: $syslog $network
# Required-Stop: $syslog
# Should-Start:
# Should-Stop:
# X-Start-Before:
# X-Stop-After:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: false
# Short-Description: adjust default routes
# Description: removes default route 192.168.2.1 adds default route 192.168.1.1
### END INIT INFO
sudo route del default gw 192.168.2.1 eth0
sudo route add default gw 192.168.1.1 wlan0
exit 0

4. Поднял на малинке dhcp

Итог

pi@raspberrypi:~ $ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         OpenWrt.lan     0.0.0.0         UG    0      0        0 wlan0
default         OpenWrt.lan     0.0.0.0         UG    303    0        0 wlan0
link-local      *               255.255.0.0     U     202    0        0 eth0
192.168.0.0     *               255.255.0.0     U     303    0        0 wlan0
192.168.1.0     *               255.255.255.0   U     0      0        0 wlan0
192.168.2.0     *               255.255.255.0   U     0      0        0 eth0

ifconfig
eth0      Link encap:Ethernet  HWaddr b8:27:eb:fa:2a:71  
          inet addr:192.168.2.1  Bcast:192.168.2.255  Mask:255.255.255.0
          inet6 addr: fe80::1975:43bd:7656:8ca3/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:20 errors:0 dropped:0 overruns:0 frame:0
          TX packets:116 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2320 (2.2 KiB)  TX bytes:20890 (20.4 KiB)

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:151 errors:0 dropped:0 overruns:0 frame:0
          TX packets:151 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:12652 (12.3 KiB)  TX bytes:12652 (12.3 KiB)

wlan0     Link encap:Ethernet  HWaddr a0:f3:c1:0f:07:6a  
          inet addr:192.168.1.118  Bcast:255.255.1.255  Mask:255.255.255.0
          inet6 addr: fe80::a2f3:c1ff:fe0f:76a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1716 errors:0 dropped:14 overruns:0 frame:0
          TX packets:464 errors:0 dropped:1 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:249327 (243.4 KiB)  TX bytes:82274 (80.3 KiB)




Теперь вопрос как прописать на роутере 192.168.1.1 маршрутизацию в подсеть 192.168.2.0

Пробовал на роутере маску менять 255.255.0.0 не работает из сети 192.168.1.0 не видит подсеть 192.168.2.0
Timuridze ()
Ответ на: Сделал так от Timuridze

> Теперь вопрос как прописать на роутере 192.168.1.1 маршрутизацию в подсеть 192.168.2.0

Есть такая штука «Маскарадинг». Это когда с помощью IPTABLES один интерфейс расшаривает себя на другие. Например, команды ниже расшаривают интерфейс ppp0 (3G-модем) на все интерфейсы сразу - в данном случае чтобы пустить интернет по eth0.

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

Кроме того, надо чтобы работал DHCP-сервер, который выдаст IP и сообщит адрес шлюза. А вторую команду можно добавить в /etc/sysctl.conf. Брал тут, там описывается временная точка доступа Wi-Fi. А вот тут всё на более высоком уровне.

ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 3)
Ответ на: комментарий от ZenitharChampion

Не совсем понятно.. Мне надо на малинке расшарить интерфейс wlan0?

sudo sysctl net.ipv4.ip_forward=1 это я прописал уже на малине.

Dhcp у меня работает и на роутере и на малине

Timuridze ()

У вас немного каша в голове, bridge utils (br) - это софтверная реализация ethernet switch. Какие роуты, маршруты и iptables могут быть/нужны для простейшего ethernet свича ? Никакие, ему даже IP не нужен для работы.

Поэтому вам либо форвардинг (полноценный роутинг) нужен, либо ethernet бридж. Все вместе смешивать не нужно.

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

Так вот о чем и речь. я начинал с бриджа 1й пост...Но бридж у меня не заработал. Хотя вроде все по мануалу делал.

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

не исключаю что я все усложняю и действительно что то напутал...

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

пытаюсь прописать статичный маршрут на роутере

Статические маршруты IPv4 IP-адрес или сеть -192.168.2.11 адрес принтера Маска сети IPv4 -255.255.255.255 IPv4-адрес шлюза 192.168.1.1 вот тут что я должен прописать?матрека 0 метрика 0 MTU1500

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

Надо убрать адреса с сбриджованных интерфейсов, оставить адрес только на интерфейсе бриджа. В результате машинка будет иметь один адрес в сети 192.168.1.0/24, и будет бриджевать чужие кадры между проводом и вайфаем. Конфиг получится вот такой:

auto lo
iface lo inet loopback

auto br0
iface br0 inet dhcp
  bridge_ports wlan0 eth0
  bridge_stp off
  bridge_waitport 5

wpa-iface wlan0
  wpa-bridge br0
  wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iliyap ★★★★★ ()
Последнее исправление: iliyap (всего исправлений: 1)
Ответ на: Сделал так от Timuridze

192.168.1.1 маршрутизацию в подсеть 192.168.2.0

Можно узнать на каких протоколах/портах работает принтер и пробросить эти порты с адреса малины 192.168.1.1:NNN на адрес принтера 192.168.2.100:NNN. Пробрасывать с помощью iptables DNAT/SNAT.

Тогда на клиентских машинах можно будет указывать 192.168.1.1:NNN, а не адрес и порт принтера.

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

Должно работать. Надо подиагностировать, почему не работает. tcpdump снять с br0 и wlan0, чтоб увидеть, почему dhcp не доходит.

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

tcpdump довольно сложен.

но вот что в логах br0 не может получить ip

Feb 23 06:29:19 raspberrypi dhclient: No DHCPOFFERS received.
Feb 23 06:29:19 raspberrypi dhclient: No working leases in persistent database - sleeping.
Feb 23 06:33:00 raspberrypi dhclient: DHCPDISCOVER on br0 to 255.255.255.255 port 67 interval 5
Feb 23 06:33:05 raspberrypi dhclient: DHCPDISCOVER on br0 to 255.255.255.255 port 67 interval 8
Feb 23 06:33:13 raspberrypi dhclient: DHCPDISCOVER on br0 to 255.255.255.255 port 67 interval 12
Feb 23 06:33:25 raspberrypi dhclient: DHCPDISCOVER on br0 to 255.255.255.255 port 67 interval 17
Feb 23 06:33:42 raspberrypi dhclient: DHCPDISCOVER on br0 to 255.255.255.255 port 67 interval 7
Feb 23 06:33:49 raspberrypi dhclient: DHCPDISCOVER on br0 to 255.255.255.255 port 67 interval 9
Feb 23 06:33:58 raspberrypi dhclient: DHCPDISCOVER on br0 to 255.255.255.255 port 67 interval 3
Feb 23 06:34:01 raspberrypi dhclient: No DHCPOFFERS received.


Таким образом при таких настройках
auto lo
iface lo inet loopback
iface eth0 inet manual

auto br0
iface br0 inet dhcp
bridge_ports wlan0 eth0

auto wlan0
iface wlan0 inet manual

bridge_stp off
bridge_fd 0
bridge_waitport 0
wpa-iface wlan0
wpa-bridge br0
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

wlan0 получает Ip от роутера, хотя должен так же и eth0 быть неактивным а br0 доложен иметь ip 
br0       Link encap:Ethernet  HWaddr b8:27:eb:fa:2a:71  
          inet6 addr: fe80::1975:43bd:7656:8ca3/64 Scope:Link
          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)

eth0      Link encap:Ethernet  HWaddr b8:27:eb:fa:2a:71  
          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:136 errors:0 dropped:0 overruns:0 frame:0
          TX packets:136 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1 
          RX bytes:11472 (11.2 KiB)  TX bytes:11472 (11.2 KiB)

wlan0     Link encap:Ethernet  HWaddr a0:f3:c1:0f:07:6a  
          inet addr:192.168.1.118  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:783 errors:0 dropped:55 overruns:0 frame:0
          TX packets:123 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:14222710 (13.5 MiB)  TX bytes:665459 (649.8 KiB)


Почему же так происходит? 
Может быть установить вручную без dhcp?
Timuridze ()
Ответ на: комментарий от iliyap

Не добавляется. Немного погуглил, оказывается некоторые адаптеры могут быть проблемными. Поменял адаптер на какой то ТП-Линк. Результат мост работает, по крайней мере интерфейсы объеденились. но теперь другая проблема, во первых мост не получает адрес по dhcp, а если я объединяю вручную то не могу подключится по ip моста к малинке

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

Нашел статью https://ubuntuforums.org/showthread.php?t=1692292

To obtain a bridge, we can, as page https://help.ubuntu.com/community/Ne...nnectionBridge instructs us, use this: Code: ifconfig eth0 0.0.0.0 ifconfig wlan0 0.0.0.0 brctl addbr ethtowifi brctl addif ethtowifi wlan0 eth0 ifconfig ethtowifi up and it won't work in my case.

Here are the reasons: 1. wlan0 interface won't authenticate to Acces Point (further denoted as AP), because EAPol messages get eaten by ethtowifi. 2. AP will reject ethernet frames with MAC addresses different from those which are stored in its tables. And Linux bridges frames transparently - i. e. it doesn't change MAC adresses in frames, bypassing bridge. So, if I connect a new computer to my laptop through eth0 and want it to communicate with AP - AP will reject.

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

Проблема решена:

Рабочее решение.

1. sudo apt-get install parprouted dhcp-helper avahi-daemon 2. /etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet manual

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
  post-up /usr/sbin/parprouted eth0 wlan0
  post-down /usr/bin/killall /usr/sbin/parprouted
  # clone the dhcp-allocated IP to eth0 so dhcp-helper will relay for the correct subnet
  post-up /sbin/ip addr add $(/sbin/ip addr show wlan0 | perl -wne 'm|^\s+inet (.*)/| && print $1')/32 dev eth0
  post-down /sbin/ifdown eth0


3. /etc/sysctl.d/local.conf to enable IP forwarding:
 
net.ipv4.ip_forward=1

4. Enable DHCP relay: /etc/default/dhcp-helper
# relay dhcp requests as broadcast to wlan0
DHCPHELPER_OPTS="-b wlan0"

5. Edit /etc/avahi/avahi-daemon.conf to enable mDNS relaying:
[reflector]
enable-reflector=yes


6. Перезагрузка
https://wiki.debian.org/BridgeNetworkConnectionsProxyArp

В итоге принтер получает адрес из подсети 192.168.1.0 автоматически.
Timuridze ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.