Я пытаюсь настроить частную сеть для виртуальных машин, как описано на Руководство по работе с сетью libvirt но виртуальные машины не могут подключаться к Интернету и разрешать доменные имена.
Следуя приведенному выше руководству, я настроил на хосте так называемую «настраиваемую сеть на основе NAT»:
virbr10-dummy
);virbr10
с подсетью 10.10.0.0/24
);iptables
(см. полный файл правил iptables ниже);dnsmasq
который игнорирует виртуальный мост;dnsmasq@virbr10
systemd
сценарий, который вызывается сценарием диспетчера NetworkManager, когда мост включен.Хост может пинговать гостя и наоборот. Хост является частью сети с доступом в Интернет (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
решил проблему.