几天以来,我一直尝试配置我的 KVM vm 以拥有一个公共 IP 地址,但没有成功。
首先,我使用的是 OVH,你需要知道他们不允许使用不同的 mac 地址进行联网。因此,我注册了一个与我的故障转移 IP 关联的虚拟 mac 地址
这是我的配置:
访客想要的 IP:46.105.40.x
主机 IP:176.31.240.x
主机配置
dummy0 接口:ifcfg-dummy0
BOOTPROTO=static
IPADDR=10.0.0.1
NETMASK=255.0.0.0
ONBOOT=yes
NM_CONTROLLED=no
ARP=yes
BRIDGE=br0
br0 桥:ifcfg-br0
DEVICE=br0
TYPE=Bridge
DELAY=0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.1
NETMASK=255.255.255.0
PEERDNS=yes
NM_CONTROLLED=no
ARP=yes
故障转移 IP 重定向到 br0 网桥,ip route add 46.105.40.xxx dev br0
> cat /proc/sys/net/ipv4/ip_forward
1
> cat /proc/sys/net/ipv4/conf/vnet0/proxy_arp
1
> route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 176.31.240.254 0.0.0.0 UG 0 0 0 eth0
46.105.40.x 0.0.0.0 255.255.255.255 UH 0 0 0 br0
176.31.240.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
来宾配置:
键盘/鼠标:
<interface type='bridge'>
<mac address='02:00:00:30:22:05'/>
<source bridge='br0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</interface>
我在这里借用了大部分 OVH 配置(法语,http://guides.ovh.com/BridgeClient)为客户机配置
eth0 接口:ifcfg-eth0
DEVICE="eth0"
BOOTPROTO=none
HWADDR="02:00:00:30:22:05"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Ethernet"
UUID="e9138469-0d81-4ee6-b5ab-de0d7d17d1c8"
USERCTL=no
PEERDNS=yes
IPADDR=46.105.40.xxx
NETMASK=255.255.255.255
GATEWAY=176.31.240.254
ARP=yes
对于路由,我在 route-eth0 中有:
176.31.240.254 dev eth0
default via 176.31.240.254 dev eth0
使用此配置,我无法访问互联网。我唯一能做的就是 ping 主机的公共 IP,仅此而已。我的最终结论是路由不起作用,因为当我在客户机上运行 时,ping 8.8.8.8
我在主机上看到:
> tcpdump -i vnet0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on br0, link-type EN10MB (Ethernet), capture size 65535 bytes
13:38:09.009324 IP 46-105-40-xxx.kimsufi.com > google-public-dns-a.google.com: ICMP echo request, id 50183, seq 1, length 64
13:38:09.815344 IP 46-105-40-xxx.kimsufi.com > google-public-dns-a.google.com: ICMP echo request, id 50183, seq 2, length 64
我从未收到 ping 回复,只有请求。看来访客 -> 主机通信正常。
在 eth0 上:
> tcpdump -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
13:39:40.240561 IP 46-105-40-xxx.kimsufi.com > google-public-dns-a.google.com: ICMP echo request, id 50439, seq 1, length 64
13:39:40.250161 IP google-public-dns-a.google.com > 46-105-40-xxx.kimsufi.com: ICMP echo reply, id 50439, seq 1, length 64
我在 eth0 上有请求和回复,但回复没有转发到网桥。我真的不明白为什么,我以为这是路由的目的!
主机和客户机上的 IPtables 均被禁用。
我真的希望你们中的一些人能够帮助我!
提前谢谢了,
塞巴斯蒂安
答案1
我也有同样的问题。我希望主机和 VM 客户机能够使用公共 IP。主机和 VM 之间的通信似乎运行正常,但 VM 无法访问互联网,反之亦然。
我的提供商还规定每个交换机端口只能有一个 MAC 地址。本质上,VMAC 地址用于 VRRP 等网络设备和其他一些协议中的故障转移,这意味着如果第一个交换机发生故障,则第二个到另一个交换机的链接将接管,并且您将获得具有实际 MAC 地址和所有内容的“复制”交换机端口。
我不明白你能从中得到什么好处。
最好的解决方案是在主机以太网接口上放置 2 个公网 IP,一个用于主机,另一个用于虚拟机。并进行一些策略路由。
问候