Ich habe kürzlich Proxmox als Virtualisierungshost eingerichtet. Es ist nur KVM + Debian in einer netten Linux-Distribution. Mein Heimnetzwerk ist 192.168.12.0/24. Ich wollte 192.168.14.0/24 als Subnetz für alle meine VMs auf dem Proxmox-Computer verwenden. Ich verwende DHCP, um fast alle meine Hosts zu konfigurieren. Wenn ich eine 'static-ip' möchte, konfiguriere ich im Allgemeinen nur manuell eine DHCP-Reservierung für das Gerät. Daher wollte ich, dass meine VMs DHCP-Adressen im Subnetz 192.168.14.0/24 erhalten.
Bei der Installation von Proxmox wurde eine Brücke mit dem Namen vmbr0bridged mit erstellt eth0. Die IP-Adresse der Bridge lautet 192.168.12.12.
Ich fügte hinzu, dass eine Brücke mit dem /etc/network/interfacesNamen vmbr14überbrückt wurde eth0.14. Ich habe ihm eine IP von gegeben 192.168.14.12. Ich habe auch im 8021qModul modprobe'd und es hinzugefügt /etc/modules.
Mein DHCP-Server befindet sich auf einem anderen Computer, 192.168.12.95auf dem sich eine Schnittstelle befindet eth0. Ich fügte eine weitere Schnittstelle namens hinzu eth0.14und gab ihr die IP von 192.168.14.95. Ich habe /etc/dhcp/dhcpd.confmit einem anderen Pool für das Subnetz aktualisiert 192.168.14.0. Die angegebene Standardroute ist 192.168.14.12das Proxmox-Gerät. DHCP funktionierte sofort ohne Probleme.
Damit Hosts im 192.168.12.0/24Netzwerk wissen, wie sie routen sollen, habe 192.168.14.0/24ich mein Internet-Gateway ( 192.168.12.2) aufgerufen und eine Route wie folgt hinzugefügt
192.168.14.0 192.168.12.12 255.255.255.0 UG 1 0 0 eth2
In der proxmox-Box ist die Weiterleitung für IPv4 bereits aktiviert
ericu@basov:~$ cat /proc/sys/net/ipv4/ip_forward
1
Danach hat es einfach geklappt. Ich kann meine VMs problemlos von meinem Desktop aus per SSH und Ping erreichen.
Aber auf den VMs selbst kann ich nicht 192.168.12.95nur erreichen 192.168.14.95. Ich habe auf einer der VMs einen Ping durchgeführt 192.168.12.95und das Paket mit erfassttcpdump
ericu@katz:~$ sudo tcpdump -n -i eth0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
18:50:16.007898 IP 192.168.14.130 > 192.168.12.95: ICMP echo request, id 11498, seq 18, length 64
18:50:17.010380 IP 192.168.14.130 > 192.168.12.95: ICMP echo request, id 11498, seq 19, length 64
18:50:18.012969 IP 192.168.14.130 > 192.168.12.95: ICMP echo request, id 11498, seq 20, length 64
18:50:19.015433 IP 192.168.14.130 > 192.168.12.95: ICMP echo request, id 11498, seq 21, length 64
18:50:20.018043 IP 192.168.14.130 > 192.168.12.95: ICMP echo request, id 11498, seq 22, length 64
Die Pakete kommen offensichtlich an die Maschine, aber ich habe keine Ahnung, was danach passiert. Die Maschine antwortet einfach nicht. TCP funktioniert auch nicht.
ericu@katz:~$ sudo tcpdump -n tcp port 3000
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
18:53:21.048128 IP 192.168.14.130.58499 > 192.168.12.95.3000: Flags [S], seq 2306774687, win 14600, options [mss 1460,sackOK,TS val 665263 ecr 0,nop,wscale 7], length 0
18:53:22.051442 IP 192.168.14.130.58499 > 192.168.12.95.3000: Flags [S], seq 2306774687, win 14600, options [mss 1460,sackOK,TS val 666264 ecr 0,nop,wscale 7], length 0
18:53:24.060540 IP 192.168.14.130.58499 > 192.168.12.95.3000: Flags [S], seq 2306774687, win 14600, options [mss 1460,sackOK,TS val 668268 ecr 0,nop,wscale 7], length 0
Wenn ich versuche, auf die IP 192.168.14.95von den VMs zuzugreifen, funktioniert alles gut.
Wenn ich das mache ist ifdown eth0.14der Rechner 192.168.12.95dann von den VMs erreichbar. Dies ist offensichtlich nicht praktikabel, da der DHCP-Server erreichbar sein muss.
Warum können die Computer im 192.168.14.0/24Subnetz den Computer nur über die 192.168.14.95Adresse und nicht auch über die Adresse erreichen 192.168.12.95?
Das ist die Routing-Tabelle auf 192.168.12.95
ericu@katz:~$ ip route show
default via 192.168.12.2 dev eth0 metric 100
192.168.12.0/24 dev eth0 proto kernel scope link src 192.168.12.95
192.168.14.0/24 dev eth0.14 proto kernel scope link src 192.168.14.95
ericu@katz:~$
Dies ist die Routing-Tabelle auf 192.168.14.130
[ericu@squid3 ~]$ ip route show
default via 192.168.14.12 dev ens18 proto static metric 1024
192.168.14.0/24 dev ens18 proto kernel scope link src 192.168.14.130
[ericu@squid3 ~]$
Um dieses Problem zu beheben, habe ich eine VM auf meinem Desktop erstellt. Ich habe /etc/network/interfaceswie folgt editiert
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
auto eth0.14
iface eth0.14 inet static
address 192.168.14.14
netmask 255.255.255.0
Der Computer hat eine DHCP-Adresse auf eth0 von 192.168.12.172. Von konnte 192.168.12.130ich immer noch nicht darauf zugreifen 192.168.12.172. Auf der Test-VM habe ich geändert /etc/iproute2/rt_tables, um wie folgt auszusehen
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
14 vlan14
Ich habe dann die folgenden Befehle ausgeführt
root@ubuntuvmdesktop:/home/ericu# ip route show
default via 192.168.12.2 dev eth0
192.168.12.0/24 dev eth0 proto kernel scope link src 192.168.12.172
192.168.14.0/24 dev eth0.14 proto kernel scope link src 192.168.14.14
root@ubuntuvmdesktop:/home/ericu# ip route del 192.168.14.0/24 dev eth0.14 src 192.168.14.14
root@ubuntuvmdesktop:/home/ericu# ip route show
default via 192.168.12.2 dev eth0
192.168.12.0/24 dev eth0 proto kernel scope link src 192.168.12.172
root@ubuntuvmdesktop:/home/ericu# ip route add 192.168.14.0/24 dev eth0.14 src 192.168.14.14 table vlan14
root@ubuntuvmdesktop:/home/ericu# ip route add default via 192.168.14.12 dev eth0.14 src 192.168.14.14 table vlan14
RTNETLINK answers: Network is unreachable
root@ubuntuvmdesktop:/home/ericu# ip rule add from 192.168.14.14 table vlan14
root@ubuntuvmdesktop:/home/ericu# ip route show table vlan14
192.168.14.0/24 dev eth0.14 scope link src 192.168.14.14
Dies die VM mit IP Nachdem ich kann die Maschine erreicht mit 192.168.14.14und192.168.12.172
[ericu@squid3 ~]$ nc -v 192.168.12.172 22
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.12.172:22.
SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2
^C
[ericu@squid3 ~]$ nc -v 192.168.14.14 22
Ncat: Version 6.40 ( http://nmap.org/ncat )
Ncat: Connected to 192.168.14.14:22.
SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2
^C
[ericu@squid3 ~]$
Dies ist also mindestens eine Möglichkeit, das Problem zu beheben. Allerdings verstehe ich nicht wirklich, was es tut. Ich verstehe, dass ich dem Computer eine separate Routing-Tabelle namens "vlan14" hinzugefügt habe. Ich vermute mal, dass durch die Verwendung von ip rule addirgendwie der Verkehr 192.168.14.14in die eigene Routing-Tabelle geleitet wird. Isoliert dies das Routing für die beiden Subnetze in ihre eigene Routing-Tabelle? Alle Routenänderungen, die ich mit vorgenommen ip routehabe, bleiben jedoch nach einem Neustart nicht erhalten. Es scheint, als müsste ich /etc/network/interfacesirgendwie aktualisieren, um anzuzeigen, dass Routen in diese alternative Routing-Tabelle aufgenommen werden sollen.
Kann mir bitte jemand erklären, wie die separate Routingtabelle funktioniert? Könnte jemand erklären, wie ich meine Konfiguration ändere, damit die mit dem ipBefehl vorgenommenen Änderungen auch nach einem Neustart bestehen bleiben?
ip route show.
ip route show(oderip r skurz) auf z. B.192.168.14.130und an192.168.12.95(verwenden Sie denrouteBefehl nicht, er ist begrenzt und kann nicht alle Routing-Funktionen verarbeiten, die Linux-Betriebssysteme unterstützen).