在网桥模式下将IPv6地址分配给KVM guest虚拟机

系统:CentOS 6.5

networking:桥br0

IPv6:ISP Native / 64块。

IPv4:ISP地址(不是内部LAN)

目的:要仅将IPv6分配给来宾(手动),我不希望将ipv4地址分配给来宾操作系统。


主持人:

/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显示

 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 /网知识的脚本/的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 

在客人:

操作系统:CentOS 6.5最小

networking:手动

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) 

行为:

在主机上,我可以ping客人的ipv6地址,vise-vesa。

我无法ping客人的任何其他ipv6地址,包括谷歌dns 2001:4860:4860 :: 8888/8844。 (时间到)

我不能从任何非分配的ISP ipv6地址ping到来宾。 (时间到)

从主机到外部的ping6是可以的。


更新:

  1. 如果我将Guest的网关改为2607:beef:be:bff:ff:ff:ff:ff(Host's gateway),guest会抱怨“没有路由到主机”。 即使我将静态路由信息(route6-eth0)添加到Guest,它仍然不会连接。

有谁能帮我弄清楚发生了什么事吗? 谢谢。

所以马克的通知,我会回答我自己的问题。

主机设置:

在我的示例中,将IPv6子块分配给您的虚拟网桥:

 <ip family='ipv6' address='2607:beef:be:beef:1::' prefix='96'> 

/etc/libvirt/qemu/networks/default.xml ,使用virsh破坏并重buildvirbr0设备,在我的情况下它生成了一个virbr1设备。

添加ip6tables规则:

ip6tables -A FORWARD -m physdev --physdev-is-bridged -j ACCEPT

ip6tables -A FORWARD -i br0 -j ACCEPT

在VM端:

将选定的IPv6地址添加到您的configuration文件中:

 IPV6INIT=yes IPV6ADDR=2607:beef:be:beef:1::253:8/128 

重新启动虚拟机的networking接口,它是正常的。

我想这是因为虚拟机通过主机上的virbr1接口与外界连接。 主机上的网关是br0。 随着ip6tables规则将全部清理。

我在我的博客中编写了一步一步的指南, https://luxing.im/adding-ipv6-support-for-kvm-vms/

你的客人的网关是错误的。

由于您桥接了您的networking连接,就好像虚拟机与主机在同一个子网(LAN)上。 因此它需要使用与主机相同的网关地址。