云托付物理服务器 二次虚拟化网络配置

CHC 物理服务器不提供虚拟化方案,你需自行选用虚拟化方案。可参考这篇,实现虚拟机与主机间的网络互通。这篇采用网络配置方案如下:
虚拟机仅支持通过发送 GARP 绑定 DHCP IP 地址的方式与内网通信。

相关产品
云托付物理服务器 产品页,含版本规格、价格与购买入口。

一、申请 DHCP IP

在执行虚拟化方案前,请根据具体的 IP 地址需求申请 DHCP IP 地址,在安装虚拟机时将 DHCP IP 作为虚拟机的 IP 地址。申请步骤如下:

1. 进入 API Explorer 工具的 CreateDhcpIp 接口页面。

2. 根据实际情况输入 region、vpcid、subnetID、dhcpIpName、SecondaryPrivateIpAddressCount(个数)。如需了解输入参数含义,请参见 创建 DhcpIp。

3. 输入后单击发起调用,调用成功后请保存返回的响应结果。
如下所示,在本例中,调用 API 生成了一个 DHCP IP:10.99.0.5(即下图中 PrivateIpAddress 的值)。


注意:该接口不支持指定 IP 地址,只能由系统随机生成 DHCP IP。

二、发送 GARP 包

该步骤将 IP 地址绑定至虚拟机。这篇提供以下两种方式,你可按需选择其中一种即可:

方式1方式2

·操作对象
虚拟机。

·操作方式
发送如下 arping 指令:

arping -c 运行次数 -I 虚拟机的接口 -U dhcp ip

示例如下:

arping -c 1 -I eth0 -U 10.99.0.5

·特点:
无法指定 mac 地址,因此只能在虚拟机上执行。

·操作对象
虚拟机、宿主机。

·操作方式

·执行 arp.py 脚本,命令如下。执行10秒后,请通过 Ctrl + c 停止脚本。

python arp.py –iface 接口–src_mac 虚拟机mac –src_ip 虚拟机ip –dst_ip 虚拟机ip –dst_mac 虚拟机mac

示例如下:

python arp.py –iface eth0 –src_mac 28:6e:d4:89:91:cf –src_ip 10.27.8.155 –dst_ip 10.27.8.155 –dst_mac 28:6e:d4:89:91:cf

·特点:
需获取虚拟机的 mac 地址,且需有 Python 环境。

执行完成后,虚拟机与同 VPC 的其他主机即可正常通信。

三、查询 DHCP IP 是否绑定成功

发送 GARP 包后,可以通过接口自助查询是否绑定成功。步骤如下:

1. 进入 API Explorer 工具的 DescribeDhcpIps 接口页面。

2. 根据实际情况输入 region 及 DhcpIpIds。
其中,DhcpIpIds 请使用 申请 DHCP IP 步骤中获取的 PrivateIpAddress。

3. 单击发起调用,通过返回结果确认是否绑定成功。如需了解返回结果含义,请参见 查询 DhcpIp 列表。

四、虚拟机访问公网

若虚拟机需要访问公网,可以通过 DHCP IP 绑定 EIP 的方式实现。步骤如下:

1. 参见 申请 EIP,获取一个 EIP。

2. 进入 API Explorer 工具的 AssociateDhcpIpWithAddressIp 接口页面。

3. 根据实际情况输入 DHCP IP 及 EIP,发起调用后即可。

五、不支持热迁移

目前 CHC 物理服务器不支持用户的子机的热迁移,原因如下:

·子机上线需要发送 GARP,被网卡捕获上送控制面。子机迁移到另外一台 CHC 服务器后,无法主动发送 GARP。

·子机从一台 CHC 迁移到另外一台 CHC 时,源网卡上的相关会话不会同步到目标 CHC 网卡,会造成已有连接中断。

六、arp.py 脚本

#!/usr/bin/python# -*- coding: utf-8 -*-import socket, binascii,struct,os,subprocess,sys,threading,json,re,argparse,timeclass arping(): def __init__(self, iface): self.sock = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, ) self.sock.bind((iface, 0)) def arp_request(self, src_ip, src_mac, dst_ip, dst_mac): src_mac_addr = binascii.a2b_hex(src_mac.replace(':','')) dst_mac_addr = binascii.a2b_hex(dst_mac.replace(':','')) src_ip = socket.inet_aton(src_ip) dst_ip = socket.inet_aton(dst_ip) eth = "\\xff\\xff\\xff\\xff\\xff\\xff"+src_mac_addr+"\\x08\\x06"+ \\ "\\x00\\x01\\x08\\x00\\x06\\x04\\x00\\x01"+src_mac_addr+src_ip+dst_mac_addr+dst_ip self.sock.send(eth)if __name__ == '__main__': parser_t = argparse.ArgumentParser(description='arp_req') parser_t.add_argument('–iface', dest= 'iface', type=str, help='interface') parser_t.add_argument('–src_mac', dest= 'src_mac', type=str, help='source mac') parser_t.add_argument('–src_ip', dest= 'src_ip', type=str, help='source ip') parser_t.add_argument('–dst_mac', dest= 'dst_mac',type=str, help='destination mac') parser_t.add_argument('–dst_ip', dest= 'dst_ip', type=str, help='destination ip') args = parser_t.parse_args() while True: handler = arping(args.iface) handler.arp_request(args.src_ip, args.src_mac, args.dst_ip, args.dst_mac) time.sleep(10)

赞 (0)
上一篇 5天前
下一篇 5天前