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

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ások

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.

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.)

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

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.

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

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.