Имеются взятые из Интернета и переделанные немного под себя правила iptables, обеспечивающие запрет трафика при отключении VPN. Всё работает, как нужно.
Понадобилось перевести виртуальную машину с VirtualBox на QEMU/KVM, решил использовать libvirt и virt-manager. Но появилась проблема - с моими правилами iptables гостевая ОС не получает доступа к Интернету. Насколько я понял, libvirt создаёт свои правила, но, видимо, мои запреты (кажется, по части FORWARD) всё-равно мешают. Я по-разному пытался сделать, в итоге добился появления Интернета на госте через удаление правила :FORWARD DROP [0:0]
. Но в этом случае, при отключении VPN на хосте, на хосте соединение пропадает, но гость продолжает иметь доступ к Интернету напрямую, что меня не устраивает. Хотелось-бы, чтобы гость не мог этого сделать, но имел доступ лишь при включенном на хосте VPN. Ниже приведу правила iptables.
Мои запрещающие правила:
*filter
:INPUT DROP [145:11482]
:FORWARD DROP [0:0]
:OUTPUT DROP [18518:3426455]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -d X.X.X.X/32 -p tcp -j ACCEPT
-A OUTPUT -d X.X.X.X/32 -p udp -j ACCEPT
-A OUTPUT -d 192.168.100.0/24 -p all -j ACCEPT
-A INPUT -d 192.168.100.0/24 -p all -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o tun0 -j ACCEPT
COMMIT
X.X.X.X
здесь - адрес VPN-сервера.Вот вывод
iptables -S
со всеми правилами в сумме - моими, и теми, которые добавляются libvirt:
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -d 192.168.100.0/24 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT
-A OUTPUT -d X.X.X.X/32 -p tcp -j ACCEPT
-A OUTPUT -d X.X.X.X/32 -p udp -j ACCEPT
-A OUTPUT -d 192.168.100.0/24 -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o tun0 -j ACCEPT
Помогите, пожалуйста, сделать так, чтобы гость всё-таки имел доступ в Интернет, но только пока на хосте включен VPN.