# user mode linux networking [risolto] con uml_switch

## Peach

RISOLTO: ho usato uml_switch come spiegato verso la metà di questo thread e lanciato uml con eth0=daemon

Se usate questa soluzione NON serve impazzire con il bridging e avrete una macchina in rete in 3 secondi  :Wink:  .

 :Smile:  grazie a tutti

--

Ciao gente.. sto sbattendo la testa contro UML da un paio di giorni, senza successo di farlo entrare in rete.

ho seguito 3 guide diverse ma le mie scarse nozioni del cosmo non mi permettono di capire dove sbaglio.

al momento sto cercando di farlo funzionare con il bridge e tun/tap come suggerito sul sito di usermode:

Premessa: l'host ha una scheda ethernet eth1 in dhcp con ip 192.168.123.x netmask 255.255.255.0 broadcast 192.168.123.255

```
HOST # tunctl -d tap0 -u peach

Set 'tap0' nonpersistent

HOST # brctl addbr br0

HOST # ifconfig eth1 0.0.0.0 promisc up

HOST # ifconfig tap0 0.0.0.0 promisc up

HOST # dhcpcd br0

HOST # brctl stp br0 off

HOST # brctl setfd br0 1

HOST # brctl addif br0 eth1

HOST # brctl addif br0 tap0

HOST # brctl show

bridge name     bridge id               STP enabled     interfaces

br0             8000.00014a18bce8       no              eth1

                                                        tap0

```

se do un ifconfig sull'host ho questo risultato:

```
HOST # ifconfig 

br0       Link encap:Ethernet  HWaddr 00:01:4A:18:BC:E8  

          inet addr:192.168.123.190  Bcast:192.168.123.255  Mask:255.255.255.0

          inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:2 errors:0 dropped:0 overruns:0 frame:0

          TX packets:15 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0 

          RX bytes:86 (86.0 b)  TX bytes:3158 (3.0 Kb)

eth1      Link encap:Ethernet  HWaddr 00:01:4A:18:BC:E8  

          inet6 addr: fe80::201:4aff:fe18:bce8/64 Scope:Link

          UP BROADCAST NOTRAILERS RUNNING PROMISC MULTICAST  MTU:1500  Metric:1

          RX packets:4021 errors:0 dropped:0 overruns:0 frame:0

          TX packets:4340 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:2627639 (2.5 Mb)  TX bytes:550364 (537.4 Kb)

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:16436  Metric:1

          RX packets:168 errors:0 dropped:0 overruns:0 frame:0

          TX packets:168 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0 

          RX bytes:84660 (82.6 Kb)  TX bytes:84660 (82.6 Kb)

tap0      Link encap:Ethernet  HWaddr 6A:7F:C6:B7:65:13  

          inet6 addr: fe80::687f:c6ff:feb7:6513/64 Scope:Link

          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:6 overruns:0 carrier:0

          collisions:0 txqueuelen:500 

          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
```

e come routing:

```
HOST # route -n

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

192.168.123.0   0.0.0.0         255.255.255.0   U     0      0        0 br0

127.0.0.0       0.0.0.0         255.0.0.0       U     0      0        0 lo

0.0.0.0         192.168.123.254 0.0.0.0         UG    0      0        0 br0
```

a questo punto lancio UML con questo comando dall'utente peach:

```
$ cd /uml/systems/joomblatree/; linux ubd0=root_fs ubd1=swap_fs umid=joomblatree mem=128MB eth0=tuntap,tap0
```

al boot ho questo output:

```
Netdevice 0 : TUN/TAP backend - 
```

e se provo a tirare su eth0 nella macchina uml ho:

```
joomblatree ~ # ifconfig eth0 192.168.123.123 netmask 255.255.255.0 up 

SIOCSIFFLAGS: Operation not permitted

SIOCSIFFLAGS: Operation not permitted
```

 faccio presente che ho cambiato i permessi di tun sulla macchina HOST in modo che tutti possano accedervi....

```
HOST # ls -l /dev/net/tun 

crw-rw-rw-  1 root root 10, 200 12 nov 09:58 /dev/net/tun
```

questo è il problema minore se pensate ci sia un problema di sicurezza, quindi se nn è un errore di per se, preferirei lasciare così com'è

tenete inoltre presente che sia HOST che joomblatree (UML guest) sono macchine gentoo fully functional (a parte che UML nn ha accesso alla rete e quindi è una gentoo senza uscita  :Razz:  )

help me!

----------

## makoomba

premesso che non ho mai usato UML, faccio una semplice considerazione.

se eth1 e tap0 fanno parte di un bridge, devi assegnare un unico indirizzo ip al bridge e non ai singoli devices.

