Назад | Перейти на главную страницу

Как включить доступ в Интернет с разрешением адресов для виртуальной машины libvirt внутри настраиваемой сети на основе NAT

Я пытаюсь настроить частную сеть для виртуальных машин, как описано на Руководство по работе с сетью libvirt но виртуальные машины не могут подключаться к Интернету и разрешать доменные имена.

Следуя приведенному выше руководству, я настроил на хосте так называемую «настраиваемую сеть на основе NAT»:

Хост может пинговать гостя и наоборот. Хост является частью сети с доступом в Интернет (IP 192.168.0.15) и настроен как шлюз для этой частной локальной сети для виртуальных машин (IP 10.10.0.1). Гость с IP 10.10.0.10 не может разрешать интернет-адреса (например, google.com), ни пинговать IP-адреса в Интернете напрямую (например, 216.58.222.46 для google.com).


Хост

файл /var/lib/dnsmasq/virbr10/dnsmasq.conf:

except-interface=lo
interface=virbr10
bind-dynamic
dhcp-range=10.10.0.2,10.10.0.254
dhcp-lease-max=1000
dhcp-leasefile=/var/lib/dnsmasq/virbr10/leases
dhcp-hostsfile=/var/lib/dnsmasq/virbr10/hostsfile
dhcp-no-override
strict-order

Результаты из systemctl status dnsmasq@virbr10.service:

● dnsmasq@virbr10.service - DHCP and DNS caching server for virbr10.
   Loaded: loaded (/etc/systemd/system/dnsmasq@.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2017-06-07 09:43:39 -03; 8h ago
 Main PID: 1209 (dnsmasq)
   CGroup: /system.slice/system-dnsmasq.slice/dnsmasq@virbr10.service
           └─1209 /usr/sbin/dnsmasq -k --conf-file=/var/lib/dnsmasq/virbr10/dnsmasq.conf

файл /etc/sysconfig/iptables:

*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o virbr10 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT

*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.10.0.0/24 -d 224.0.0.0/24 -j RETURN
-A POSTROUTING -s 10.10.0.0/24 -d 255.255.255.255/32 -j RETURN
-A POSTROUTING -s 10.10.0.0/24 ! -d 10.10.0.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 10.10.0.0/24 ! -d 10.10.0.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 10.10.0.0/24 ! -d 10.10.0.0/24 -j MASQUERADE
COMMIT

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p tcp -m tcp --syn -m conntrack --ctstate NEW --dport 22 -j ACCEPT
-A INPUT -i virbr10 -p udp -m udp -m multiport --dports 53,67 -j ACCEPT
-A INPUT -i virbr10 -p tcp -m tcp -m multiport --dports 53,67 -j ACCEPT
-A INPUT -m conntrack --ctstate INVALID -j DROP
-A INPUT -p tcp -m tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -d 10.10.0.0/24 -o virbr10 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.10.0.0/24 -i virbr10 -j ACCEPT
-A FORWARD -i virbr10 -o virbr10 -j ACCEPT
-A FORWARD -i virbr10 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -o virbr10 -j REJECT --reject-with icmp-port-unreachable
COMMIT

Гость

файл cat /etc/resolv.conf:

# Generated by NetworkManager
nameserver 10.10.0.1

iptables был мертв, и поэтому правила не выполнялись:

$ systemctl restart iptables решил проблему.