Pomozte mi rozjet bridge mezi wlan0 a eth0

Pomozte mi rozjet bridge mezi wlan0 a eth0
« kdy: 24. 05. 2016, 21:12:53 »
Ahoj, potřeboval bych poradit s nastavením bridge, jsem ve stavu, kdy mi to "skoro" funguje, ale někde je pořád zakopaný pes.
Nejdřív popíšu svoji situaci. Mám obyčejný domácí router (NAT, DHCP server, AP pro wifi), k němu přes ethernet připojený stolní počítač pojmenovaný Dole. Přes wifi chci připojit počítač Prcek (headless, debian Wheezy, jediný počítač s wifi konektivitou), který chci spojit ethernetem s dalším počítačem Nahoře. Chci aby byly počítače Dole a Nahoře v jedné síti, takže nechci mít v Prckovi další NAT, ale bridge.
Výchozí stav /etc/network/interfaces v Prckovi:

/etc/network/interfaces.bak

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto wlan0
iface wlan0 inet dhcp
    wpa-ssid jmenowifi
    wpa-key-mgmt WPA-PSK
    wpa-psk heslowifi


jsem změnil po provedení apt-get install bridge-utils změnil na:

/etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet manual

auto wlan0
iface wlan0 inet manual

auto br0
iface br0 inet dhcp
  bridge_ports wlan0 eth0
  bridge_stp off
  bridge_fd 0
  bridge_waitport 0

wpa-iface  wlan0
wpa-bridge br0
wpa-ssid jmenowifi
wpa-key-mgmt WPA-PSK
wpa-psk heslowifi

Chová se to ale tak, že počítač Nahoře dostane IP adresu z DHCP serveru , ale s nikým nekomunikuje (ani ostatní s ním), přičemž ping na router, na Dole, ale i na Prcka vyprodukuje Request timed out. Ale ping na neexistující IP adresu udělá Destination host unreachable.

Z počítače Dole se k Prckovi normálně připojím přes SSH, on také na počítač Nahoře nevidí.

Pomozte mi to prosím rozjet...


Lol Phirae

Re:Pomozte mi rozjet bridge mezi wlan0 a eth0
« Odpověď #1 kdy: 24. 05. 2016, 21:57:52 »
Ach jo. Nepotřebuješ žádnej bridge ani další NAT. Potřebuješ to normálně mezi těma sítěma routovat. To je mor, tohle bridgování wifiny s ethernetem.

skrzjdouci

Re:Pomozte mi rozjet bridge mezi wlan0 a eth0
« Odpověď #2 kdy: 24. 05. 2016, 22:11:26 »
Přesně jak uvádí Lol Phirae - zapnout routování:
echo 1 > /proc/sys/net/ipv4/ip_forward

Sten

Re:Pomozte mi rozjet bridge mezi wlan0 a eth0
« Odpověď #3 kdy: 24. 05. 2016, 22:34:13 »

auto eth0
iface eth0 inet manual

auto wlan0
iface wlan0 inet manual


Tyhle dvě specifikace jsou pravděpodobně špatně a v /etc/network/interfaces nemají být. Bridge si svoje rozhraní nahodí sám, pokud mu do toho někdo sahá, může to dopadnout všelijak.

Že dostane IP adresu od DHCP, ale jinak s nikým nekomunikuje, je velmi podivné. DHCP server pro komunikaci používá stejný IP protokol jako ping. Nemáte tam náhodou spuštěný špatně nastavený firewall?

Protože tam máte více bridgů (domácí router dělá další), doporučuji používat STP , tedy odstraňte řádky:


bridge_stp off
bridge_fd 0
bridge_waitport 0


Spuštění portů pak nějakou dobu trvá, sledujte dmesg, kde by to mělo říct, že jsou ve forwarding state.

rats

Re:Pomozte mi rozjet bridge mezi wlan0 a eth0
« Odpověď #4 kdy: 25. 05. 2016, 20:21:42 »
1) Vložte sem prosím výsledek následujících příkazů z Prcka:
ip link show up
brctl show

2) Request timed out je problém v lokální síti, zatímco Destination host unreachable je problém s routováním, takže obě odpovědi jsou za vámi uvedených okolností "v pořádku" - snažíte se pingnout hosta v lokální síti, který ale není ARPem dostupný, a pak se snažíte pingnout "neexistující" IP adresu, u čehož vám odpověď říká buď "nemám routu pro tento směr" nebo vám nějaký vzdálený router na trase říká "nemám routu pro tento směr".

3) Bridge je svým způsobem v tomto případě ošemetná záležitost - vy máte (chcete mít) vaši WLAN v Prckovi v módu klient, a je dost pravděpodobné, že AP, ke kterému máte Prcka přes WiFi připojeného, odmítá spojení z jakýchkoliv jiných MAC adres než z té jediné, kterou se mu Prcek autentizoval. A protože linuxový brigde = transparentní bridge... Čemuž by i odpovídalo chování DHCP, a proto také Prcek na Dole (a opačně) normálně vidí - klient je k AP autentizovaný správně, ale přes bridge neprocházejí rámce zdrojované jinou MAC adresou než Prckovou. I to lze řešit - arp-NATem...

Více může napovědět tcpdump a kontrola samotné komunikace na Prckovi...

Poznámka: PROBOHA! DHCP rozhodně nepoužívá stejný "IP protokol" jako ping! ....


Re:Pomozte mi rozjet bridge mezi wlan0 a eth0
« Odpověď #5 kdy: 25. 05. 2016, 21:39:41 »
2Lol Phirae, skrzjdouci: routování jsem se vyhnul, protože (jestli tomu rozumím dobře), musím mít dvě sítě, v první zajistit Prckovi stálou IP - to by šlo - a nastavit přes ni cestu v prvním routeru do druhé sítě - což aktuálně nejde, je to starý router bez možnosti takovýchto pokročilejších nastavení. Taky je to podle mě náchylné na rozbití se při případné změně síťového nastavení.

Tyhle dvě specifikace jsou pravděpodobně špatně a v /etc/network/interfaces nemají být. Bridge si svoje rozhraní nahodí sám, pokud mu do toho někdo sahá, může to dopadnout všelijak.
auto eth0
iface eth0 inet manual

auto wlan0
iface wlan0 inet manual

odstraněno
Protože tam máte více bridgů (domácí router dělá další), doporučuji používat STP , tedy odstraňte řádky:


bridge_stp off
bridge_fd 0
bridge_waitport 0


Spuštění portů pak nějakou dobu trvá, sledujte dmesg, kde by to mělo říct, že jsou ve forwarding state.
odstraněno, ale chová se to stejně. v dmesg jsem viděl, že jsou ve forwarding state. ale dle následujícího to STP asi stejně nejde, ne?

1) Vložte sem prosím výsledek následujících příkazů z Prcka:
ip link show up
brctl show


root@prcek:/home/pavel# ip link show up
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP mode DEFAULT qlen 1000
    link/ether 02:4c:09:00:c1:11 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP mode DORMANT qlen 1000
    link/ether 00:1b:00:a0:2a:65 brd ff:ff:ff:ff:ff:ff
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT
    link/ether 00:1b:00:a0:2a:65 brd ff:ff:ff:ff:ff:ff

root@prcek:/home/pavel# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.001b00a02a65       no              eth0
                                                        wlan0


3) Bridge je svým způsobem v tomto případě ošemetná záležitost - vy máte (chcete mít) vaši WLAN v Prckovi v módu klient, a je dost pravděpodobné, že AP, ke kterému máte Prcka přes WiFi připojeného, odmítá spojení z jakýchkoliv jiných MAC adres než z té jediné, kterou se mu Prcek autentizoval. A protože linuxový brigde = transparentní bridge... Čemuž by i odpovídalo chování DHCP, a proto také Prcek na Dole (a opačně) normálně vidí - klient je k AP autentizovaný správně, ale přes bridge neprocházejí rámce zdrojované jinou MAC adresou než Prckovou. I to lze řešit - arp-NATem...

toto jsem se taky někde dočetl, že to může být problém, ale pokud by to byl můj případ, tak nevím proč nekomunikuje ani počítač Nahoře s Prckem, jsou spojeni ethernetem.

Nemůže být problém, že br0 nějak přebere MAC, kterou má wlan0?

děkuji za snahu pomoci.

Re:Pomozte mi rozjet bridge mezi wlan0 a eth0
« Odpověď #6 kdy: 26. 05. 2016, 22:45:12 »
zkusil jsem podle https://wiki.debian.org/BridgeNetworkConnections#Setting_up_the_rules nastavit ebtables a pořád nejsem úspěšný :(

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Pomozte mi rozjet bridge mezi wlan0 a eth0
« Odpověď #7 kdy: 27. 05. 2016, 01:46:01 »
Tady je konfigurace bridge, co jsem mel kdysi na jednom PC a uz ji nepouzivam (proto ty komentare, ktere jsem liny mazat). Nekde jsem to vygoogloval, protoze podle manualu jsem to za ziveho boha nemohl rozjet. Je to uz dost dlouho, tak nevim, jestli to odpovida posledni linuxove mode - mozna se to dneska dela jinak.

Jeden rozdil, ktery me napada, je ten, ze vy ziskate adresu z DHCP dle konfigurace wlan0 mimo konfiguraci bridge a pak z obou interfejsu delate bridge, zatimco v me verzi je definice adresy obsazena v definici bridge. Predpokladam, ze jestli stale plati to, co jsem pouzil ja, mela by konfigurace DHCP namisto moji staticke take byt v ramci definice bridge. Nejjednodussi a bez googlovani pak bude, kdyz take pouzijete statickou adresu mimo vas DHCP pool. Predpokladam, ze pro vas neni zivotne dulezite, aby bridge ziskaval adresu z DHCP, staci, kdyz je mimo pool.

#iface br0 inet static
#    address 192.168.1.8
#    netmask 255.255.255.0
#    network 192.168.1.0
#    broadcast 192.168.1.255
#    gateway 192.168.1.1
#    bridge_ports br0 eth0 eth1
#    pre-up ifconfig eth0 down
#    pre-up ifconfig eth1 down
#    pre-up brctl addbr br0
#    pre-up brctl addif br0 eth0
#    pre-up brctl addif br0 eth1
#    pre-up ifconfig eth0 up
#    pre-up ifconfig eth1 up
#    post-down ifconfig eth0 0.0.0.0 down
#    post-down ifconfig eth1 0.0.0.0 down
#    post-down brctl delif br0 eth0
#    post-down brctl delif br0 eth1
#    post-down brctl delbr br0

Re:Pomozte mi rozjet bridge mezi wlan0 a eth0
« Odpověď #8 kdy: 27. 05. 2016, 18:13:39 »
Tak hlásím kapitulaci, provrtal jsem strop a natáhnul kabel.

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Pomozte mi rozjet bridge mezi wlan0 a eth0
« Odpověď #9 kdy: 27. 05. 2016, 19:40:34 »
Zbabelec....

skvedo

Re:Pomozte mi rozjet bridge mezi wlan0 a eth0
« Odpověď #10 kdy: 28. 05. 2016, 09:10:41 »
Důvod proč to nefungovalo je tříadresní schéma na L2 pro wifi. Pěkně je to vysvětleno zde https://wiki.openwrt.org/doc/howto/clientmode

Kabel je kabel.

rats

Re:Pomozte mi rozjet bridge mezi wlan0 a eth0
« Odpověď #11 kdy: 28. 05. 2016, 12:52:02 »
Důvod proč to nefungovalo je tříadresní schéma na L2 pro wifi. Pěkně je to vysvětleno zde https://wiki.openwrt.org/doc/howto/clientmode

Kabel je kabel.

Jo, tohle to určitě vysvětluje, to nepochybně :D :D

rats

Re:Pomozte mi rozjet bridge mezi wlan0 a eth0
« Odpověď #12 kdy: 28. 05. 2016, 13:08:14 »
Citace

root@prcek:/home/pavel# ip link show up
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP mode DEFAULT qlen 1000
    link/ether 02:4c:09:00:c1:11 brd ff:ff:ff:ff:ff:ff
3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP mode DORMANT qlen 1000
    link/ether 00:1b:00:a0:2a:65 brd ff:ff:ff:ff:ff:ff
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT
    link/ether 00:1b:00:a0:2a:65 brd ff:ff:ff:ff:ff:ff

root@prcek:/home/pavel# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.001b00a02a65       no              eth0
                                                        wlan0

wlan0 v mode DORMANT? Takže změna, všechno špatně, zpátky na stromy - ten WiFi interface nemáte správně spojený s AP - mode DORMANT znamená, že se sice tváří jako UP, ale neprojde přes něj vůbec nic - tipuju, že je špatně nějaký parametr pro připojení k AP (šifrování, PSK atd.). Zkontrolujte WPA supplicant, případně jiný tool, který pro to používáte a zkuste ověřit na AP, že je wlan0 z Prcka opravdu správně asociovaná k AP, a že tam dorazil z Prcka nějaký provoz.
MAC adresu br0 neberte v potaz, to je v pořádku, v současné době použije bridge v linuxu automaticky pro sebe nejnižší MAC adresu z rozhraní, která jsou do něj připojena.

V tom případě by mě ovšem zajímala i L3 vrstva, a to ta IP adresa, kterou podle vás ten počítač Nahoře obrdžel. Podle mě totiž neměl v tu chvíli žádnou IP adresu ani ten počítač Nahoře, a ani br0 (který, jestli se ještě správně orientuju v konfiguraci na Debianu, je nastavená také na DHCP) na Prckovi, protože ji oba neměli odkud získat. Ještě je možné, že ten počítač nahoře má povolený ZEROCONFIG, takže si dal adresu sám z 169.254.0.0/16.

Celé to působí velmi zvláštně na to, že se jedná o víceméně triviální síťovou záležitost, abych tak řekl úlohu ze základní linuxové síťařské školy :-)

Nicméně díra stropem je samozřejmě také řešení :-)

Logik

  • *****
  • 1 043
    • Zobrazit profil
    • E-mail
Re:Pomozte mi rozjet bridge mezi wlan0 a eth0
« Odpověď #13 kdy: 28. 05. 2016, 22:10:02 »
Já bych jen doplnil, že řešit to routováním nemusí být vždy řešení. Pak např. nebude fungovat hledání okolních počítačů sambou a podobný na broadcastu postavený protokoly.

Osobně bych to řešil tak, že bych z toho prcka přepnul do módu access point (např. pomocí hostapd).

daemon

Re:Pomozte mi rozjet bridge mezi wlan0 a eth0
« Odpověď #14 kdy: 28. 05. 2016, 23:48:54 »
Ach jo. Nepotřebuješ žádnej bridge ani další NAT. Potřebuješ to normálně mezi těma sítěma routovat. To je mor, tohle bridgování wifiny s ethernetem.

Proč je to mor?