У меня есть 2 машины, на каждой из которых запущен KVM, то есть два KVM с указанной ниже сетевой конфигурацией.
Host 1: 192.168.10.100 (eth2)
10.10.100.1 (virbr1)
KVM 1 (NAT with Host 1): 10.10.100.128 (eth0 inside kvm)
Host 2: 192.168.10.101 (eth2)
10.10.100.1 (virbr1)
KVM 2 (NAT with Host 2): 10.10.100.128 (eth0 inside kvm)
KVM размещают сервер на порту 6000. Я бы хотел, чтобы KVM работали и как клиенты, и как серверы. Например, KVM1 может выбрать взаимодействие в качестве клиента с сервером на KVM2 или с самим собой. В этом случае KVM1 подключится к 192.168.10.101 или 192.168.10.100 (самому себе)
Для этого у меня есть следующие правила iptables, но я не могу заставить KVM общаться с сервером, запущенным на нем самом. Может кто-нибудь помочь мне выяснить недостающую ссылку?
Для KVM1 и KVM2 установлены следующие правила (ниже приведены полные правила, как они отображаются на моем устройстве):
В таблице по умолчанию я настроил переадресацию в сеть KVM:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
114 7254 ACCEPT udp -- virbr1 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT tcp -- virbr1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
314 103K ACCEPT udp -- virbr1 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
0 0 ACCEPT tcp -- virbr1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
6810K 1271M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
43 2723 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8000
475 60252 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8443
270 15588 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:111
35125 4776K ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:111
720 112K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:4001
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:4001
6 328 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:564
6 500 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:564
14532 5776K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2049
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:2049
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:4002
19070 1526K ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:4002
2900K 852M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:6500flags: 0x17/0x02
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:6550flags: 0x17/0x02
7294 379K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9000
0 0 REJECT all -- eth0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
8574K 1767M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
934 642K ACCEPT all -- * * 0.0.0.0/0 10.10.100.0/24 state NEW,RELATED,ESTABLISHED
88 7740 ACCEPT all -- * virbr1 0.0.0.0/0 10.10.100.0/24 state RELATED,ESTABLISHED
533 39866 ACCEPT all -- virbr1 * 10.10.100.0/24 0.0.0.0/0
0 0 ACCEPT all -- virbr1 virbr1 0.0.0.0/0 0.0.0.0/0
4 240 REJECT all -- * virbr1 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT all -- virbr1 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT 8939K packets, 2177M bytes)
pkts bytes target prot opt in out source destination
В таблице NAT я настроил переадресацию портов в PREROUTING и МАСКИРУЮ все пакеты, покидающие виртуальный интерфейс от kvm:
Chain PREROUTING (policy ACCEPT 116K packets, 20M bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- * * !10.10.100.128 0.0.0.0/0 tcp dpt:8080 to:10.10.100.128:8080
0 0 DNAT tcp -- * * !10.10.100.128 0.0.0.0/0 tcp dpt:6002 to:10.10.100.128:6002
0 0 DNAT tcp -- * * !10.10.100.128 0.0.0.0/0 tcp dpt:6001 to:10.10.100.128:6001
0 0 DNAT tcp -- * * !10.10.100.128 0.0.0.0/0 tcp dpt:6000 to:10.10.100.128:6000
Chain INPUT (policy ACCEPT 114K packets, 20M bytes)
pkts bytes target prot opt in out source destination
54 16928 ACCEPT all -- * * 10.10.100.128 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 7539 packets, 410K bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 7537 packets, 410K bytes)
pkts bytes target prot opt in out source destination
2 104 MASQUERADE all -- * virbr1 0.0.0.0/0 0.0.0.0/0
0 0 MASQUERADE tcp -- * * 10.10.100.0/24 !10.10.100.0/24 masq ports: 1024-65535
0 0 MASQUERADE udp -- * * 10.10.100.0/24 !10.10.100.0/24 masq ports: 1024-65535
0 0 MASQUERADE all -- * * 10.10.100.0/24 !10.10.100.0/24
С указанными выше правилами KVM1 может общаться с сервером, работающим на KVM2, но не с сервером, работающим на нем самом. Это происходит из-за правила PREROUTING выше, которое отрицает любой исходный пакет с адресом KVM.
Если я изменю указанное выше правило PREROUTING на:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere anywhere tcp dpt:x11 to:10.10.100.128:6000
В этом случае проблема новая. Любой запрос от KVM1 к KVM2 маршрутизируется внутренне обратно к KVM1!