System: CentOS 6.5
Netzwerk: Brücke auf br0
IPv6: ISP Nativer /64-Block.
IPv4: ISP-Adresse (nicht internes LAN)
Zweck: Um IPv6 nur Gästen zuzuweisen (manuell), möchte ich nicht, dass dem Gastbetriebssystem eine IPv4-Adresse zugewiesen wird.
Auf dem Host:
/etc/sysctl.conf:
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.br0.forwarding = 1
net.ipv6.conf.default.forwarding = 1
brctl anzeigen
bridge name bridge id STP enabled interfaces
br0 8000.e840f2ecdfed no eth0
vnet0
virbr0 8000.52540051ef3c yes virbr0-nic
ifconfig:
br0 Link encap:Ethernet HWaddr E8:40:F2:EC:DF:ED
inet addr:xxx.xxx.xxx.xxx Bcast:xxx.xxx.xxx.255 Mask:255.255.255.0
inet6 addr: 2607:beef:be:beef::1/64 Scope:Global
inet6 addr: fe80::ea40:f2ff:feec:dfed/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:365707 errors:0 dropped:0 overruns:0 frame:0
TX packets:470458 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:28867567 (27.5 MiB) TX bytes:574512176 (547.8 MiB)
eth0 Link encap:Ethernet HWaddr E8:40:F2:EC:DF:ED
inet6 addr: fe80::ea40:f2ff:feec:dfed/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:392675 errors:0 dropped:0 overruns:0 frame:0
TX packets:608319 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:46359514 (44.2 MiB) TX bytes:586262036 (559.1 MiB)
Interrupt:20 Memory:fe500000-fe520000
/etc/sysconfig/networt-scripts/ifcfg-br0:
DEVICE=br0
BOOTPROTO=static
IPADDR=xxx.xxx.xxx.xxx
NETMASK=255.255.255.0
ONBOOT=yes
GATEWAY=xxx.xxx.xxx.xxx
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6ADDR=2607:beef:be:beef::1/64
TYPE=Bridge
DELAY=0
cat /etc/sysconfig/network-scripts/route6-br0
2607:beef:be:bff:ff:ff:ff:ff dev br0
default via 2607:beef:be:bff:ff:ff:ff:ff
Route -A inet6 -n
Kernel IPv6 routing table
Destination Next Hop Flags Metric Ref Use Iface
2607:beef:be:beef::/64 :: U 256 0 0 br0
2607:beef:be:bff:ff:ff:ff:ff/128 :: U 1024 1 0 br0
fe80::/64 :: U 256 0 0 virbr0
fe80::/64 :: U 256 0 0 vnet0
fe80::/64 :: U 256 0 0 br0
fe80::/64 :: U 256 0 0 eth0
::/0 2607:beef:be:bff:ff:ff:ff:ff UG 1024 20281 4 br0
::1/128 :: U 0 1 1 lo
2607:beef:be:beef::/128 :: U 0 0 1 lo
2607:beef:be:beef::1/128 :: U 0 36128 1 lo
...
ip6tables -S:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8888 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp6-adm-prohibited
-A FORWARD -s 2607:beef:be:beef::/64 -i br0 -j ACCEPT
Für Gäste:
Betriebssystem: CentOS 6.5 minimal
Netzwerk: Manuell
cat /etc/sysconfig/network-scripts/ifcfg-eth0:
ONBOOT=yes
NM_CONTROLLED=no
IPV6INIT=yes
IPV6ADDR=2607:beef:be:beef::2/64
IPV6_DEFAULTGW=2607:beef:be:beef::1 (The host's ipv6 address)
Verhalten:
Auf dem Host kann ich die IPv6-Adresse des Gastes anpingen, vise-vesa.
Ich kann vom Gast aus keine andere IPv6-Adresse anpingen, auch nicht Google DNS 2001:4860:4860::8888/8844. (Zeitüberschreitung)
Ich kann von keiner nicht zugewiesenen ISP-IPv6-Adresse einen Ping an den Gast senden. (Zeitüberschreitung)
Ping6 von Hosts nach außen ist OK.
Aktualisieren:
- Wenn ich das Gateway des Gasts auf 2607:beef:be:bff:ff:ff:ff:ff (Gateway des Hosts) ändere, beschwert sich der Gast: „Keine Route zum Host“. Selbst wenn ich dem Gast die statischen Routeninformationen (route6-eth0) hinzugefügt habe, stellt er immer noch keine Verbindung her.
Kann mir bitte jemand helfen, herauszufinden, was los ist? Danke.
Antwort1
Mit Marks Hinweis werde ich also meine eigene Frage beantworten.
Host-Setup:
Weisen Sie Ihrer virtuellen Brücke den IPv6-Subblock zu, in meinem Beispiel:
Hinzufügen
<ip family='ipv6' address='2607:beef:be:beef:1::' prefix='96'>
/etc/libvirt/qemu/networks/default.xml
Verwenden Sie dazu virsh
die Funktion „Zerstören“ und „Neuaufbau“ des Geräts „virbr0“. In meinem Fall wurde dadurch ein Gerät „virbr1“ generiert.
Fügen Sie die Regel „ip6tables“ hinzu:
ip6tables -A FORWARD -m physdev --physdev-is-bridged -j ACCEPT
ip6tables -A FORWARD -i br0 -j ACCEPT
Auf der VM-Seite:
Fügen Sie die ausgewählte IPv6-Adresse zu Ihrer Konfigurationsdatei hinzu:
IPV6INIT=yes
IPV6ADDR=2607:beef:be:beef:1::253:8/128
Starten Sie die Netzwerkschnittstelle Ihrer VM neu, es funktioniert einfach.
Ich vermute, das liegt daran, dass die VM über die Virbr1-Schnittstelle am Host mit der Außenwelt verbunden ist. Das Gateway auf dem Host ist br0. Mit der IP6tables-Regel wird alles geklärt.
Ich habe eine Schritt-für-Schritt-Anleitung in meinem Blog zusammengestellt.https://luxing.im/adding-ipv6-support-for-kvm-vms/
Antwort2
Ihr Gateway in Ihrem Gast ist falsch.
Da Sie Ihre Netzwerkverbindung überbrückt haben, ist es so, als ob sich die VM im selben Subnetz (LAN) wie der Host befindet. Daher muss sie dieselbe Gateway-Adresse wie der Host verwenden.