[root@aio ~(keystone_admin)]# neutron port-create a18c3985-535e-4d18-a49e-900912de5086 neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead. Created a new port: +-----------------------+--------------------------------------------------------------------------------------+ | Field | Value | +-----------------------+--------------------------------------------------------------------------------------+ | admin_state_up | True | | allowed_address_pairs | | | binding:host_id | | | binding:profile | {} | | binding:vif_details | {} | | binding:vif_type | unbound | | binding:vnic_type | normal | | created_at | 2018-08-08T09:40:21Z | | description | | | device_id | | | device_owner | | | extra_dhcp_opts | | | fixed_ips | {"subnet_id": "fbcf8e7a-89c8-4c74-a6ef-5178f8ab0ebd", "ip_address": "192.168.100.8"} | | id | f97f143d-9121-4a52-a898-850633cac943 | | mac_address | fa:16:3e:ee:d0:27 | | name | | | network_id | a18c3985-535e-4d18-a49e-900912de5086 | | port_security_enabled | True | | project_id | 4d885395e1b04f97a61f0288ef41e307 | | revision_number | 3 | | security_groups | 15915a82-919a-41b4-96d3-3cac6652079d | | status | DOWN | | tags | | | tenant_id | 4d885395e1b04f97a61f0288ef41e307 | | updated_at | 2018-08-08T09:40:22Z | +-----------------------+--------------------------------------------------------------------------------------+
将这个接口添加到虚拟机VFW上:
1 2 3 4 5 6 7 8
[root@aio ~(keystone_admin)]# nova interface-attach --port-id f97f143d-9121-4a52-a898-850633cac943 vfw [root@aio ~(keystone_admin)]# nova list +--------------------------------------+------+--------+------------+-------------+----------------------------------+ | ID | Name | Status | Task State | Power State | Networks | +--------------------------------------+------+--------+------------+-------------+----------------------------------+ | c7da7c30-fd95-4cb2-b412-45c911e320e5 | app1 | ACTIVE | - | Running | demo=10.10.10.9, 172.24.4.4 | | 2e0deaeb-d140-4d52-8289-efdc05267b52 | vfw | ACTIVE | - | Running | vfw=192.168.100.6, 192.168.100.8 | +--------------------------------------+------+--------+------------+-------------+----------------------------------+
登录到VFW虚拟机上,将虚拟机的两个网络接口串接起来模拟二层防火墙:
1 2 3 4 5 6
brctl addbr br0 brctl addif eth0 brctl addif eth1 brctl setageing br0 0 ip linkset up dev eth0 ip linkset up dev eth1
查看串接后的网桥:
1 2 3 4
[root@vfw ~]# brctl show bridge name bridge id STP enabled interfaces br0 8000.fa163e73c1de no eth0 eth1
接着回到OpenStack宿主机来操作, 找到VFW虚拟机的接口ID:
1 2 3
[root@aio ~(keystone_admin)]# neutron port-list |grep 192.168.100.6 neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead. | 2cdddce0-6533-4d2d-9214-1214e0b2375b | | 4d885395e1b04f97a61f0288ef41e307 | fa:16:3e:73:c1:de | {"subnet_id": "fbcf8e7a-89c8-4c74-a6ef-5178f8ab0ebd", "ip_address": "192.168.100.6"} |
查看VFW虚拟机接口在br-int上的VLAN tag ID, 可以看到VLAN TAG为4:
1 2 3 4 5 6 7 8 9 10 11
[root@aio ~]# ovs-vsctl show aef92bf7-dcdc-4b6f-9add-d30f929940ff ... Bridge br-int ... Port "qvo2cdddce0-65" tag: 4 Interface "qvo2cdddce0-65" ...
ovs_version: "2.9.0"
在br-int上创建一个虚拟接口vfw, 并将其VLAN TAG设置为4:
1 2
ovs-vsctl add-port br-int vfw -- set interface vfw type=internal ovs-vsctl set port vfw tag=4
创建连接VFW虚拟机出入接口的网桥:
1 2
ovs-vsctl add-br vfw-in ovs-vsctl add-br vfw-out
创建Fake vRouter的net namespace:
1
ip netns add qrouter-vfw
将br-int上的vfw, vfw-in, vfw-out三个接口都放入qrouter-vfw中:
1 2 3
ip linkset dev vfw netns qrouter-vfw ip linkset dev vfw-in netns qrouter-vfw ip linkset dev vfw-out netns qrouter-vfw
[root@aio ~(keystone_admin)]# ip a 1: lo: <LOOPBACK> mtu 65536 qdisc noop state DOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 26: vfw: <BROADCAST,MULTICAST> mtu 1450 qdisc noop state DOWN group default qlen 1000 link/ether a2:e9:b4:b5:63:a0 brd ff:ff:ff:ff:ff:ff 27: vfw-in: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 32:0f:41:6a:6e:43 brd ff:ff:ff:ff:ff:ff 28: vfw-out: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000 link/ether 3e:3c:59:c0:80:47 brd ff:ff:ff:ff:ff:ff
ip route add default via 100.100.100.101 dev vfw-in table 100
添加另一个路由表用于从vfw-out接口转发到vfw接口:
1
ip route add default via 192.168.100.1 dev vfw table 101
配置相应的路由规则:
1 2 3 4 5 6 7 8
[root@aio ~(keystone_admin)]# ip rule add iif vfw lookup 100 [root@aio ~(keystone_admin)]# ip rule add iif vfw-out lookup 101 [root@aio ~(keystone_admin)]# ip rule 0: from all lookup local 32764: from all iif vfw-out lookup 101 32765: from all iif vfw lookup 100 32766: from all lookup main 32767: from all lookup default
至此时,我们所有的配置就都完成了。
我们从外向内访问, 访问成功:
1 2 3 4 5 6 7 8
[root@aio ~]# ping 172.24.4.4 -c 2 PING 172.24.4.4 (172.24.4.4) 56(84) bytes of data. 64 bytes from 172.24.4.4: icmp_seq=1 ttl=60 time=3.07 ms 64 bytes from 172.24.4.4: icmp_seq=2 ttl=60 time=2.03 ms
--- 172.24.4.4 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1001ms rtt min/avg/max/mdev = 2.033/2.555/3.077/0.522 ms