You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

200 lines
7.7 KiB

4 years ago
VDEv2: Virtual Distributed Ethernet.
5 years ago
4 years ago
(c) 2003/2004/2005/2006 Renzo Davoli
Long long time ago based on uml-router Copyright 2002 Yon Uriarte and Jeff Dike
5 years ago
qemu-vde-HOWTO is (c) by Jim Brown
4 years ago
Notice: Virtual Distributed Ethernet is not related in any way with
www.vde.com ("Verband der Elektrotechnik, Elektronik und Informationstechnik"
i.e. the German "Association for Electrical, Electronic & Information
Technologies").
5 years ago
Components of the VDE architecture:
- VDE switches: virtual counterpart of ethernet switches.
- VDE cables: virtual counterpart of a crossed-cable used to connect two switches.
4 years ago
- VDE 2 includes:
- switch management both from console and from a "unix socket terminal"
- VLAN 801.1q *almost* compatible
- FSTP (fast spanning tree) already incomplete and currently not tested for 802.1d/w/s
compatibility. under development. (vde_switch must be compiled with the FSTP flag on)
5 years ago
Using VDE:
4 years ago
- All units connected to the VDE see each other as they were on a real ethernet.
- A real Linux box can be connected to the VDE using a tap interface (TUNTAP)
(packets can be further routed using standard linux methods).
- It is possible to join two VDE switches -- also running on different
real conputers -- using virtual VDE cables
- UML (user-mode-linux) virtual machines can be connected to the VDE
- MPS (MIPS emulated machines (c) Morsiani/Davoli) can be connected
to the virtual VDE.
5 years ago
Examples of VDE uses:
4 years ago
- With VDE it is possible to create a virtual network of UML machines running
on several real computer
5 years ago
- VDE can be used to create tunnels (even crossing masquerated networks)
4 years ago
- VDE can provide mobility support. Changing a VDE cable with another does not
affect the communications in place. The new VDE cable can use a completely
different path on the real net. VDE supports also multiple concurrent VDE cables
between a pair of VDE-switches during the hand-off. This eliminates when possible
hich-ups of communications due to hand-offs.
5 years ago
4 years ago
HOWTO and basic command syntax (for a complete explanation RTM):
5 years ago
vde-switch [ -unix control-socket ] [ -tap tuntap-device ] [ -hub ] [-daemon]
4 years ago
This command creates a VDE switch.
5 years ago
-unix control-socket
4 years ago
The control socket is the socket used for local processes to create a new
connection. The default value is /tmp/vde.ctl.
User-mode-linux default value is /tmp/uml.ctl, so if you want to use vde
with UML you can: (1) use "-unix /tmp/uml.ctl" for vde-switch (2) use
"eth0=daemon,,/tmp/vde.ctl" for UML
5 years ago
-tap tuntap-device
4 years ago
the vde-switch is connected to the specified tap interface.
Ususally it is reserved for root as /dev/net/tun is not writable.
(It is dangerous to have /dev/net/tun writable by ordinary users).
5 years ago
-hub
4 years ago
the vde-switch works as a hub (all packets are broadcast on all interfaces.
5 years ago
-daemon
4 years ago
the switch works as a daemon: it runs in background, it uses syslog
for error management.
vde-plug [-p port] [socketname]
A vde-cable is composed by two vde-plug and a "cable". A vde-plug connects its
standard input and output to a switch.
socketname is the control-socket of the switch the plug must be connected to
(default value /tmp/vde.ctl).
-p port. To use a specific port of the switch. The first available port is
assaigned when not specified. It is possibl eto connect several cables to the
same prot: Cables connected to the same port represent several path
for the same destination.
5 years ago
dpipe cmd1 [arg1] = cmd2 [arg2]
4 years ago
it is the double pipe command (it is here just becouse it is not provided by
shells).
cmd1 and cmd2 are executed, the stdout of cmd1 if pipe connected to the stdin of
cmd2 and viceversa. (the symbol = is intended as a pair of communication pipes
between the two processes.
5 years ago
HOW TO:
- (1) SETUP A DAEMON:
(as root)
4 years ago
# vde_switch -tap tap0 -mod 777 -daemon
5 years ago
# ifconfig tap0 192.168.0.254
4 years ago
if you want to have routing to the Internet you can use standard routing
commands on the host machine e.g.:
5 years ago
# echo "1" > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
for ipv6
4 years ago
# echo "1" > /proc/sys/net/ipv6/conf/eth0/forwarding
5 years ago
# radvd
radvd must be configured to broadcast the correct prefix for the tap0 subnet
4 years ago
5 years ago
----- example of /etc/radvd.conf file
interface tap0
{
4 years ago
AdvSendAdvert on;
MaxRtrAdvInterval 120;
5 years ago
#put here your prefix.
4 years ago
prefix 1111:2222:3333:4444::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};
5 years ago
};
------ end of example
- (2) SETUP A SECOND DAEMON
(no need for root access)
% vde_switch /tmp/my.ctl
(add - daemon if you want to run it in background)
- (3) CONNECT TWO LOCAL SWITCHES TOGETHER
% dpipe vde_plug = vde_plug /tmp/my.ctl
(or
4 years ago
% dpipe vde_plug /tmp/my.ctl = vde_plug
5 years ago
)
4 years ago
connects the vde_switch with ctl socket /tmp/vde.ctl with the other using
/tmp/my.ctl.
5 years ago
- (3) CONNECT TWO REMOTE SWITCHES TOGETHER
4 years ago
You need a tool to interconnect stdin stdout of two remote processes.
e.g.
5 years ago
% dpipe vde_plug /tmp/my.ctl = ssh remote_machine vde_plug
4 years ago
connects the vde_switch with ctl socket /tmp/vde.ctl on the remote_machine
with the local switch using /tmp/my.ctl.
5 years ago
4 years ago
It is possible to use other tools in place of ssh like netcat.
In this latter case the communication is not secure.
5 years ago
- (4) CREATION OF TUNNELS.
(it needs kernel support for policy routing)
4 years ago
Setup two daemon as described in (1).
In this example 192.168.0.1 is the tap0 address on the server side.
5 years ago
Route the traffic to the Internet on the tunnel server side.
On the tunnel client side:
4 years ago
- in the example 100.200.201.202 is the IP address on eth0
and 100.200.201.254 is the default gateway.
- create a specific rule for the eth0 routing
ip rule add from 100.200.201.202 table eth0-table
(please note that eth0-table must be listed in /etc/iproute2/rt_tables)
ip route del default via 100.200.201.254
ip route add default via 100.200.201.254 table eth0-table
the previous default route will be the def. route just for the
packets originated with the eth0 inteface address.
- connect the two vde-switch together:
dpipe vde-plug = ssh -b 100.200.201.202 server-machine vde-plug
- setup an appropriate IP address for tap0 interface (or get it by dhcp
if set up on server side). (e.g. 192.168.0.10)
- use tap0 as the default interface:
ip route add default via 192.168.0.1
5 years ago
- (5) SUPPORT FOR MOBILITY
Create a tunnel like in 4 using a group number on the vde-cable:
4 years ago
dpipe vde-plug -g 1 = ssh -b 100.200.201.202 server-machine vde-plug -g 1
5 years ago
Create a second tunnel (say on ppp0 addr. 100.100.101.102 gateway 100.100.101.254)
4 years ago
# ip rule add from 100.100.101.102 table ppp0-table
# ip route add default via 100.100.101.254 table ppp0-table
5 years ago
Connect the a second cable using the same group number:
4 years ago
# dpipe vde-plug -g 1 = ssh -b 100.100.101.102 server-machine vde-plug -g 1
5 years ago
Disconnect the first cable (kill the processes of the first cable)
4 years ago
All the traffic get rerouted on the new vde-cable (thus to another path
on the rel network. Connections in place are unaffected by the change.
Several cables of the same group can be in place during the handoff phase
but note that this ends up in duplicated packets that can slow down
the communication.
5 years ago
4 years ago
Please note also that the vde-switches do not manage (yet) the minimum spanning
tree protocol thus a loop in the topology can lead to inconsistent MAC forward
tables and to network saturation.
5 years ago
4 years ago
Copyright 2003/2004/2005/2006/2011 Renzo Davoli
This product includes software developed by Danny Gasparovski and Fabrice
Ballard (slirp support).
5 years ago
Acknowlegments:
4 years ago
Thanks to Marco Giordani, Leonardo Macchia for their useful help for debugging.
Imported code by Danny Gasparovsky, Fabrice Ballard.
Thanks to Giuseppe Della Bianca <bepi@adria.it> for many bug reports, and
patch proposals.
Thanks to Daniel P. Barrange <berrange at redhat dot com> for several patches
and the management of group ownership.
Code organization, bugfixes, autotool support Mattia Belletti.
5 years ago