per l'host, tutto ok, ma nel sistema UML cerchi di assegnare a eth0 (tap0) un indirizzo diverso.

prova con 192.168.123.190

----------

## Peach

```
joomblatree ~ # ifconfig eth0 192.168.123.190 netmask 255.255.255.0 up

SIOCSIFFLAGS: Operation not permitted

SIOCSIFFLAGS: Operation not permitted
```

 :Sad: 

insomma qualsiasi operazione per tirare su eth0 nn va a buon fine riportando quell'errore.

----------

## makoomba

se dai un ifconfig -a nell'UML che viene fuori ?

----------

## Peach

 *makoomba wrote:*   

> se dai un ifconfig -a nell'UML che viene fuori ?

 

```
joomblatree ~ # ifconfig -a

eth0      Link encap:Ethernet  HWaddr FE:FD:C0:A8:7B:BE  

          inet addr:192.168.123.190  Bcast:192.168.123.255  Mask:255.255.255.0

          BROADCAST PROMISC 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)

          Interrupt:5 

lo        Link encap:Local Loopback  

          inet addr:127.0.0.1  Mask:255.0.0.0

          UP LOOPBACK RUNNING  MTU:16436  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:0 

          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
```

----------

## neryo

 *Peach wrote:*   

> 
> 
> insomma qualsiasi operazione per tirare su eth0 nn va a buon fine riportando quell'errore.

 

ti da l'errore ma l eth0 e' up comunque... no?

----------

## makoomba

ifconfig eth0 up

----------

## Peach

 *makoomba wrote:*   

> ifconfig eth0 up

 

si ma l'errore persiste e qualsiasi tentativo di ping esterno mi da errore

```
joomblatree ~ # ping -c 3 192.168.123.254

connect: Network is unreachable
```

qualsiasi sia l'ip sia che gli pingo sia con cui lo configuri...

ho anche aggiunto questo comando all'host:

```
HOST # # uml_switch -tap tap0

uml_switch attached to unix socket '/tmp/uml.ctl' tap device 'tap0'

New connection

 Addr: 00:c0:49:e1:b6:9f New port 5
```

ma non domandatemi a cosa possa servire visto che nn mi è cambiato niente... dovrebbe soltanto fornire un indirizzo mac a joomblatree (guest UML) per dargli la possibilità di querare il dns server e farsi fornire un ip... ma nn mi pare proprio... continua a sfuggirmi qualcosa  :Sad: 

[edit] dimenticavo di dire che aggiungendo l'uml_switch ora l'errore è:

```
joomblatree ~ # ifconfig eth0 up  

SIOCSIFFLAGS: Device or resource busy
```

----------

## makoomba

scusa, ma non capisco.

se hai scelto la modalità bridge, host e guest devono necessariamente avere lo stesso indirizzo (br0), quindi il guest non ha bisogno di richiederne uno tramite dhcp.

su joomblatree, dai 

```
ifconfig eth0 up

ifconfig -a

route -n

```

----------

## Peach

 *makoomba wrote:*   

> scusa, ma non capisco.
> 
> se hai scelto la modalità bridge, host e guest devono necessariamente avere lo stesso indirizzo (br0), quindi il guest non ha bisogno di richiederne uno tramite dhcp.
> 
> su joomblatree, dai 
> ...

 

secondo te ho fatto una idiozia facendo così?

```
joomblatree ~ # ifconfig eth0 0.0.0.0 promisc up

SIOCSIFFLAGS: Device or resource busy

SIOCSIFFLAGS: Device or resource busy

joomblatree ~ # ifconfig -a

eth0      Link encap:Ethernet  HWaddr FE:FD:C0:A8:7B:BE  

          BROADCAST NOTRAILERS PROMISC 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)

          Interrupt:5 

lo        Link encap:Local Loopback  

          inet addr:127.0.0.1  Mask:255.0.0.0

          UP LOOPBACK RUNNING  MTU:16436  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:0 

          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

joomblatree ~ # route -n

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

127.0.0.0       127.0.0.1       255.0.0.0       UG    0      0        0 lo
```

a questo punto dovrei essere in grado di pingare?

----------

## gutter

 *Peach wrote:*   

> 
> 
> a questo punto dovrei essere in grado di pingare?

 

Non credo, dal momento che non hai una subnet raggiungibile   :Confused:  Hai solo messo l'interfaccia in modalità promiscua ma non credo tu abbia risolto il tuo problema.

----------

## makoomba

 :Shocked:  hai fatto un pò di casino, ora eth0 non ha più l'indirizzo ip.

ripristina la situazione che avevi al primo post e poi ridai i comandi

----------

## Peach

 *makoomba wrote:*   

>  hai fatto un pò di casino, ora eth0 non ha più l'indirizzo ip.
> 
> ripristina la situazione che avevi al primo post e poi ridai i comandi

 

scusa nn avevo capito cosa volevi ottenere chiedendomi di dare eth0 up e basta, quindi gli ho solo tolto l'ip visto che un eth0 down nn cambia lo stato dell'interfaccia di rete.

Ora ho:

```
joomblatree # ifconfig eth0 192.168.123.190 netmask 255.255.255.0 up

SIOCSIFFLAGS: Device or resource busy

SIOCSIFFLAGS: Device or resource busy

joomblatree ~ # ifconfig -a

eth0      Link encap:Ethernet  HWaddr FE:FD:C0:A8:7B:BE  

          inet addr:192.168.123.190  Bcast:192.168.123.255  Mask:255.255.255.0

          BROADCAST NOTRAILERS PROMISC 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)

          Interrupt:5 

lo        Link encap:Local Loopback  

          inet addr:127.0.0.1  Mask:255.0.0.0

          UP LOOPBACK RUNNING  MTU:16436  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:0 

          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

joomblatree ~ # route -n

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

127.0.0.0       127.0.0.1       255.0.0.0       UG    0      0        0 lo
```

va bene ora? (teoricamente parlando?)

PS: ripeto che nn sono molto afferrato nei dettagli del networking  :Sad: 

----------

## Benve

Ciao, io usavo uml all'università, attraverso vde (emerge vde).

Questi sono gli script con cui lo facevo partire:

```
 cat UML.tappo 

#! /bin/bash

PATH=$PATH:/home/students/COURSES/labso/UML

cd /home/students/COURSES/labso/UML

vde_switch -daemon -unix /tmp/benvenut.vde

dpipe ssh benvenut@tappo.students vde_plug = vde_plug /tmp/benvenut.vde

```

per creare /tmp/benvenut.vde a cui attaccavo la macchina uml

```
cat UML.start 

#! /bin/bash

PATH=$PATH:/home/students/COURSES/labso/UML

linux+ con1=null ubd0=/public/benvenut/lso04al02/lso04al02.cow,/home/students/COURSES/labso/UML/Debian-3.0r0.sarge.ext2 eth0=daemon,,,/tmp/benvenut.vde
```

con l'opzione eth0=daemon,,,/tmp/benvenut.vde mi attaccavo al socket creato prima.

Tutto questo funzionava perchè sulla macchina tappo.students c'era un socket che permetteva di avere un ip con dhcp e di raggiungere l'esterno.

Il tutto in locale dovrebbe funzionare così:

creo il socket /tmp/vde.ctl e lo associo a tap0

```
# modprobe tun

# vde_switch -tap tap0

vde_switch: attached to unix socket '/tmp/vde.ctl'

dev="tap0", ifr.ifr_name="tap0"

```

Vanno dati tutti i permessi a /tmp/vde.ctl altrimenti gli utenti non ci possono scrivere.

Poi va configurato tap0 con un ip e per fare da nat.

Infine si dovrebbe lanciare la macchina con:

```
linux ubd0=linux.immagine eth0=daemon,,,/tmp/vde.ctl
```

dovrebbe bastare assegnare l'ip e il gw giusto a eth0

Non ho mai provato in locale con vde ma a rigor di logica dovrebbe andare

----------

## makoomba

su UML

```
route add -net 192.168.123.0/24 dev eth0
```

edit:

prima dai solo

```
ifconfig eth0 up
```

senza indirizzo

----------

## Peach

 *makoomba wrote:*   

> su UML
> 
> ```
> route add -net 192.168.123.0/24 dev eth0
> ```
> ...

 

benve con quel suo vde mi ha dato un suggerimento notevole.

evidentemente vde è la stessa cosa di uml_switch

ed è di una banalità incredibile!

senti qui:

```
HOST # uml_switch -tap tap0

uml_switch attached to unix socket '/tmp/uml.ctl' tap device

New connection

HOST # chmod a+x /tmp/uml.ctl

HOST # ls -l /tmp/uml.ctl

srwxrwxrwx  1 root root 0 12 nov 11:19 /tmp/uml.ctl
```

Questo chiaramente tenendo presente i passi iniziali per fare il bridge e via dicendo... 

poi da utente:

```
$ cd /uml/systems/joomblatree/; linux ubd0=root_fs ubd1=swap_fs umid=joomblatree mem=128MB eth0=daemon
```

al che al boot presenta questa scritta:

```
Netdevice 0 : daemon backend (uml_switch version 3) - unix:/tmp/uml.ctl
```

