允许VM拥有多个IP/MAC

来源:互联网 发布:店铺形象设计淘宝 编辑:程序博客网 时间:2024/05/21 13:56


场景

在Openstack中创建如上简单的网络,VM1和VM2属于default安全组。现在希望给VM1添加一个新的IP地址1.1.1.100,并且两个IP地址都能够用于与外界通信。

面临的问题

Neutron启用安全组时,会打开anti snoop功能,使VM的IP与 MAC进行绑定,这时新添加的IP不能与外界通信。

解决办法:

1. 在VM1中,添加新IP

sudoifconfig eth0:0  1.1.1.100/24

2. 在运行neutron-server的节点

1) 查看VM1的port-id:

neutron port-list| egrep "1.1.1.4"

     返回结果的第一栏为port id=2d3c8078-b23c-43e5-a14d-6e8c7eaecf0b

2) 在neutron-server上运行命令更新此端口

neutronport-update 2d3c8078-b23c-43e5-a14d-6e8c7eaecf0b --allowed-address-pairstype=dict list=true ip_address=1.1.1.100

3) 添加IP后,可以看到allowed_address_pairs的信息

neutronport-show 2d3c8078-b23c-43e5-a14d-6e8c7eaecf0b

   结果为:


此时,新添加的IP能够与外界通信。

附1:添加多IP的方式

需求:为VM添加四个IP 1.1.1.100  1.1.1.101  1.1.1.102  1.1.1.103

1.CLI方式

neutronport-update 2d3c8078-b23c-43e5-a14d-6e8c7eaecf0b --allowed-address-pairstype=dict list=true ip_address=1.1.1.100 ip_address=1.1.1.101ip_address=1.1.1.102 ip_address=1.1.1.103

或用API方式实现上述功能

1)获取token ID,用于下一步操作:

curl -ihttp://10.133.0.247:35357/v2.0/tokens -X POST -d '{"auth" : {"tenantName": "admin","passwordCredentials":{"username":"admin","password":"123"}}}'-H "Accept: application/json" -H "Content-Type:application/json"



2)使用如下API

curl-i http://10.133.0.247:9696/v2.0/ports/2d3c8078-b23c-43e5-a14d-6e8c7eaecf0b -XPUT -d '{"port" : {"allowed_address_pairs" : [{"ip_address":"1.1.1.100"},{"ip_address":"1.1.1.101"}, {"ip_address":"1.1.1.102"},{"ip_address":"1.1.1.103"} ]}}'  -H "X-Auth-Token: f7b0e4adfd9b469e934ce3c3b06d8052"-H "Accept: application/json" -H "Content-Type:application/json"

2.在VM1中添加四个IP地址后,这四个IP可以直接与外界通信。

sudoifconfig eth0:0  1.1.1.100/24

sudoifconfig eth0:1  1.1.1.101/24

sudoifconfig eth0:2  1.1.1.102/24

sudoifconfig eth0:3  1.1.1.103/24

附2:更换VM的MAC

说明:当前没有环境使得一个VM对应的port拥有多个网卡,来进行多MAC的尝试。因此下面只给出更换VM的MAC的实验。

需求:修改VM1的MAC地址,并且VM1仍然能够与外界通信。

1.CLI方式(注意:如果要更改MAC地址,必须指定对应的IP,此IP可以是一个新的IP,这里使用原始IP进行试验):

neutronport-update 2d3c8078-b23c-43e5-a14d-6e8c7eaecf0b --allowed-address-pairstype=dict list=true ip_address=1.1.1.4,mac_address=fa:16:3f:11:11:11

 或者API的方式:

curl-i http://10.133.0.247:9696/v2.0/ports/2d3c8078-b23c-43e5-a14d-6e8c7eaecf0b -XPUT -d '{"port" : {"allowed_address_pairs" : [{"ip_address":"1.1.1.4","mac_address":"fa:16:3f:11:11:11"}]}}' -H"X-Auth-Token: $token_id" -H "Accept: application/json" -H"Content-Type: application/json"

2.在VM1中修改MAC地址:

sudoip link set dev eth0 down

sudoip link set dev eth0 address fa:16:3f:11:11:11

sudoip link set dev eth0 up

VM1修改MAC地址后仍能够与外界通信。

附3:对VM放行所有IP

需求:给VM1添加任意的IP地址(选取三个192.168.100.1  10.0.0.1  172.16.0.5),使这些IP都能够与同子网下的VM2和不同子网下的VM3通信。

1. 在运行neutron-server的节点执行如下命令,放行所有IP

对于I版

neutronport-update 1f71d96e-8d93-4dcf-9673-67aeb4c4f68d --allowed-address-pairs type=dictlist=true ip_address=0.0.0.0/0

对于K版(不支持ip_address=0.0.0.0/0形式,执行上面的I版命令虽然不报错,但是iptables中的相应规则没有发生变化)

neutronport-update 1f71d96e-8d93-4dcf-9673-67aeb4c4f68d --allowed-address-pairstype=dict list=true ip_address=0.0.0.0/1 ip_address=128.0.0.0/1

 

2. 给VM1添加IP

sudoifconfig eth0:0 192.168.100.1

sudoifconfig eth0:1 10.0.0.1

sudoifconfig eth0:2 172.16.0.5

3. VM2如果想ping通VM1新添加的IP,需要在本地添加路由。

sudoroute add -net 192.168.100.0/24 dev eth0

sudoroute add -net 10.0.0.0/24 dev eth0

sudoroute add -net 172.16..0/24 dev eth0

4.VM3如果想ping通VM1新添加的IP,需要在网络节点上找到route的命名空间qrouter-ecc06269-41c0-4bed-a3c6-71f18e21230c,并添加路由。

ipnetns exec qrouter-ecc06269-41c0-4bed-a3c6-71f18e21230c route add -net192.168.100.0/24 dev qr-8eb7b70c-d0

ipnetns exec qrouter-ecc06269-41c0-4bed-a3c6-71f18e21230c route add -net 10.0.0.0/24dev qr-8eb7b70c-d0

ipnetns exec qrouter-ecc06269-41c0-4bed-a3c6-71f18e21230c route add -net172.16.0.0/24 dev qr-8eb7b70c-d0

0 0