Jak oddělit a nezávisle adresovat jedno Wi-Fi rozhraní

Jose D

  • *****
  • 626
    • Zobrazit profil
Re:Jak oddělit a nezávisle adresovat jedno Wi-Fi rozhraní
« Odpověď #15 kdy: 10. 02. 2021, 14:13:42 »
Tohle je přímo ukázkový příklad pro network namespaces. ..
..  tohle vidím poprvé a nejspíš je to hotové řešení přesně mého problému  :D ..

jj, tak tak. tohle je dost zajímavé a taky jsem se s tím ještě přímo nesetkal.

.. man ip-rule ..

taky mě to napadlo, ale myslím, že tohle by nefungovalo při kolizi IP rozsahů na těch dvou interface, nebo se mýlím?
Triviální by samozřejmě bylo něco jako ip rule add uidrange 1010-1011 lookup 123456 - ale myslím, že pokud bychom měli dvě routy scope link do stejných IP rozsahů, ale fyzicky různých sítí, tak by to nefungovalo, minimálně pro lokální traffic v těch sítích..(?)


Re:Jak oddělit a nezávisle adresovat jedno Wi-Fi rozhraní
« Odpověď #16 kdy: 10. 02. 2021, 15:34:26 »
.. man ip-rule ..
taky mě to napadlo, ale myslím, že tohle by nefungovalo při kolizi IP rozsahů na těch dvou interface, nebo se mýlím?

