123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- .. _pcsys_005fnetwork:
- 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.
|