Gast-Unikernel auf KVM kann Host nicht erreichen, aber Host kann Gast erreichen

Gast-Unikernel auf KVM kann Host nicht erreichen, aber Host kann Gast erreichen

Ich versuche, einen Rumpkernel zu machen (https://github.com/rumpkernel) auf KVM ausführen, eine Verbindung zu einem Socket auf dem Host herstellen und einige Daten senden.

Mithilfe des folgenden Nginx-Beispiels kann ich dem Host Zugriff auf den Gast gewähren: https://github.com/rumpkernel/wiki/wiki/Tutorial%3A-Serve-a-static-website-as-a-Unikernel

Im Wesentlichen mache ich Folgendes:

ip tuntap add tap0 mode tap
ip addr add 10.0.0.10/24 dev tap0
ip link set dev tap0 up 

Starten Sie dann rumprun mit den Parametern:

rumprun kvm -i -M 128 \
        -I if,vioif,'-net tap,script=no,ifname=tap0'\
        -W if,inet,static,10.0.0.11/24 \
        -b images/data.iso,/data \
        -- <my python script>

Dort öffnet das Python-Skript einen Socket (0.0.0.0:2010) und lauscht. Auf dem Host kann ich dann Folgendes tun:

nc 10.0.0.11 2010

Und ich kann sehen, dass die Verbindung hergestellt wird. Das Problem ist, dass ich es nicht andersherum machen kann. Jetzt lasse ich den KVM-Gast einen Socket öffnen und versuchen, eine Verbindung herzustellen:

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:                                                                                       
   ip = "10.0.0.10"
   try:
       s.connect( (ip, 9999) )
       #send some data

Und das gleiche Skript wird ausgeführt, das wie zuvor zuhört und an 10.0.0.10:9999 bindet. Der Gast bleibt beim Verbindungsversuch hängen und es kommt schließlich zu einer Zeitüberschreitung.

Ich habe fast alles ausprobiert, was ich online finden konnte, und bin bei einer Bridge mit der IP 10.0.0.10 gelandet, der ich tap0 hinzugefügt habe. Dann habe ich br0 abgesucht und Folgendes bekommen (einige Zeilen entfernt):

15:38:46.173914 ARP, Request who-has 10.0.0.11 tell 10.0.0.11, length 28
...
15:38:46.500262 ARP, Request who-has 10.0.0.10 tell 10.0.0.11, length 28
15:38:46.500288 ARP, Reply 10.0.0.10 is-at 0e:ec:XX:XX:XX:XX (oui Unknown), length 28
15:38:46.500440 IP 10.0.0.11.52886 > 10.0.0.10.9999: Flags [S], seq 20858086, win 32768, options [mss 1460,nop,wscale 3,sackOK,nop,nop,nop,nop,TS val 1 ecr 0], length 0

Das lässt mich glauben, dass es eine Route gibt, aber das Paket kommt irgendwie nicht an. Ich habe versucht, die Filterung in sys.d zu deaktivieren

net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

Und immer noch nichts.

Irgendwelche Ideen, wie man das zum Laufen bringt? Ich möchte mein eth0 nicht überbrücken, da es ein Remote-Server ist und der Gast im Moment keine externen Verbindungen benötigt.

Antwort1

Welp, ich versuche seit einem Tag, das zu lösen, und natürlich finde ich die Antwort, nachdem ich hier eine Frage gepostet habe.

Der Hinweis war hierin:Konfigurieren Sie FirewallD, um überbrückten Netzwerkzugriff für virtuelle Maschinen zuzulassen

Ich habe iptables und Protokolle überprüft und dies in /var/log/ufw.log gefunden

Dec  5 15:38:46 xxxx kernel: [516010.193395] [UFW BLOCK] IN=br0 OUT= MAC=... SRC=10.0.0.11 DST=10.0.0.10 LEN=64 TOS=0x00 PREC=0x00 TTL=64 ID=

0 DF PROTO=TCP SPT=52886 DPT=9999 WINDOW=32768 RES=0x00 SYN URGP=0

Es stellte sich heraus, dass eine Firewall aktiv war und die Verbindung blockierte. Ich habe eine neue Regel wie hier angegeben hinzugefügt: https://help.ubuntu.com/community/UFW und jetzt funktioniert es. Offensichtlich.

verwandte Informationen