KVM Gast fehlt IPv4

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Benutzeravatar
hupfdule
Beiträge: 1864
Registriert: 09.12.2002 15:04:37
Wohnort: Berlin
Kontaktdaten:

KVM Gast fehlt IPv4

Beitrag von hupfdule » 05.07.2017 09:23:59

Hallo,

ich versuche einen Rootserver bei Hetzner mit virtuellen Maschinen
auszustatten. Der Rootserver hat 1 IPv4 und ein 1 IPv6 Subnetz.
Damit sollte es zwar nicht möglich sein, ohne NAT auf die VM per IPv4
von außen zuzugreifen, IPv6 jedoch direkt.

Grundsätzlich geht das auch.
Host und Gast können sich in beide Richtungen per IPv4 und IPv6
unterhalten.
Der Gast ist per IPv6 von außen erreichbar und hat auch Internetzugriff per
IPv6.
Der Gast ist nicht per IPv4 von außen erreichbar, da er ja keine
öffentliche IPv4 hat. ABER: Er ist auch nicht in der Lage per IPv4 aufs
Internet zuzugreifen.

Hier die wichtigsten Konfigurationsdateien:

Host

Code: Alles auswählen

$ cat /etc/network/interfaces
### Hetzner Online GmbH - installimage
# Loopback device:
auto lo
iface lo inet loopback

# device: eth0
auto  eth0
iface eth0 inet static
  address   78.46.XX.XX
  netmask   255.255.255.224
  gateway   78.46.YY.YY
  # default route to access subnet
  up route add -net 78.46.69.32 netmask 255.255.255.224 gw 78.46.YY.YY eth0

iface eth0 inet6 static
  address 2a01:4f8:dead:beef:2
  netmask 128
  gateway fe80:1

iface eth0 inet6 static
  address 2a01:4f8:dead:beef:3
  netmask 128
  gateway fe80:1

auto br0
iface br0 inet6 static
  address 2a01:4f8:dead:beef:2
  netmask 64

Code: Alles auswählen

$ sudo cat /etc/libvirt/qemu/networks/testnetz.xml 
[sudo] password for herrn: 
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made
using:
  virsh net-edit testnetz
or other application using the libvirt API.
-->

<network>
  <name>testnetz</name>
  <uuid>c64ed064-0d6b-453c-91f5-aa6e0836ea13</uuid>
  <forward dev=éth0' mode='route'>
    <interface dev=éth0'/>
  </forward>
  <bridge name='virbr1' stp=ón' delay='0'/>
  <mac address='52:54:00:8aäe:56'/>
  <domain name='testnetz'/>
  <ip address='192.168.100.254' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.100.128' end='192.168.100.250'/>
    </dhcp>
  </ip>
  <ip family=ípv6' address='2a01:4f8:dead:beef:100:8' prefix='64'>
  </ip>
</network>

Code: Alles auswählen

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 :1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:1d:92:66:0f:2c brd ff:ff:ff:ff:ff:ff
    inet 78.46.XX.XX/27 brd 78.46.69.63 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2a01:4f8:dead:beef:3/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 2a01:4f8:dead:beef:2/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80:21d:92ff:fe66:f2c/64 scope link 
       valid_lft forever preferred_lft forever
3: virbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 52:54:00:8aäe:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.254/24 brd 192.168.100.255 scope global virbr1
       valid_lft forever preferred_lft forever
    inet6 2a01:4f8:dead:beef:100:8/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80:5054:ff:fe8aäe56/64 scope link 
       valid_lft forever preferred_lft forever
4: virbr1-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr1 state DOWN group default qlen 500
    link/ether 52:54:00:8aäe:56 brd ff:ff:ff:ff:ff:ff
5: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr1 state UNKNOWN group default qlen 500
    link/ether fe:54:00:b0:29:3e brd ff:ff:ff:ff:ff:ff
    inet6 fe80:fc54:ff:feb0:293e/64 scope link 
       valid_lft forever preferred_lft forever

Code: Alles auswählen

$ ping 192.168.100.1
PING 192.168.100.1 (192.168.100.1) 56(84) bytes of data.
64 bytes from 192.168.100.1: icmp_seq=1 ttl=64 time=0.375 ms
64 bytes from 192.168.100.1: icmp_seq=2 ttl=64 time=0.260 ms
64 bytes from 192.168.100.1: icmp_seq=3 ttl=64 time=0.268 ms
# Host erreicht Gast per IPv4

Code: Alles auswählen

$ ping6 2a01:4f8:dead:beef::100:1
PING 2a01:4f8:dead:beef::100:1(2a01:4f8:dead:beef::100:1) 56 data bytes
64 bytes from 2a01:4f8:dead:beef::100:1: icmp_seq=1 ttl=64 time=0.396 ms
64 bytes from 2a01:4f8:dead:beef::100:1: icmp_seq=2 ttl=64 time=0.318 ms
64 bytes from 2a01:4f8:dead:beef::100:1: icmp_seq=3 ttl=64 time=0.242 ms
# Host erreicht Gast per IPv6

Code: Alles auswählen