Tak pochopil jsem to tak, že jedna routa bude
Kód: [Vybrat]
192.168.0.0/24 na eth0 a druhá
Kód: [Vybrat]
192.168.0.0/24 na wlan1 a prostě se dle pravidla použije jedna nebo druhá bez ohledu na metriky apod. Ale asi to není z hlediska tcp/ip úplně dobrá situace a může se to klidně někde vytelit - nevím co by se např. stalo, pokud by na obou rozhraní byly úplně totožné IP adresy  >:(

Ještě mě napadlo mě jak by si s tím poradil routovací démon (RIP)? Ale to se pro účel rychlého nastavení v duplicitní siti asi nehodí, minimálně by tam byla prodleva než si RIP démon osahá topologii. A byla by to asi celkově prasárna...

Re:Jak oddělit a nezávisle adresovat jedno Wi-Fi rozhraní
« Odpověď #17 kdy: 10. 02. 2021, 15:34:54 »
Koukám, že se tu dobře rozjela debata. Díky za všechny příspěvky a jdu si s tím pohrát. Je fakt, že jelikož budu v namespaces spouštět vícero démonů, tak to už bude možná snadnější to rovnou strčit celé do kontejneru.

Re:Jak oddělit a nezávisle adresovat jedno Wi-Fi rozhraní
« Odpověď #18 kdy: 10. 02. 2021, 15:44:03 »
taky mě to napadlo, ale myslím, že tohle by nefungovalo při kolizi IP rozsahů na těch dvou interface, nebo se mýlím?
Proč by nemělo? Konfliktní routy nejsou problém, pokud nejsou ve stejné tabulce. Pravidla vám pak říkají, ve které tabulce (nebo obecně ve kterých a v jakém pořadí) se má pro daný paket provést lookup.

Re:Jak oddělit a nezávisle adresovat jedno Wi-Fi rozhraní
« Odpověď #19 kdy: 10. 02. 2021, 15:46:09 »
taky mě to napadlo, ale myslím, že tohle by nefungovalo při kolizi IP rozsahů na těch dvou interface, nebo se mýlím?
Triviální by samozřejmě bylo něco jako ip rule add uidrange 1010-1011 lookup 123456 - ale myslím, že pokud bychom měli dvě routy scope link do stejných IP rozsahů, ale fyzicky různých sítí, tak by to nefungovalo, minimálně pro lokální traffic v těch sítích..(?)
ip rule umožňuje to, že máte v systému víc routovacích tabulek, a pomocí pravidel určíte, která routovací tabulka se má kdy použít. Tj. v tomto případě by se kolizní rozsahy nepotkávaly v jedné routovací tabulce, takže by nevznikala ta kolize. Samozřejmě pokud by se podařilo pakety správně pomocí pravidel rozházet mezi ty tabulky.

Každopádně Ondrovo řešení pomocí jmenných prostorů je daleko elegantnější, zaměřil bych se na to.


Jose D

  • *****
  • 626
    • Zobrazit profil
Re:Jak oddělit a nezávisle adresovat jedno Wi-Fi rozhraní
« Odpověď #20 kdy: 10. 02. 2021, 16:31:07 »
Proč by nemělo? Konfliktní routy nejsou problém, pokud nejsou ve stejné tabulce. ...

Teď jsem si to zkusil na nějakém boxu, a jsem schopný měnit i routy s proto kernel, což jsem nevěděl, že jde. Takže poslední okrajový případ který nevím, jak by se choval jsou úplně identické IP a procesy na nich poslouchající.

Ondrovo řešení pomocí jmenných prostorů je daleko elegantnější, zaměřil bych se na to.

souhlas.

Re:Jak oddělit a nezávisle adresovat jedno Wi-Fi rozhraní
« Odpověď #21 kdy: 13. 02. 2021, 00:44:26 »
Takže aby to fungovalo musí network namespaces podporovat explicitně příslušná wifina:

Kód: [Vybrat]
# iw phy phy1 info | grep set_wiphy_netns
* set_wiphy_netns

Což třeba rozšířené usb wifiny s rtl8188 neumí a nedaří se je přesunout do namespace :(

Kód: [Vybrat]
# iw phy phy0 set netns name iotgw-configuration
command failed: Operation not supported (-95)

Což to omezuje použití. Ani nevím, jak dohledat, které usb wifiny to umí?

Pokud to wifina umí  - jako třeba ta integrovaná v Raspberry PI - tak to funguje :)

V praxi budu muset konfigurovat IOT zařízení pomocí integrované wifiny (z namespacu) a pro běžný provoz používat externí usb wifinu.

To mne mimochodem nutí také vyřešit predikovatelné (reprodukovatelné) pojmenování síťových rozhraní protože wlan0 a wlan1 se inicializují náhodně takže nepoznám která je která.
« Poslední změna: 13. 02. 2021, 00:46:57 od Ondrej Nemecek »

Re:Jak oddělit a nezávisle adresovat jedno Wi-Fi rozhraní
« Odpověď #22 kdy: 13. 02. 2021, 00:49:53 »

Nevím zda to je vlastnost hardware nebo kernel modulu, zkoumám tyhle ovladače:

https://github.com/kimocoder/realtek_rtwifi
https://github.com/aircrack-ng/rtl8188eus/issues/104

Takže aby to fungovalo musí network namespaces podporovat explicitně příslušná wifina:

Kód: [Vybrat]
# iw phy phy1 info | grep set_wiphy_netns
* set_wiphy_netns

Což třeba rozšířené usb wifiny s rtl8188 neumí a nedaří se je přesunout do namespace :(

Kód: [Vybrat]
# iw phy phy0 set netns name iotgw-configuration
command failed: Operation not supported (-95)

Což omezuje použití. Ani nevím, jak dohledat, které usb wifiny to umí?

Pokud to wifina umí  - jako třeba ta integrovaná v Raspberry PI - tak to funguje :)

V praxi budu muset konfigurovat IOT zařízení pomocí integrované wifiny (z namespacu) a pro běžný provoz používat externí usb wifinu.

To mne mimochodem nutí také vyřešit predikovatelné (reprodukovatelné) pojmenování síťových rozhraní protože wlan0 a wlan1 se inicializují náhodně takže nepoznám která je která.
« Poslední změna: 13. 02. 2021, 00:52:52 od Ondrej Nemecek »

Re:Jak oddělit a nezávisle adresovat jedno Wi-Fi rozhraní
« Odpověď #23 kdy: 13. 02. 2021, 16:13:43 »
Takže realtek_rtwifi umí namespaces, ale neumí AP mód, což vylučuje použití dvou stejných wifi karet (jedna jako AP a druhá v namespace jako klient). Je možná kombinace interní wifi RPI v namespace a externí USB wifi pro běžný provoz.

Podpora namespaces v systemd vypadá docela dobře, jedna unit mi vyrobí namespace a druhá tam připojí wifinu a veth rozhraní. Na těchto unitech závisí pak ten IOT komunikační software, který běží ve dvou procesech z nichž jeden je v namespace a povídají si přes rmi. Systemd spustí proces v namespace sám díky direktivě JoinsNamespaceOf a PrivateNetwork.

Děkuji hlavně Ondřejovi Celetkovi a Michalovi Kubečkovi za nasměrování na namespaces. Pro úplně ideální řešení bych potřeboval ještě usb wifi, které umí AP mód (pomocí wpa_supplicant) i namespaces. Pokud by měl někdo tip kde hledat, uvítám to.

Re:Jak oddělit a nezávisle adresovat jedno Wi-Fi rozhraní
« Odpověď #24 kdy: 13. 02. 2021, 19:15:03 »
USBčkové wifiny dělával Atheros, ale konkrétně u řady ar6k tuším býval nějaký problém s provozem AP. Nevím jak u modernějšího AR9271. Ani nevím, kde takový dongle shánět - leda snad u Mousera. Netušíte někdo, co za čipset má takový "TP-LINK Archer T2U Plus" ?

Re:Jak oddělit a nezávisle adresovat jedno Wi-Fi rozhraní
« Odpověď #25 kdy: 13. 02. 2021, 22:56:04 »
USBčkové wifiny dělával Atheros, ale konkrétně u řady ar6k tuším býval nějaký problém s provozem AP. Nevím jak u modernějšího AR9271. Ani nevím, kde takový dongle shánět - leda snad u Mousera. Netušíte někdo, co za čipset má takový "TP-LINK Archer T2U Plus" ?

Je to asi rtl8812au.  Přijde mi divné, že nikde není databáze chipsetů, driverů a podporovaných funkcí. Nebo o ní jen nevím?

Re:Jak oddělit a nezávisle adresovat jedno Wi-Fi rozhraní
« Odpověď #26 kdy: 13. 02. 2021, 23:48:09 »
USBčkové wifiny dělával Atheros, ale konkrétně u řady ar6k tuším býval nějaký problém s provozem AP. Nevím jak u modernějšího AR9271. Ani nevím, kde takový dongle shánět - leda snad u Mousera. Netušíte někdo, co za čipset má takový "TP-LINK Archer T2U Plus" ?

Je to asi rtl8812au.  Přijde mi divné, že nikde není databáze chipsetů, driverů a podporovaných funkcí. Nebo o ní jen nevím?

O žádná tabulce nevím. OpenWRT má svou "table of hardware", ale to jsou kompletní routery. USB wifi je u nich nejspíš na okraji zájmu.

Nakonec asi nejjistější cesta k cíli je stáhnout si kernel na disk, vlézt do drivers/net/wireless a dál se už brodit grepem, pokud víte čeho se chytit - nějaké ty příkazy v rámci netlinku, structy používané pro definici USB ID's a PCI ID's v driverech apod. Komplikuje se to ještě víc - například Atheros míval shodná PCI ID's pro více modelů a rozlišoval je nějakými interními IDčky mimo PCI config space... nebo občas najdu HW IDčka deklarovaná mimo samotný adresář driveru, buď o patro výš, nebo někde v include/linux/ (v hlavičkových souborech) apod.

Ta malina je fakt pitomá, že nemá MiniPCI-e slot :-)