poi una volta loggati sulla macchina se avete un server dhcp nella rete, come me in questo caso:

```
joomblatree ~ # dhcpcd eth0
```

e per verificare:

```
joomblatree ~ # ifconfig 

eth0      Link encap:Ethernet  HWaddr FE:FD:00:00:00:00  

          inet addr:192.168.123.100  Bcast:192.168.123.255  Mask:255.255.255.0

          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:3 errors:0 dropped:0 overruns:0 frame:0

          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000 

          RX bytes:716 (716.0 b)  TX bytes:1240 (1.2 Kb)

          Interrupt:5 

lo        Link encap:Local Loopback  

          inet addr:127.0.0.1  Mask:255.0.0.0

          UP LOOPBACK RUNNING  MTU:16436  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:0 

          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

joomblatree ~ # route -n 

Kernel IP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

192.168.123.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0

127.0.0.0       127.0.0.1       255.0.0.0       UG    0      0        0 lo

0.0.0.0         192.168.123.254 0.0.0.0         UG    0      0        0 eth0

joomblatree ~ # ping -c 3 maya.ngi.it

PING maya.ngi.it (194.185.88.3) 56(84) bytes of data.

64 bytes from ns2.ngi.it (194.185.88.3): icmp_seq=1 ttl=50 time=15.3 ms

64 bytes from ns2.ngi.it (194.185.88.3): icmp_seq=2 ttl=50 time=16.7 ms

64 bytes from ns2.ngi.it (194.185.88.3): icmp_seq=3 ttl=50 time=15.8 ms

--- maya.ngi.it ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2028ms

rtt min/avg/max/mdev = 15.375/15.988/16.764/0.596 ms
```

:YEAH!:

ci manca questo emoticon  :Razz: 

grazie a tutti per lo sbatti  :Wink: 

EDIT NON OCCORRE USARE IL BRIDGE se si usa uml_switch!!!

----------

## z0tik0

ciao, non ho i miei UML sotto mano ma ho un idea .... al posto di usare 

```
dhcpcd br0
```

prova con un indirizzo statico

```
ifconfig br0 192.168.123.190 netmask 255.255.255.0 up
```

in seguito nell'UML l'indirizzo ip deve essere differente (a quanto ricordo), tipo 192.168.123.191 affinché funzioni, ma un 

```
ifconfig eth0 up
```

dovrebbe bastare

spero ti possa aiutare, ciauz

**EDIT** 

too late!

----------

## makoomba

@Peach

hai fatto un mix di configurazioni diverse

IMHO, se usi uml_switch, il bridge è inutile.

----------

## Peach

 *makoomba wrote:*   

> @Peach
> 
> hai fatto un mix di configurazioni diverse
> 
> IMHO, se usi uml_switch, il bridge è inutile.

 

hai ragione... facendo movimenti di rete in uml, sul bridge nn ci sono pacchetti in viaggio... 

quindi resta un mistero questo bridge del cavolo. sono stra-convinto che nn ci fosse collegamento tra tun0 e eth0 dentro uml.

vabé tanto meglio, uno sbattimento in meno

[edit] resta da vedere quali i pro e i con nell'usare uml_switch al post del bridging, considerando questioni di sicurezza (possibilià di cambiare indirizzo ip nell'uml e questioni di numero di macchine uml concorrenti, benve infatti mi faceva notare che con troppe macchine uml vde crollava come niente... almeno mi pare di avere capito così

----------

## makoomba

non è mistero, sono due modi diversi di configurare la rete.

se usi il bridge, hai un solo indirizzo comune ad host e guest mentre con uml_switch, hai indirizzi diversi.

nel primo caso, avevi due problemi: interfaccia down e nessuna route per eth0.

credo che avresti risolto con

```
ifconfig eth0 up

route add -net 192.168.123.0/24 dev eth0

route add default gw $GW

```

in ogni caso, visto che uml_switch ti soddisfa, penso tu possa rimuovere tranquillamente tutta la sezione sul bridge.

----------

## Peach

 *makoomba wrote:*   

> non è mistero, sono due modi diversi di configurare la rete.
> 
> se usi il bridge, hai un solo indirizzo comune ad host e guest mentre con uml_switch, hai indirizzi diversi.
> 
> nel primo caso, avevi due problemi: interfaccia down e nessuna route per eth0.
> ...

 

si mi riferivo a quei due errori che avevo ad ogni tentativo di ifconfig su eth0.

si, chiaramente preferisco questa soluzione visto che la mia intenzione era avere un'altra macchina in rete, forse il bridging è comodo se si vuole creare una rete uml interna.

cmq davvero grazie per l'aiuto makoomba

----------

