Hálózai kapcsolat azonosítása nmcli segítségével.

 ( maszili | 2016. december 23., péntek - 11:50 )

Kis segítséget kérnék nmcli ügyben.

Az nmcli egy kényelmes szkriptelhető eszköz a hálózati kapcsolatok kezelésére. Van rá mód, hogy megállapítsam van-e a számítógépről kifelé irányuló (nem belső virtuális) kapcsolat. Arra nem találtam megoldást, hogy ha van kapcsolat akkor az melyik hálózati eszközt vagy hálózati kapcsolatot jelenti pontosan.

Kapcsolati státusz lekérdezése:

$ nmcli general status

STATE      CONNECTIVITY  WIFI-HW   WIFI      WWAN-HW  WWAN     
connected  full          disabled  disabled  enabled  disabled

STATE állapota:
connected - fizikai hálózati eszköz kapcsolódva.
connected (local only) - fizikai hálózati eszköz nincs kapcsolódva, csak pl. virtuális hálózati eszköz (vmnet1).
disconnected - semmilyen kapcsolat nincs jelen.

Arra vonatkozólag nincs infó, hogy a "connected" esetén pontosan melyik eszköz és/vagy kapcsoaltról van szó.

Hálózati eszközök lekérdezése:

$ nmcli device status

DEVICE  TYPE      STATE        CONNECTION 
eth0    ethernet  connected    DHCP       
vmnet1  ethernet  connected    vmnet1     
vmnet8  ethernet  connected    vmnet8     
wlan0   wifi      unavailable  --         
lo      loopback  unmanaged    --         

Aktív hálózati kapcsolatok lekérdezése:

$ nmcli connection show --active

NAME    UUID                                  TYPE            DEVICE 
DHCP    9c41f813-5a7b-4b59-a81b-444c10c383f9  802-3-ethernet  eth0   
vmnet8  c8887441-638d-43f3-a652-f96c44b4cc22  802-3-ethernet  vmnet8 
vmnet1  1e5e1056-f165-4f04-84cc-50f916200b29  802-3-ethernet  vmnet1 

Tehát a kérdésem a következő: Milyen módon lehetne összefüggést találni a kapcsolati státusz és az eszközök vagy hálózati kapcsolatok között?

Ha esetleg van (szkriptelhető) jobb módja a hálózat kezelésének mint az nmcli (vagy RTFM) akkor az is jó lehet.

A válaszokat előre is köszönöm.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Egy éve futottam bele ebbe a problémában, sajnos nem találom konkrétan a megoldást amit sikerült összerakni, de ha jól emlékszem, interfész név alapján UUID-t meg lehet határozni, az alapján meg ki lehetett szedni a kapcsolatot.

szerk.: bocs, hülyeség amit írtam, az más probléma volt.

De a státusz lekérdezés eredménye semmilyen utalást nem tesz eszközre vagy kapcsolatra.

$ nmcli -f all  general status
RUNNING  VERSION   STATE      STARTUP  CONNECTIVITY  NETWORKING  WIFI-HW   WIFI      WWAN-HW  WWAN     
running  0.9.10.0  connected  started  full          enabled     disabled  disabled  enabled  disabled 

Ezért nem tudom sehogyan sem a "STATE = connected" értéket összepárosítani egy kapcsolattal vagy eszközzel.

Én viszont sajnos nem tudom megállapítani az eszközlistából vagy a kapcsolatlistából, hogy melyik valós (külső) hálózati kapcsolat és melyik csak egy helyi virtuális kapcsolat. Az eszközök és kapcsolatok neve bármi lehet ezért nem lehet arra építeni, hogy eth0 a hálózati eszköz neve.

Kellene az a kapcsolat, amelyiken az internetet éred-el pl.? Vagy általánosan kellenének azok, amiken keresztül érhetsz el internetet?

A következőket szeretném (nmcli-vel vagy más módon)

