|  | .. _Network_Emulation: | 
|  |  | 
|  | Network emulation | 
|  | ----------------- | 
|  |  | 
|  | QEMU can simulate several network cards (e.g. PCI or ISA cards on the PC | 
|  | target) and can connect them to a network backend on the host or an | 
|  | emulated hub. The various host network backends can either be used to | 
|  | connect the NIC of the guest to a real network (e.g. by using a TAP | 
|  | devices or the non-privileged user mode network stack), or to other | 
|  | guest instances running in another QEMU process (e.g. by using the | 
|  | socket host network backend). | 
|  |  | 
|  | Using TAP network interfaces | 
|  | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 
|  |  | 
|  | This is the standard way to connect QEMU to a real network. QEMU adds a | 
|  | virtual network device on your host (called ``tapN``), and you can then | 
|  | configure it as if it was a real ethernet card. | 
|  |  | 
|  | Linux host | 
|  | ^^^^^^^^^^ | 
|  |  | 
|  | As an example, you can download the ``linux-test-xxx.tar.gz`` archive | 
|  | and copy the script ``qemu-ifup`` in ``/etc`` and configure properly | 
|  | ``sudo`` so that the command ``ifconfig`` contained in ``qemu-ifup`` can | 
|  | be executed as root. You must verify that your host kernel supports the | 
|  | TAP network interfaces: the device ``/dev/net/tun`` must be present. | 
|  |  | 
|  | See :ref:`sec_005finvocation` to have examples of command | 
|  | lines using the TAP network interfaces. | 
|  |  | 
|  | Windows host | 
|  | ^^^^^^^^^^^^ | 
|  |  | 
|  | There is a virtual ethernet driver for Windows 2000/XP systems, called | 
|  | TAP-Win32. But it is not included in standard QEMU for Windows, so you | 
|  | will need to get it separately. It is part of OpenVPN package, so | 
|  | download OpenVPN from : https://openvpn.net/. | 
|  |  | 
|  | Using the user mode network stack | 
|  | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 
|  |  | 
|  | By using the option ``-net user`` (default configuration if no ``-net`` | 
|  | option is specified), QEMU uses a completely user mode network stack | 
|  | (you don't need root privilege to use the virtual network). The virtual | 
|  | network configuration is the following:: | 
|  |  | 
|  | guest (10.0.2.15)  <------>  Firewall/DHCP server <-----> Internet | 
|  | |          (10.0.2.2) | 
|  | | | 
|  | ---->  DNS server (10.0.2.3) | 
|  | | | 
|  | ---->  SMB server (10.0.2.4) | 
|  |  | 
|  | The QEMU VM behaves as if it was behind a firewall which blocks all | 
|  | incoming connections. You can use a DHCP client to automatically | 
|  | configure the network in the QEMU VM. The DHCP server assign addresses | 
|  | to the hosts starting from 10.0.2.15. | 
|  |  | 
|  | In order to check that the user mode network is working, you can ping | 
|  | the address 10.0.2.2 and verify that you got an address in the range | 
|  | 10.0.2.x from the QEMU virtual DHCP server. | 
|  |  | 
|  | Note that ICMP traffic in general does not work with user mode | 
|  | networking. ``ping``, aka. ICMP echo, to the local router (10.0.2.2) | 
|  | shall work, however. If you're using QEMU on Linux >= 3.0, it can use | 
|  | unprivileged ICMP ping sockets to allow ``ping`` to the Internet. The | 
|  | host admin has to set the ping_group_range in order to grant access to | 
|  | those sockets. To allow ping for GID 100 (usually users group):: | 
|  |  | 
|  | echo 100 100 > /proc/sys/net/ipv4/ping_group_range | 
|  |  | 
|  | When using the built-in TFTP server, the router is also the TFTP server. | 
|  |  | 
|  | When using the ``'-netdev user,hostfwd=...'`` option, TCP or UDP | 
|  | connections can be redirected from the host to the guest. It allows for | 
|  | example to redirect X11, telnet or SSH connections. | 
|  |  | 
|  | Hubs | 
|  | ~~~~ | 
|  |  | 
|  | QEMU can simulate several hubs. A hub can be thought of as a virtual | 
|  | connection between several network devices. These devices can be for | 
|  | example QEMU virtual ethernet cards or virtual Host ethernet devices | 
|  | (TAP devices). You can connect guest NICs or host network backends to | 
|  | such a hub using the ``-netdev | 
|  | hubport`` or ``-nic hubport`` options. The legacy ``-net`` option also | 
|  | connects the given device to the emulated hub with ID 0 (i.e. the | 
|  | default hub) unless you specify a netdev with ``-net nic,netdev=xxx`` | 
|  | here. | 
|  |  | 
|  | Connecting emulated networks between QEMU instances | 
|  | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 
|  |  | 
|  | Using the ``-netdev socket`` (or ``-nic socket`` or ``-net socket``) | 
|  | option, it is possible to create emulated networks that span several | 
|  | QEMU instances. See the description of the ``-netdev socket`` option in | 
|  | :ref:`sec_005finvocation` to have a basic | 
|  | example. |