$ ping debianforum.de
PING debianforum.de (144.76.154.165) 56(84) bytes of data.
64 bytes from zoidberg.debianforum.de (144.76.154.165): icmp_seq=1 ttl=60 time=0.495 ms
64 bytes from zoidberg.debianforum.de (144.76.154.165): icmp_seq=2 ttl=60 time=0.462 ms
64 bytes from zoidberg.debianforum.de (144.76.154.165): icmp_seq=3 ttl=60 time=0.420 ms
# Host erreicht Internet per IPv4

Code: Alles auswählen

$ ping6 debianforum.de
PING debianforum.de(zoidberg.debianforum.de) 56 data bytes
64 bytes from zoidberg.debianforum.de: icmp_seq=1 ttl=60 time=0.468 ms
64 bytes from zoidberg.debianforum.de: icmp_seq=2 ttl=60 time=0.474 ms
64 bytes from zoidberg.debianforum.de: icmp_seq=3 ttl=60 time=0.502 ms
# Host erreicht Internet per IPv6
Gast

Code: Alles auswählen

$ cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#allow-hotplug ens3
auto ens3
iface ens3 inet static
  address 192.168.100.1
  netmask 255.255.255.255
  gateway 78.46.XX.XX
  pointopoint 78.46.XX.XX
#iface ens3 inet dhcp
 
iface ens3 inet6 static
  address 2a01:4f8:dead:beef::100:1
  netmask 128

Code: Alles auswählen

$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 52:54:00:b0:29:3e brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.1 peer 78.46.XX.XX/32 brd 192.168.100.1 scope global ens3
       valid_lft forever preferred_lft forever
    inet6 2a01:4f8:dead:beef::100:1/128 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:feb0:293e/64 scope link 
       valid_lft forever preferred_lft forever

Code: Alles auswählen

$ ping 192.168.100.254
PING 192.168.100.254 (192.168.100.254) 56(84) bytes of data.
64 bytes from 192.168.100.254: icmp_seq=1 ttl=64 time=0.226 ms
64 bytes from 192.168.100.254: icmp_seq=2 ttl=64 time=0.248 ms
64 bytes from 192.168.100.254: icmp_seq=3 ttl=64 time=0.252 ms
# Gast erreicht Host per interner IPv4

Code: Alles auswählen

$ ping 78.46.XX.XX
PING 78.46.XX.XX (78.46.XX.XX) 56(84) bytes of data.
64 bytes from 78.46.XX.XX: icmp_seq=1 ttl=64 time=0.200 ms
64 bytes from 78.46.XX.XX: icmp_seq=2 ttl=64 time=0.276 ms
64 bytes from 78.46.XX.XX: icmp_seq=3 ttl=64 time=0.244 ms
# Gast erreicht Host per öffentlicher IPv4

Code: Alles auswählen

$ ping -4 debianforum.de
PING debianforum.de (144.76.154.165) 56(84) bytes of data.
# Hier erscheint _keinerlei_ weitere Ausgabe! Auch keine Zeilen bezüglich "destination unreachable"
# Gast erreicht Internet _nicht_ per IPv4

Code: Alles auswählen

$ ping -6 debianforum.de
PING debianforum.de(zoidberg.debianforum.de (2a01:4f8:200:22a4::2)) 56 data bytes
64 bytes from zoidberg.debianforum.de (2a01:4f8:200:22a4::2): icmp_seq=1 ttl=59 time=0.665 ms
64 bytes from zoidberg.debianforum.de (2a01:4f8:200:22a4::2): icmp_seq=2 ttl=59 time=0.759 ms
64 bytes from zoidberg.debianforum.de (2a01:4f8:200:22a4::2): icmp_seq=3 ttl=59 time=0.662 ms
# Gast erreicht Internet per IPv6

Ich bin für jede Hilfe dankbar. Gerne sende ich auch weitere Konfigurationen, falls gewünscht.

Benutzeravatar
bluestar
Beiträge: 2346
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: KVM Gast fehlt IPv4

Beitrag von bluestar » 05.07.2017 14:35:56

Wenn dein Gast keine öffentliche IPv4 IP hat, dann muss der KVM Host die interne IPv4 IP maskieren, auf dem Host in etwa so:

Code: Alles auswählen

iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j MASQUERADE
P.S.: Fixed code tags
Zuletzt geändert von bluestar am 05.07.2017 15:35:02, insgesamt 1-mal geändert.

Benutzeravatar
hupfdule
Beiträge: 1864
Registriert: 09.12.2002 15:04:37
Wohnort: Berlin
Kontaktdaten:

Re: KVM Gast fehlt IPv4

Beitrag von hupfdule » 05.07.2017 15:06:20

bluestar hat geschrieben: ↑ zum Beitrag ↑
05.07.2017 14:35:56
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j MASQUERADE
Tatsächlich. Das war natürlich sehr einfach. Mir jedoch so nicht bekannt.
Vielen Dank!

Aber eine weitere Frage dazu: Wo trage ich diesen Befehl am besten ein, damit er für libvirt immer ausgeführt wird. Ich könnte ihn natürlich einfach beim Systemstart des Hosts ausführen lassen, aber die Bridge, etc. wird ja auch erst von libvirt selbst angelegt. Es gibt doch bestimmt bei libvirt eine Konfigurationsdatei, in der man solche Sachen am besten eintragen soll.

reox
Beiträge: 2463
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz

Re: KVM Gast fehlt IPv4

Beitrag von reox » 16.07.2017 17:46:25

du kannst das auch mit einem post-up befehl in /etc/network/interfaces machen.

Antworten