Чтобы поместить это в контекст, я установил Ubuntu 17.04 и установлен KVM затем успешно настроил стандартную виртуальную машину Windows Server 2016. С точки зрения доступа к сети / Интернету все работало отлично, пока сегодня утром я не заметил, что при навигации в браузере я не могу получить доступ к определенным веб-сайтам. Я нашел источник проблемы, но мои знания iptables минимален, и после бесчисленных часов исследований я так и не понял.
Вот последствия проблемы.
Я использую NAT-соединение между моим хостом и гостем. я использую / и т.д. / libvirt / крючки / qemu предоставленный ими скрипт для перенаправления портов, и я нашел источник проблемы (Пронумерованные 1 и 2 ниже)
Изменить: я разместил их здесь, чтобы лучше видеть:
1- sbin / iptables -t nat -D PREROUTING -p tcp --dport 80 -j DNAT --to $ GUEST_IP: 80
2- sbin / iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to-destination $ GUEST_IP: 80
Я пробовал их оба по отдельности, и они работают некоторое время, после чего я больше не могу получить доступ к веб-сайтам http, но мой веб-сервер все еще доступен.
Буду признателен за любую помощь или новое / другое правило, которое может решить эту проблему.
#!/bin/bash
if [ "${1}" = "VM-NAME" ]; then
GUEST_IP=10.0.0.5
# currently not used anywhere
HOST_IP=1.2.3.4
# CURRENTLY NOT USED, use as $HOST_PORT or $GUEST_PORT
#GUEST_PORT=3389
#HOST_PORT=1338
if [ "${2}" = "stopped" ] || [ "${2}" = "reconnect" ]; then
/sbin/iptables -D FORWARD -o virbr0 -d $GUEST_IP -j ACCEPT
##/sbin/iptables -I FORWARD -m state 10.0.0.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT
#### RDP [tcp/udp] [Host:1338 -> VM:3389]
/sbin/iptables -t nat -D PREROUTING -p tcp --dport 1338 -j DNAT --to $GUEST_IP:3389
/sbin/iptables -t nat -D PREROUTING -p udp --dport 1338 -j DNAT --to $GUEST_IP:3389
#### HTTP [tcp] [Host:80 -> VM:80]
1- ##/sbin/iptables -t nat -D PREROUTING -p tcp --dport 80 -j DNAT --to $GUEST_IP:80
2 -##/sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to-destination $GUEST_IP:80
fi
if [ "${2}" = "start" ] || [ "${2}" = "reconnect" ]; then
/sbin/iptables -I FORWARD -o virbr0 -d $GUEST_IP -j ACCEPT
##/sbin/iptables -I FORWARD -m state 10.0.0.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT
#### RDP [tcp/udp] [Host:1338 -> VM:3389]
/sbin/iptables -t nat -I PREROUTING -p tcp --dport 1338 -j DNAT --to $GUEST_IP:3389
/sbin/iptables -t nat -I PREROUTING -p udp --dport 1338 -j DNAT --to $GUEST_IP:3389
#### HTTP [tcp] [Host:80 -> VM:80]
1- ##/sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to $GUEST_IP:80
2- ##/sbin/iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to-destination $GUEST_IP:80
fi
fi
Мой ifconfg следующий, если он вам может понадобиться. Я полагаю, что virbr0 - это мост между хостом и виртуальной машиной, а vmnet0 появляется только тогда, когда виртуальная машина запущена (я не совсем понимаю, почему vnet0 является жестким только с ipv6)
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet <my ipv4> netmask 255.255.255.0 broadcast <my ipv4>.255
inet6 <my ipv6> prefixlen 128 scopeid 0x0<global>
inet6 <my ipv6> prefixlen 64 scopeid 0x20<link>
ether 4c:72:b9:43:f0:e5 txqueuelen 1000 (Ethernet)
RX packets 18640 bytes 2965981 (2.9 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16930 bytes 3893649 (3.8 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 20 memory 0xfe500000-fe520000
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 164 bytes 33947 (33.9 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 164 bytes 33947 (33.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255
ether 52:54:00:62:88:21 txqueuelen 1000 (Ethernet)
RX packets 10302 bytes 2798316 (2.7 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9209 bytes 1691107 (1.6 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vnet0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fc7f:f3ff:fe5e:e777 prefixlen 64 scopeid 0x20<link>
ether fe:7f:f3:5e:e7:77 txqueuelen 1000 (Ethernet)
RX packets 10302 bytes 2942544 (2.9 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 13079 bytes 1893103 (1.8 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0