- Megállapítani, hogy van-e olyan hálózati kapcsolat ami nem helyi virtuális.
- Ha van kapcsolat akkor szükség lenne a hálózati eszköz részletes adataira (pl. kapcsolat sebessége, wifi/gsm térerő, stb.) és a hálózati kapcsolat részletes adataira (ip, átjáró, stb.)

Köszi az infókat, remélem összejön, közben én is gondolkodom rajta. Pusztán nmcli-vel viszont nem biztos, hogy menni fog, mármint elképzelhető, hogy ezeket az infókat nem lehet kinyerni belőle.

sysfs es proc?
Persze neked kell megirni a scripttet, de minden ott van.

Rendben, de hogyan lehet egyértelműen eldönteni (nem tudom, hogy az nmcli hogyan csinálja), hogy van-e olyan kapcsolat és ha van akkor melyik az ami nem virtuális?

tree /sys/class/net
/sys/class/net
├── docker0 -> ../../devices/virtual/net/docker0
├── eth0 -> ../../devices/pci0000:00/0000:00:1c.0/0000:01:00.0/net/eth0
├── lo -> ../../devices/virtual/net/lo
├── virbr0 -> ../../devices/virtual/net/virbr0
├── virbr0-nic -> ../../devices/virtual/net/virbr0-nic
└── wlan0 -> ../../devices/pci0000:00/0000:00:1c.3/0000:02:00.0/net/wlan0

ha van mogotte pci bus, akkor az valodi, ha meg ott a virtual akkor az nem valodi

Nagyon gagyi megvalositassal :D

ls -l /sys/class/net | awk '{ if( /virtual/ ) { print "virtual -- "$9 } else { print "real -- "$9 }; system("ip addr show "$9" |grep -Po \"inet \\K[\\d.]+\" "); print "\n" }'

BTW én úgy értelmeztem a posztolót, hogy neki az a virtuális amin nem az internet jön. :)

Köszönöm az infót.

nmcli d show `ip -o r get 1.1.1.1 | awk '{ print $3 }'`

Nekem nem működik.

$ nmcli d show `ip -o r get 1.1.1.1 | awk '{ print $3 }'`
Error: Device '192.168.1.1' not found.

szerk:

$ ip r
default via 192.168.1.1 dev eth0  proto static  metric 1024 
172.16.200.0/24 dev vmnet8  proto kernel  scope link  src 172.16.200.1 
192.168.1.0/24 dev eth0  proto kernel  scope link  src 192.168.1.101 
192.168.68.0/24 dev vmnet1  proto kernel  scope link  src 192.168.68.1 

Ezt tüzetesebben is megnézem.

Az IP-t ha átírod vagy valamelyik interfészére vagy az átjáróéra, akkor fog, viszont ez is csak kiírja hogy kapcsolódva

De pont az a problémám, hogy nem tudok ip címet, eszköz nevet vagy bármit ami alapján én el tudnám dönteni, hogy az adott hálózati kapcsolat / interfész helyi vagy sem.

Az "ip r" esetén kapok egy plusz információt ami talán segíthet:

default via 192.168.1.1 dev eth0 proto static metric 1024

Bocs, ez talán robusztusabb:

route | grep ^default | grep -o '[^ ]*$'

Tehát akkor a route tábla alapján tudom egyértelműen eldönteni, hogy az adott hálózati eszköz fizikai eszköz és nem virtuális?

Azt tudod meg, hogy az internetre menő forgalom melyk interfészen megy ki. Egy "vmnet1" vagy "lo" interfészt ez nem ad vissza.

Viszont semmi garancia arra, hogy fizikai interfészt kapsz vissza. A default route ugyanis lehet vpn, bridge vagy bonding device, satöbbi. Ekkor egy újabb kör annak megállapítsa, hogy ezek alatt melyk fizikai interfészen megy a forgalom, amire nyilván nincs univerzális megoldás.

Csak a route és társai elég régóta deprecated motyók - tessen az ip parancsot használni :-P

nmtui -t ismered?

Igen, de nem értem hogy segít a probléma megoldásában.

-