linux – 如何为2个KVM-Guests分配多个公共IP地址
我是这个问题的新手,我现在试着弄清楚如何通过KVM主机为KVM-guests分配多个公共IP地址.我发现大量的例子如何在运行1个公共IP的情况下进行这样的设置.
这是我的设置: 我已经通过iptables尝试了许多不同的方法来将流量从主机NIC路由到guest-NIC.尽管有一种方法是正确的,但只是错误的实施,我将细节留给你,让你无可挑剔.问题是:应该做的理想方式是什么? 应满足以下条件: > Apache必须获取访问者的原始IP地址 如果我放弃所有虚拟化的东西,这将非常简单,因为apache直接从特定的ip地址获取请求. 我愿意接受任何有效的解决方案. 解决方法
在dom0(例如KVM主机)WAN接口上使用网桥.这需要安装bridge-utils包.由于这是基于Debian的发行版,您可以在/ etc / network / interfaces中配置它:
iface eth0 inet manual auto br_wan iface br_wan inet dhcp # Assuming DHCP to get address,otherwise migrate all WAN connection options here #address 192.168.122.0 bridge_ports eth0 tap_guest1 bridge_stp off bridge_maxwait 0 bridge_fd 0 pre-up ip tuntap add dev tap_guest1 user guest1 mode tap # This command is required if your ISP allocates static IPs depending on MAC address # You shouldn't use this but might be handy some time #pre-up sysctl -q -w net/ipv4/conf/tap_guest1/proxy_arp=1 post-down ip tuntap del tap_guest1 mode tap 预升级命令设置TAP接口以将KVM来宾连接到网桥.请注意,此设置允许从非特权用户guest1运行kvm.请注意,使用sysctl设置net.ipv4.ip_forward = 1可能也很有用. 我从iproute2包中使用了ip tuntap命令.它尚未在Debian软件包中记录,但很快将在上游的手册页中提供.由于此软件包安装在每个基于Debian的服务器上,因此您无需安装uml-utilities或openvpn软件包即可创建这些接口. 这种方法确实缺乏管理大量分接接口的优雅,因为您需要创建类似于tap_guest1接口的预备和下行线路.这可以通过在/etc/network/pre-up.d和/etc/network/post-down.d中编写其他脚本来解决.如果要在KVM来宾仍在运行时使用ifdown / ifup脚本重新配置br_wan接口,这也是一个问题 – 您需要从桥接配置中删除除eth0之外的所有接口并手动将它们从桥接器中分离(不要忘记在桥重新配置之后将它们连接回来)或关闭桥上运行的所有KVM实例. 另一种可能更干净的方法是为KVM本身编写自定义ifup脚本,并在NIC的脚本选项中使用它.你可以在/ etc / qemu-ifup中得到一个例子.有关详情,请参见kvm manual page. 然后你可以像这样运行你的KVM盒子: kvm -net nic,model=virtio,macaddr=12:34:56:78:9a:bc -net tap,ifname=tap_guest1,script=no,downscript=no -boot c -nographic -display none -daemonize guest1-drive.qcow2 可以使用命令手动在KVM guest虚拟机的一个接口上设置多个IP地址 ip address add aaa.bbb.ccc.101/24 dev eth0 或永久在/ etc / network / interfaces中,如下所示: auto eth0 eth0:1 iface eth0 inet static address aaa.bbb.ccc.100 network aaa.bbb.ccc.0 netmask 255.255.255.0 broadcast aaa.bbb.ccc.255 gateway aaa.bbb.ccc.1 iface eth0:1 inet static address aaa.bbb.ccc.101 network aaa.bbb.ccc.0 netmask 255.255.255.0 broadcast aaa.bbb.ccc.255 gateway aaa.bbb.ccc.1 请注意,如果您的数据中心/提供商不希望您在同一网络上显示其他框,则可能无法配置它们并且它们将不可用.在这种情况下,您可能希望创建内部网桥并使用iptables在WAN接口和此网桥之间使用DNAT和SNAT转发数据包.假设您的本地虚拟网桥是10.0.0.0/8,您的guest1是10.0.0.2,您需要这样: iptables -t nat -A PREROUTING --dst aaa.bbb.ccc.100 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.2 iptables -t nat -A PREROUTING --dst aaa.bbb.ccc.101 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.2 ... iptables -t nat -A POSTROUTING -p tcp --dst 10.0.0.2 -j SNAT --to-source aaa.bbb.ccc.100 请注意,您需要尽可能多的DNAT命令作为每个KVM访客的外部IP,但只有一个SNAT规则可以访问互联网.此外,只允许所需的端口,您只能允许HTTP / HTTPS / SSH流量.如果省略–dport语句,则将转发所有端口.除非您愿意托管DHCP服务器,否则您的KVM来宾应具有静态网络设置,并将KVM主机作为默认网关. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |