Виртуальная машина KVM может получать доступ к сети интернет с помощью технологии NAT. В этом случае, доступ к виртуальной машине из интернет, например, доступ к web-серверу можно реализовать с помощью настройки iptables.

Виртуальный сетевой интерфейс виртуальной машины настроен по умолчанию в режим NAT (Network Address Translation). NAT настроен с помощью Iptables с использованием IP маскировки.

Виртуальный сетевой интерфейс KVM

В режиме NAT на хост системе KVM создается виртуальный сетевой коммутатор с DNS и DHCP сервером (dnsmasq), а сетевой интерфейс виртуальной машины получает настройки автоматически. Dnsmasq и NAT автоматически конфигурируется и запускается Libvirt.

Настройки сетевых интерфейсов KVM хоста:

ifconfig

eth1      Link encap:Ethernet  HWaddr 60:a4:4c:38:d1:0a  
          inet addr:87.245.185.150  Bcast:87.245.185.151  Mask:255.255.255.248
          inet6 addr: fe80::62a4:4cff:fe38:d10a/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7960443 errors:0 dropped:13584 overruns:0 frame:0
          TX packets:9254976 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2389039348 (2.3 GB)  TX bytes:8098112598 (8.0 GB)

virbr0    Link encap:Ethernet  HWaddr fe:54:00:49:1f:df  
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8275 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11635 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:518853 (518.8 KB)  TX bytes:15236987 (15.2 MB)

Настройки сетевого интерфейса виртуальной машины KVM:

ifconfig

eth1      Link encap:Ethernet  HWaddr 52:54:00:49:1F:DF  
          inet addr:192.168.122.178  Bcast:192.168.122.255  Mask:255.255.255.0
          inet6 addr: fe80::5054:ff:fe49:1fdf/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:25442 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3366 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5788869 (5.5 MiB)  TX bytes:267004 (260.7 KiB)

Из выше приведенных листингов мы видим что сетевой интерфейс хоста eth1 подключен к сети интернет с выделенным IP 87.245.185.150. В хост системе создан виртуальный коммутатор virbr0 с IP адресом в виртуальной сети 192.168.122.1. Виртуальный сетевой интерфейс виртуальной машины подключен в виртуальную сеть и получил IP адрес 192.168.122.178.

На виртуальной машине установлен web-сервер и нам необходимо получить к нему доступ из сети интернет по протоколу http (порт 80).

Поставленная задача решается двумя командами, выполненными в терминале хоста:

sudo iptables -t nat -A PREROUTING --dst 87.245.185.150 -p tcp --dport 80 -j DNAT --to-destination 192.168.122.178
sudo iptables -I FORWARD 1 -i eth1 -o virbr0 -d 192.168.122.178 -p tcp -m tcp --dport 80 -j ACCEPT

Теперь виртуальный web-сервер доступен из сети интернет по адресу http://87.245.185.150