1.基础知识
1.1 路由 (Routing)
1.1.1 路由策略 (使用 ip rule 命令操作路由策略数据库)
ip rule 命令:
- Usage: ip rule [ list | add | del ] SELECTOR ACTION (add 添加;del 删除; llist 列表)
- SELECTOR := [ from PREFIX 数据包源地址] [ to PREFIX 数据包目的地址] [ tos TOS 服务类型][ dev STRING 物理接口] [ pref NUMBER ] [fwmark MARK iptables 标签]
- ACTION := [ table TABLE_ID 指定所使用的路由表] [ nat ADDRESS 网络地址转换][ prohibit 丢弃该表| reject 拒绝该包| unreachable 丢弃该包]
- [ flowid CLASSID ]
- TABLE_ID := [ local | main | default | new | NUMBER ]
- ip rule add from 192.203.80/24 table inr.ruhep prio 220 通过路由表 inr.ruhep 路由来自源地址为192.203.80/24的数据包
- ip rule add from 193.233.7.83 nat 192.203.80.144 table 1 prio 320 把源地址为193.233.7.83的数据报的源地址转换为192.203.80.144,并通过表1进行路由
- 0 匹配任何条件 查询路由表local(ID 255) 路由表local是一个特殊的路由表,包含对于本地和广播地址的高优先级控制路由。rule 0非常特殊,不能被删除或者覆盖。
- 32766 匹配任何条件 查询路由表main(ID 254) 路由表main(ID 254)是一个通常的表,包含所有的无策略路由。系统管理员可以删除或者使用另外的规则覆盖这条规则。
- 32767 匹配任何条件 查询路由表default(ID 253) 路由表default(ID 253)是一个空表,它是为一些后续处理保留的。对于前面的缺省策略没有匹配到的数据包,系统使用这个策略进行处理。这个规则也可以删除。
1.1.2 路由表 (使用 ip route 命令操作静态路由表)
- 0#表: 系统保留表
- 253#表: defulte table 没特别指定的默认路由都放在改表
- 254#表: main table 没指明路由表的所有路由放在该表
- 255#表: locale table 保存本地接口地址,广播地址、NAT地址 由系统维护,用户不得更改
- ip route list table table_number
- ip route list table table_name
- ip route add default via 192.168.1.1 table 1 在一号表中添加默认路由为192.168.1.1
- ip route add 192.168.0.0/24 via 192.168.1.2 table 1 在一号表中添加一条到192.168.0.0网段的路由为192.168.1.2
1
2
3
4
5
6
7
8
9
|
Destination Netmask Gateway Interface Metric
0.0
.
0.0
0.0
.
0.0
192.1
68.1
23.2
54
192.1
68.1
23.8
8
1
#缺省路由,目的地址不在本路由表中的数据包,经过本机的 192.168.123.88 接口发到下一个路由器 192.168.123.254
127.0
.
0.0
255.0
.
0.0
127.0
.
0.1
127.0
.
0.1
1
#发给本机的网络包
192.1
68.1
23.0
255.2
55.2
55.0
192.1
68.1
23.6
8
192.1
68.1
23.6
8
1
#直连路由。目的地址为 192.168.123.0/24 的包发到本机 192.168.123.88 接口
192.1
68.1
23.8
8
255.2
55.2
55.2
55
127.0
.
0.1
127.0
.
0.1
1
#目的地址为 192.168.123.88的包是发给本机的包
192.1
68.1
23.2
55
255.2
55.2
55.2
55
192.1
68.1
23.8
8
192.1
68.1
23.8
8
1
#广播包的网段是 192.168.123.0/24,经过 192.168.123.88 接口发出去
224.0
.
0.0
224.0
.
0.0
192.1
68.1
23.8
8
192.1
68.1
23.8
8
1
#多播包,经过 192.168.123.88 接口发出去
255.2
55.2
55.2
55
255.2
55.2
55.2
55
192.1
68.1
23.6
8
192.1
68.1
23.6
8
1
#全网广播包
Default Gateway
:
192.1
68.1
23.2
54
|
- destination:目的网段
- mask:与网络目标地址相关联的网掩码(又称之为子网掩码)。子网掩码对于 IP 网络地址可以是一适当的子网掩码,对于主机路由是 255.255.255.255 ,对于默认路由是 0.0.0.0。如果忽略,则使用子网掩码 255.255.255.255。定义路由时由于目标地址和子网掩码之间的关系,目标地址不能比它对应的子网掩码更为详细。换句话说,如果子网掩码的一位是 0,则目标地址中的对应位就不能设置为 1。
- interface:到达该目的地的本路由器的出口ip
- gateway: 下一跳路由器入口的 ip,路由器通过 interface 和 gateway 定义一调到下一个路由器的链路。通常情况下,interface 和 gateway 是同一网段的metric 跳数,该条路由记录的质量,一般情况下,如果有多条到达相同目的地的路由记录,路由器会采用metric值小的那条路由
- 主机路由:机路由是路由选择表中指向单个IP地址或主机名的路由记录。主机路由的Flags字段为H。
1
2
3
|
Destination Gateway Genmask Flags Metric Ref Use Iface
----------- ------- ------- ----- ------ --- --- -----
10.0
.
0.1
0
192.1
68.1
.
1
255.2
55.2
55.2
55
UH
0
0
0
eth
0
|
- 网络路由:网络路由是代表主机可以到达的网络。网络路由的Flags字段为N。例如,在下面的示例中,本地主机将发送到网络192.19.12的数据包转发到IP地址为192.168.1.1的路由器。
1
2
3
|
Destination Gateway Genmask Flags Metric Ref Use Iface
----------- ------- ------- ----- ----- --- --- -----
192.1
9.1
2
192.1
68.1
.
1
255.2
55.2
55.0
UN
0
0
0
eth
0
|
- 默认路由:当主机不能在路由表中查找到目标主机的IP地址或网络路由时,数据包就被发送到默认路由(默认网关)上。默认路由的Flags字段为G。
1
2
3
|
Destination Gateway Genmask Flags Metric Ref Use Iface
----------- ------- ------- ----- ------ --- --- -----
default
192.1
68.1
.
1
0.0
.
0.0
UG
0
0
0
eth
0
|
- add : 添加一条路由规则,del : 删除一条路由规则,-net : 目的地址是一个网络,-host : 目的地址是一个主机,target : 目的网络或主机
- netmask : 目的地址的网络掩码,gw : 路由数据包通过的网关,dev : 为路由指定的网络接口
- route add 0.0.0.0 mask 0.0.0.0 192.168.12.1
- route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 metric 7
1.1.3 路由分类之静态路由
![](https://i-blog.csdnimg.cn/blog_migrate/acd2947d65425fc7618cdf9c29bf8ea9.jpeg)
- 计算机1 上:route add default gw 192.168.1.1
- 计算机2 上:route add default gw 192.168.3.1
- R1 上:ip route 192.168.3.0 255.255.255.0 f0/1 (意思为:目标网络地址为 192.168.3.0/24 的数据包,经过 f0/1 端口发出)
- R2 上:ip route 192.168.1.0 255.255.255.0 f0/1 (意思为:目标网络地址为 192.168.1.0/24 的数据包,经过 f0/1 端口发出)
- R1 上:ip route 192.168.3.0 255.255.255.0 192.168.2.2 (意思为:要去 192.168.3.0/24 的数据包,下一路由器 IP 地址为 192.168.2.2)
- R2 上:ip route 192.168.1.0 255.255.255.0 192.168.2.1
1.1.4 路由分类之动态路由
1.1.5 ip rule,ip route,iptables 三者之间的关系
- 首先要在网关服务器上添加一个默认路由,当然这个指向是绝大多数的IP的出口网关:ip route add default gw 20.0.0.1
- 之后通过 ip route 添加一个路由表:ip route add table 3 via 10.0.0.1 dev ethX (ethx 是 10.0.0.1 所在的网卡, 3 是路由表的编号)
- 之后添加 ip rule 规则:ip rule add fwmark 3 table 3 (fwmark 3 是标记,table 3 是路由表3 上边。 意思就是凡事标记了 3 的数据使用 table3 路由表)
- 之后使用 iptables 给相应的数据打上标记:iptables -A PREROUTING -t mangle -i eth0 -s 192.168.0.1 - 192.168.0.100 -j MARK --set-mark 3
![](http://www.aboutyun.com/data/attachment/forum/201601/04/144032plb8xwlitzilfzi8.jpg)
1.1.6 Traceroute 工具
- 命令格式:traceroute [参数] [主机]
- 命令功能:traceroute 指令让你追踪网络数据包的路由途径,预设数据包大小是 40Bytes,用户可另行设置。
- 具体参数格式:traceroute [-dFlnrvx][-f<存活数值>][-g<网关>...][-i<网络界面>][-m<存活数值>][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小]
- 命令参数:
- -d 使用Socket层级的排错功能,-f 设置第一个检测数据包的存活数值TTL的大小,-F 设置勿离断位,-g 设置来源路由网关,最多可设置8个,-i 使用指定的网络界面送出数据包,-I 使用ICMP回应取代UDP资料信息,-m 设置检测数据包的最大存活数值TTL的大小,-n 直接使用IP地址而非主机名称。
- -p 设置UDP传输协议的通信端口,-r 忽略普通的Routing Table,直接将数据包送到远端主机上,-s 设置本地主机送出数据包的IP地址,-t 设置检测数据包的TOS数值。
- -v 详细显示指令的执行过程,-w 设置等待远端主机回报的时间,-x 开启或关闭数据包的正确性检验。
01
02
03
04
05
06
07
08
09
10
11
12
|
[root@localhost ~]
# traceroute www.baidu.com
traceroute
to
www.baidu.com
(
61.1
35.1
69.1
25
)
,
30
hops max
,
40
byte packets
1
192.1
68.7
4.2
(
192.1
68.7
4.2
)
2.6
06
ms
2.7
71
ms
2.9
50
ms
2
211.1
51.5
6.5
7
(
211.1
51.5
6.5
7
)
0.5
96
ms
0.5
98
ms
0.5
91
ms
3
211.1
51.2
27.2
06
(
211.1
51.2
27.2
06
)
0.5
46
ms
0.5
44
ms
0.5
38
ms
4
210.7
7.1
39.1
45
(
210.7
7.1
39.1
45
)
0.7
10
ms
0.7
48
ms
0.8
01
ms
5
202.1
06.4
2.1
01
(
202.1
06.4
2.1
01
)
6.7
59
ms
6.9
45
ms
7.1
07
ms
6
61.1
48.1
54.9
7
(
61.1
48.1
54.9
7
)
718.9
08
ms
*
bt
-228
-025.
bta.net.cn
(
202.1
06.2
28.2
5
)
5.1
77
ms
7
124.6
5.5
8.2
13
(
124.6
5.5
8.2
13
)
4.3
43
ms
4.3
36
ms
4.3
67
ms
8
202.1
06.3
5.1
90
(
202.1
06.3
5.1
90
)
1.7
95
ms
61.1
48.1
56.1
38
(
61.1
48.1
56.1
38
)
1.8
99
ms
1.9
51
ms
9
*
*
*
30
*
*
*
|
- 记录按序列号从1开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是 ms,其实就是 -q 的默认参数。
- 探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果您用 traceroute -q 4 www.58.com ,表示向每个网关发送4个数据包。
- 有时我们 traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP 的返回信息,所以我们得不到什么相关的数据包返回数据。
- 有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台 DNS 出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您可以加-n 参数来避免DNS解析,以IP格式输出数据。
- 如果在局域网中的不同网段之间,我们可以通过 traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。
- 首先,traceroute 送出一个 TTL 是 1 的 IP datagram(其实,每次送出的为3个40字节的包,包括源地址,目的地址和包发出的时间标签)到目的地,当路径上的第一个路由器(router)收到这个datagram 时,它将TTL减1。此时,TTL变为0了,所以该路由器会将此 datagram 丢掉,并送回一个「ICMP time exceeded」消息(包括发IP包的源地址,IP包的所有内容及路由器的IP地址),traceroute 收到这个消息后,便知道这个路由器存在于这个路径上。
- 接着,traceroute 再送出另一个TTL 是 2 的datagram,发现第2 个路由器......
- 然后,traceroute 每次将送出的 datagram 的 TTL 加1来发现另一个路由器,这个重复的动作一直持续到某个datagram 抵达目的地。当datagram到达目的地后,该主机并不会送回ICMP time exceeded消息,因为它已是目的地了,那么traceroute如何得知目的地到达了呢?
2. Neutron 的传统和 DVR Router
2.1 传统(Legacy) Router
![](https://i-blog.csdnimg.cn/blog_migrate/122a73ebd240689d8f52ce9767381329.jpeg)
2.2 DVR 对 L3 Agent 的影响
![](https://i-blog.csdnimg.cn/blog_migrate/846f01f03e33707be1546b7ca556e973.png)
- 网络节点:提供 南-北 SNAT,即在不使用浮动 IP 时,虚机访问外网的网络得经过网络节点。也就是说,网络节点依然必须走传统的 HA 解决方法,比如 VRRP 和 PeaceMaker。但可惜的是,Juno 版本不支持同时使用 HA 和 DVR。
- 计算节点:提供 南-北 DNAT, 即外网访问虚机的网络流量得经过计算节点;以及 东-西 转发,即虚机之间的网络经过计算节点。因为所有计算节点的参与,这部分的网络处理负载也就自然地被均衡了。
2.3 DVR 对 L2 Agent 的影响
- DVR 新创建安的各个 network namespace 需要被 plug 到 OVS bridge
- OVS flows 需要更新来支持 DVR
3. 安装和功能分析
3.1 安装和配置
- 使用 ML2 plugin
- 使用 L2pop mechanism driver
- 使用 Openvswitch mechanism driver, 安装 OVS agent 在所有的计算节点上
- 所有的计算节点连接外网
- Juno 中只支持 Tunnel 虚拟网络模式 (VXLAN or GRE)。 Kilo 版本中会增加 VLAN 模式的支持。
3.1.1 安装
1
2
3
4
5
|
root@compute
2
:
/
var
/
log
/
nova
# vi /etc/sysctl.conf
root@compute
2
:
/
var
/
log
/
nova
# sysctl -p
net.ipv
4.
ip_forward
=
1
net.ipv
4.
conf.all.rp_filter
=
0
net.ipv
4.
conf.default.rp_filter
=
0
|
1
2
3
|
interface_driver
=
neutron.agent.linux.interface.OVSInterfaceDriver
use_namespaces
=
True
external_network_bridge
=
br
-
eth
3
|
3.1.2 配置 DVR
控制节点 | /etc/neutron/neutron.conf | router_distributed = True | 注意:需要设置 l3_ha = false 来禁用 VRRP |
计算节点 |
/etc/neutron/l3_agent.ini
/etc/neutron/plugins/ml2/ml2_conf.ini
|
agent_mode = dvr
enable_distributed_routing = True
| |
网络节点 |
/etc/neutron/l3_agent.ini
/etc/neutron/plugins/ml2/ml2_conf.ini
|
agent_mode = dvr_snat
enable_distributed_routing = True
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
|
s
1
@controller
:
~$ neutron agent
-
list
+
--------------------------------------+--------------------+----------+-------+----------------+---------------------------+
|
id
| agent_type | host | alive | admin_state_up | binary |
+
--------------------------------------+--------------------+----------+-------+----------------+---------------------------+
|
04
c
360
d
0
-3066
-4
f
04
-9
af
2
-
d
4
ef
8586
ad
2
b | L
3
agent | network |
:
-
)
| True | neutron
-
l
3
-
agent |
|
2
ef
04905
-4
a
37
-4
de
8
-
a
8
f
0
-9
c
6488
a
592
b
7
| Open vSwitch agent | network |
:
-
)
| True | neutron
-
openvswitch
-
agent |
|
3
f
307355
-2167
-4
b
15
-
affa
-9
f
296
f
698752
| DHCP agent | network |
:
-
)
| True | neutron
-
dhcp
-
agent |
|
54609006
-
a
769
-4
b
17
-
b
175
-1
a
834
e
6
e
7
a
26
| Open vSwitch agent | compute
1
|
:
-
)
| True | neutron
-
openvswitch
-
agent |
|
90
c
87
c
01
-1
cd
1
-48
b
0
-8369
-30
f
44
c
058574
| Loadbalancer agent | network |
:
-
)
| True | neutron
-
lbaas
-
agent |
|
951
b
8
efc
-1
f
2
c
-4
a
51
-84
d
1
-2261
ff
31
c
12
c | Metadata agent | compute
2
|
:
-
)
| True | neutron
-
metadata
-
agent |
|
99
d
13
b
27
-89
f
8
-4
abe
-
bc
03
-3
f
69
f
5
e
7
e
0
cc | Metadata agent | network |
:
-
)
| True | neutron
-
metadata
-
agent |
| aa
8
cf
021
-7
f
3
d
-4667
-9
d
92
-4
d
77
d
4
c
4
fb
59
| L
3
agent | compute
2
|
:
-
)
| True | neutron
-
l
3
-
agent |
| beec
232
b
-48
d
7
-4424
-83
e
2
-8
cc
4
e
49
ec
339
| L
3
agent | compute
1
|
:
-
)
| True | neutron
-
l
3
-
agent |
| d
65
bbede
-4
b
1
d
-4914
-8
c
8
b
-
ab
591975828
f | Metadata agent | compute
1
|
:
-
)
| True | neutron
-
metadata
-
agent |
| e
3
f
83
dcf
-27
f
2
-4
c
91
-
bead
-
adebcab
1
e
3
c
7
| Open vSwitch agent | compute
2
|
:
-
)
| True | neutron
-
openvswitch
-
agent |
+
--------------------------------------+--------------------+----------+-------+----------------+---------------------------+
|
3.2 DVR Router 流程
3.2.1 创建 DVR Router
![](https://i-blog.csdnimg.cn/blog_migrate/966581e4d7bc5d7d33233fedf8d3b4af.jpeg)
1
2
3
4
5
6
7
|
s
1
@controller
:
~$ neutron l
3
-
agent
-
list
-
hosting
-
router dvr
-
r
1
+
--------------------------------------+----------+----------------+-------+
|
id
| host | admin_state_up | alive |
+
--------------------------------------+----------+----------------+-------+
|
04
c
360
d
0
-3066
-4
f
04
-9
af
2
-
d
4
ef
8586
ad
2
b | network | True |
:
-
)
|
| beec
232
b
-48
d
7
-4424
-83
e
2
-8
cc
4
e
49
ec
339
| compute
1
| True |
:
-
)
|
+
--------------------------------------+----------+----------------+-------+
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
root@network
:
/
home
/
s
1
# ip netns exec snat-e8f12f7a-6938-4e65-88c4-97e4cb211b27 ip addr
42
:
qg
-32878
e
35
-
a
2
:
<
BROADCAST
,
UP
,
LOWER_UP
>
mtu
1500
qdisc noqueue
state
UNKNOWN
group
default
#对应 port 1,连接外网
link
/
ether fa
:
16
:
3
e
:
4
a
:
40
:
48
brd ff
:
ff
:
ff
:
ff
:
ff
:
ff
inet
192.1
68.1
.
115
/
24
brd
192.1
68.1
.
255
scope
global
qg
-32878
e
35
-
a
2
valid_lft forever preferred_lft forever
44
:
sg
-4
f
80
ec
3
d
-
f
2
:
<
BROADCAST
,
UP
,
LOWER_UP
>
mtu
1500
qdisc noqueue
state
UNKNOWN
group
default
#对应 port 2,连接内网1
link
/
ether fa
:
16
:
3
e
:
82
:
a
9
:
ca brd ff
:
ff
:
ff
:
ff
:
ff
:
ff
inet
81.1
.
180.1
7
/
24
brd
81.1
.
180.2
55
scope
global
sg
-4
f
80
ec
3
d
-
f
2
valid_lft forever preferred_lft forever
46
:
sg
-6
c
01
abc
3
-5
d
:
<
BROADCAST
,
UP
,
LOWER_UP
>
mtu
1500
qdisc noqueue
state
UNKNOWN
group
default
#对应 port 4,连接内网2
link
/
ether fa
:
16
:
3
e
:
47
:
55
:
00
brd ff
:
ff
:
ff
:
ff
:
ff
:
ff
inet
91.1
.
180.1
6
/
24
brd
91.1
.
180.2
55
scope
global
sg
-6
c
01
abc
3
-5
d
valid_lft forever preferred_lft forever
root@network
:
/
home
/
s
1
# ip netns exec snat-e8f12f7a-6938-4e65-88c4-97e4cb211b27 iptables -t nat -S
-
A POSTROUTING
-
j neutron
-
l
3
-
agent
-
POSTROUTING
-
A POSTROUTING
-
j neutron
-
postrouting
-
bottom
-
A neutron
-
l
3
-
agent
-
POSTROUTING !
-
i qg
-32878
e
35
-
a
2
!
-
o qg
-32878
e
35
-
a
2
-
m conntrack !
--ctstate DNAT -j ACCEPT
-
A neutron
-
l
3
-
agent
-
snat
-
s
81.1
.
180.0
/
24
-
j SNAT
--to-source 192.168.1.115
-
A neutron
-
l
3
-
agent
-
snat
-
s
91.1
.
180.0
/
24
-
j SNAT
--to-source 192.168.1.115
-
A neutron
-
postrouting
-
bottom
-
j neutron
-
l
3
-
agent
-
snat
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
root@network
:
/
home
/
s
1
# ip netns exec qrouter-e8f12f7a-6938-4e65-88c4-97e4cb211b27 ip addr
43
:
qr
-517
bdba
3
-
b
1
:
<
BROADCAST
,
UP
,
LOWER_UP
>
mtu
1500
qdisc noqueue
state
UNKNOWN
group
default
#对应 port 3
link
/
ether fa
:
16
:
3
e
:
63
:
3
b
:
4
c brd ff
:
ff
:
ff
:
ff
:
ff
:
ff
inet
81.1
.
180.1
/
24
brd
81.1
.
180.2
55
scope
global
qr
-517
bdba
3
-
b
1
valid_lft forever preferred_lft forever
45
:
qr
-
e
47
fca
31
-
db
:
<
BROADCAST
,
UP
,
LOWER_UP
>
mtu
1500
qdisc noqueue
state
UNKNOWN
group
default
#对应 port 5
link
/
ether fa
:
16
:
3
e
:
a
9
:
da
:
b
5
brd ff
:
ff
:
ff
:
ff
:
ff
:
ff
inet
91.1
.
180.1
/
24
brd
91.1
.
180.2
55
scope
global
qr
-
e
47
fca
31
-
db
valid_lft forever preferred_lft forever
root@network
:
/
home
/
s
1
# ip netns exec qrouter-e8f12f7a-6938-4e65-88c4-97e4cb211b27 iptables -t nat -S
-
A neutron
-
l
3
-
agent
-
PREROUTING
-
d
169.2
54.1
69.2
54
/
32
-
p tcp
-
m tcp
--dport 80 -j REDIRECT --to-ports 9697
-
A neutron
-
l
3
-
agent
-
snat
-
j neutron
-
l
3
-
agent
-
float
-
snat
-
A neutron
-
postrouting
-
bottom
-
j neutron
-
l
3
-
agent
-
snat
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
root@compute
1
:
/
home
/
s
1
# ip netns exec qrouter-e8f12f7a-6938-4e65-88c4-97e4cb211b27 ip addr
29
:
qr
-517
bdba
3
-
b
1
:
<
BROADCAST
,
UP
,
LOWER_UP
>
mtu
1500
qdisc noqueue
state
UNKNOWN
group
default
#对应 port 3,作为 81.1.180.1/24 网段内的虚机的默认网关
link
/
ether fa
:
16
:
3
e
:
63
:
3
b
:
4
c brd ff
:
ff
:
ff
:
ff
:
ff
:
ff
inet
81.1
.
180.1
/
24
brd
81.1
.
180.2
55
scope
global
qr
-517
bdba
3
-
b
1
valid_lft forever preferred_lft forever
inet
6
fe
80
:
:
f
816
:
3
eff
:
fe
63
:
3
b
4
c
/
64
scope link
valid_lft forever preferred_lft forever
31
:
qr
-
e
47
fca
31
-
db
:
<
BROADCAST
,
UP
,
LOWER_UP
>
mtu
1500
qdisc noqueue
state
UNKNOWN
group
default
#对应 port 5,作为 91.1.180.1/24 网段内的虚机的默认网关
link
/
ether fa
:
16
:
3
e
:
a
9
:
da
:
b
5
brd ff
:
ff
:
ff
:
ff
:
ff
:
ff
inet
91.1
.
180.1
/
24
brd
91.1
.
180.2
55
scope
global
qr
-
e
47
fca
31
-
db
valid_lft forever preferred_lft forever
inet
6
fe
80
:
:
f
816
:
3
eff
:
fea
9
:
dab
5
/
64
scope link
valid_lft forever preferred_lft forever
root@compute
1
:
/
home
/
s
1
# ip netns exec qrouter-e8f12f7a-6938-4e65-88c4-97e4cb211b27 iptables -t nat -S
-
A neutron
-
l
3
-
agent
-
PREROUTING
-
d
169.2
54.1
69.2
54
/
32
-
p tcp
-
m tcp
--dport 80 -j REDIRECT --to-ports 9697
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
|
root@compute
1
:
/
home
/
s
1
# ip netns exec fip-557e9f0c-9c66-46da-b289-218d49c218d2 ip addr
2
:
fpr
-
e
8
f
12
f
7
a
-6
:
<
BROADCAST
,
MULTICAST
,
UP
,
LOWER_UP
>
mtu
1500
qdisc pfifo_fast
state
UP
group
default qlen
1000
#该 port 和 qrouter 中的 rpf port 是一对 veth pair,各自配置了自己的 IP 地址
link
/
ether
9
a
:
d
0
:
23
:
ba
:
d
2
:
02
brd ff
:
ff
:
ff
:
ff
:
ff
:
ff
inet
169.2
54.3
1.2
9
/
31
scope
global
fpr
-
e
8
f
12
f
7
a
-6
valid_lft forever preferred_lft forever
inet
6
fe
80
:
:
98
d
0
:
23
ff
:
feba
:
d
202
/
64
scope link
valid_lft forever preferred_lft forever
32
:
fg
-9
eeb
3
fb
1
-25
:
<
BROADCAST
,
UP
,
LOWER_UP
>
mtu
1500
qdisc noqueue
state
UNKNOWN
group
default
link
/
ether fa
:
16
:
3
e
:
22
:
2
d
:
90
brd ff
:
ff
:
ff
:
ff
:
ff
:
ff
inet
192.1
68.1
.
117
/
24
brd
192.1
68.1
.
255
scope
global
fg
-9
eeb
3
fb
1
-25
valid_lft forever preferred_lft forever
inet
6
fe
80
:
:
f
816
:
3
eff
:
fe
22
:
2
d
90
/
64
scope link
valid_lft forever preferred_lft forever
root@compute
1
:
/
home
/
s
1
# ip netns exec fip-557e9f0c-9c66-46da-b289-218d49c218d2 ip route
default via
192.1
68.1
.
1
dev fg
-9
eeb
3
fb
1
-25
169.2
54.3
1.2
8
/
31
dev fpr
-
e
8
f
12
f
7
a
-6
proto kernel scope link src
169.2
54.3
1.2
9
192.1
68.1
.
0
/
24
dev fg
-9
eeb
3
fb
1
-25
proto kernel scope link src
192.1
68.1
.
117
192.1
68.1
.
116
via
169.2
54.3
1.2
8
dev fpr
-
e
8
f
12
f
7
a
-6
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
root@compute
1
:
/
home
/
s
1
# ip netns exec qrouter-e8f12f7a-6938-4e65-88c4-97e4cb211b27 ip addr
2
:
rfp
-
e
8
f
12
f
7
a
-6
:
<
BROADCAST
,
MULTICAST
,
UP
,
LOWER_UP
>
mtu
1500
qdisc pfifo_fast
state
UP
group
default qlen
1000
#该 port 和 fip 中的 pfr port 是一对 veth,各自配置了自己的 IP 地址,该地址来自 169.254.x.y 网段
link
/
ether
42
:
81
:
66
:
11
:
60
:
66
brd ff
:
ff
:
ff
:
ff
:
ff
:
ff
inet
169.2
54.3
1.2
8
/
31
scope
global
rfp
-
e
8
f
12
f
7
a
-6
valid_lft forever preferred_lft forever
inet
192.1
68.1
.
116
/
32
brd
192.1
68.1
.
116
scope
global
rfp
-
e
8
f
12
f
7
a
-6
valid_lft forever preferred_lft forever
NAP iptables 规则:
-
A neutron
-
l
3
-
agent
-
OUTPUT
-
d
192.1
68.1
.
116
/
32
-
j DNAT
--to-destination 81.1.180.18
-
A neutron
-
l
3
-
agent
-
POSTROUTING !
-
i rfp
-
e
8
f
12
f
7
a
-6
!
-
o rfp
-
e
8
f
12
f
7
a
-6
-
m conntrack !
--ctstate DNAT -j ACCEPT
-
A neutron
-
l
3
-
agent
-
PREROUTING
-
d
169.2
54.1
69.2
54
/
32
-
p tcp
-
m tcp
--dport 80 -j REDIRECT --to-ports 9697
-
A neutron
-
l
3
-
agent
-
PREROUTING
-
d
192.1
68.1
.
116
/
32
-
j DNAT
--to-destination 81.1.180.18
-
A neutron
-
l
3
-
agent
-
float
-
snat
-
s
81.1
.
180.1
8
/
32
-
j SNAT
--to-source 192.168.1.116
|
3.2 网络包走向分析
- 3.2.1 SNAT:当数据包离开 rouer 的 external device 时改变它的源 IP 地址。这在没有浮动IP 时虚机访问外网的情况下使用。
- 3.2.2/3 FIP:有时候也称为 DNAT。当虚机的固定 IP分配了浮动 IP 的时候,虚机和外网中的虚机通信的时候使用。
- 3.2.4 不同服务器上不同网段内的虚机之间的通信
- 3.2.5 同一个服务器上不同网段内的虚机之间的通信
3.2.1 SNAT:虚机访问外网(没有分配浮动IP 的情况下)
![](https://i-blog.csdnimg.cn/blog_migrate/99783381a7035e94321ee56d4d5a1056.jpeg)
1
2
3
4
5
6
7
8
9
|
root@compute
1
:
/
home
/
s
1
# ip netns exec qrouter-e8f12f7a-6938-4e65-88c4-97e4cb211b27 ip rule
0
:
from
all lookup
local
32766
:
from
all lookup
main
32767
:
from
all lookup default
1359066113
:
from
81.1
.
180.1
/
24
lookup
1359066113
1526838273
:
from
91.1
.
180.1
/
24
lookup
1526838273
root@compute
1
:
/
home
/
s
1
# ip netns exec qrouter-e8f12f7a-6938-4e65-88c4-97e4cb211b27 ip route list table 1359066113 #只有一个默认路由
default via
81.1
.
180.1
7
dev qr
-517
bdba
3
-
b
1
#经过 qr 端口发到下一个路由器 81.1.180.17
|
1
2
3
4
5
|
root@network
:
/
home
/
s
1
# ip netns exec snat-e8f12f7a-6938-4e65-88c4-97e4cb211b27 iptables -t nat -S
-
A neutron
-
l
3
-
agent
-
POSTROUTING !
-
i qg
-32878
e
35
-
a
2
!
-
o qg
-32878
e
35
-
a
2
-
m conntrack !
--ctstate DNAT -j ACCEPT
-
A neutron
-
l
3
-
agent
-
snat
-
s
81.1
.
180.0
/
24
-
j SNAT
--to-source 192.168.1.115 # 命中这条,把网络包的 Src IP 修改为 192.168.1.115
-
A neutron
-
l
3
-
agent
-
snat
-
s
91.1
.
180.0
/
24
-
j SNAT
--to-source 192.168.1.115
-
A neutron
-
postrouting
-
bottom
-
j neutron
-
l
3
-
agent
-
snat
|
01
02
03
04
05
06
07
08
09
10
|
root@network
:
/
home
/
s
1
# ip netns exec snat-e8f12f7a-6938-4e65-88c4-97e4cb211b27 ip rule show #这里没定义额外的路由策略,直接查 main 路由表
0
:
from
all lookup
local
32766
:
from
all lookup
main
32767
:
from
all lookup default
root@network
:
/
home
/
s
1
# ip netns exec snat-e8f12f7a-6938-4e65-88c4-97e4cb211b27 ip route list table main
default via
192.1
68.1
.
1
dev qg
-32878
e
35
-
a
2
81.1
.
180.0
/
24
dev sg
-4
f
80
ec
3
d
-
f
2
proto kernel scope link src
81.1
.
180.1
7
91.1
.
180.0
/
24
dev sg
-6
c
01
abc
3
-5
d proto kernel scope link src
91.1
.
180.1
6
192.1
68.1
.
0
/
24
dev qg
-32878
e
35
-
a
2
proto kernel scope link src
192.1
68.1
.
115
#根据目的地址,命中这条,网络包从 qg 端口发出
|
![](https://i-blog.csdnimg.cn/blog_migrate/e0867c0957956d1d13a36fabe22d0352.jpeg)
![](http://www.aboutyun.com/data/attachment/forum/201601/04/144035mcmeh5mzw57f5j99.jpg)
3.2.2 FIP:在虚机 81.1.180.18 上添加浮动IP,从它 ping 外网
![](https://i-blog.csdnimg.cn/blog_migrate/22b8c7c342e20cdae3fa6bdfd0a87f1e.jpeg)
1
2
3
4
5
6
7
|
root@compute
1
:
/
home
/
s
1
# ip netns exec qrouter-e8f12f7a-6938-4e65-88c4-97e4cb211b27 ip addr
3
:
rfp
-
e
8
f
12
f
7
a
-6
:
<
BROADCAST
,
MULTICAST
,
UP
,
LOWER_UP
>
mtu
1500
qdisc pfifo_fast
state
UP
group
default qlen
1000
link
/
ether
46
:
ef
:
97
:
f
4
:
4
d
:
ff brd ff
:
ff
:
ff
:
ff
:
ff
:
ff
inet
169.2
54.3
1.2
38
/
31
scope
global
rfp
-
e
8
f
12
f
7
a
-6
valid_lft forever preferred_lft forever
inet
192.1
68.1
.
112
/
32
brd
192.1
68.1
.
112
scope
global
rfp
-
e
8
f
12
f
7
a
-6
valid_lft forever preferred_lft forever
|
1
2
3
4
5
6
7
|
root@compute
1
:
/
home
/
s
1
# ip netns exec qrouter-e8f12f7a-6938-4e65-88c4-97e4cb211b27 ip rule
0
:
from
all lookup
local
32766
:
from
all lookup
main
32767
:
from
all lookup default
32769
:
from
81.1
.
180.1
8
lookup
16
#每个固定 IP 对应一条路由策略,都查 ID 为 16 的路由表
root@compute
1
:
/
home
/
s
1
# ip netns exec qrouter-e8f12f7a-6938-4e65-88c4-97e4cb211b27 ip route list table 16
default via
169.2
54.3
1.2
39
dev rfp
-
e
8
f
12
f
7
a
-6
|
1
2
3
4
5
6
|
3
:
rfp
-
e
8
f
12
f
7
a
-6
:
<
BROADCAST
,
MULTICAST
,
UP
,
LOWER_UP
>
mtu
1500
qdisc pfifo_fast
state
UP
group
default qlen
1000
link
/
ether
46
:
ef
:
97
:
f
4
:
4
d
:
ff brd ff
:
ff
:
ff
:
ff
:
ff
:
ff
inet
169.2
54.3
1.2
38
/
31
scope
global
rfp
-
e
8
f
12
f
7
a
-6
valid_lft forever preferred_lft forever
inet
192.1
68.1
.
112
/
32
brd
192.1
68.1
.
112
scope
global
rfp
-
e
8
f
12
f
7
a
-6
valid_lft forever preferred_lft forever
|
1
2
3
4
5
|
root@compute
1
:
/
home
/
s
1
# ip netns exec fip-557e9f0c-9c66-46da-b289-218d49c218d2 ip addr2:
fpr
-
e
8
f
12
f
7
a
-6
:
<
BROADCAST
,
MULTICAST
,
UP
,
LOWER_UP
>
mtu
1500
qdisc pfifo_fast
state
UP
group
default qlen
1000
link
/
ether
9
a
:
4
d
:
66
:
1
c
:
b
5
:
2
b brd ff
:
ff
:
ff
:
ff
:
ff
:
ff
inet
169.2
54.3
1.2
39
/
31
scope
global
fpr
-
e
8
f
12
f
7
a
-6
valid_lft forever preferred_lft forever
|
1
2
3
4
5
|
root@compute
1
:
/
home
/
s
1
# ip netns exec fip-557e9f0c-9c66-46da-b289-218d49c218d2 ip route
default via
192.1
68.1
.
1
dev fg
-4
a
292
fe
1
-58
169.2
54.3
1.2
38
/
31
dev fpr
-
e
8
f
12
f
7
a
-6
proto kernel scope link src
169.2
54.3
1.2
39
192.1
68.1
.
0
/
24
dev fg
-4
a
292
fe
1
-58
proto kernel scope link src
192.1
68.1
.
118
192.1
68.1
.
112
via
169.2
54.3
1.2
38
dev fpr
-
e
8
f
12
f
7
a
-6
|
![](http://www.aboutyun.com/data/attachment/forum/201601/04/144035piivkdyffovdyygo.jpg)
![](https://i-blog.csdnimg.cn/blog_migrate/6f206713c2fdc10e554ea3e80776d21f.jpeg)
3.2.3 FIP:外网机器通过虚机的浮动 IP 访问虚机
1
2
3
4
5
6
|
root@compute
1
:
/
home
/
s
1
# ip netns exec fip-557e9f0c-9c66-46da-b289-218d49c218d2 sysctl net.ipv4.conf.fg-4a292fe1-58.proxy_arp
net.ipv
4.
conf.fg
-4
a
292
fe
1
-58.
proxy_arp
=
1
而 qrouter 的 interface 没有设置 arp proxy:
root@compute
1
:
/
home
/
s
1
# ip netns exec qrouter-e8f12f7a-6938-4e65-88c4-97e4cb211b27 sysctl net.ipv4.conf.rfp-e8f12f7a-6.proxy_arp
net.ipv
4.
conf.rfp
-
e
8
f
12
f
7
a
-6.
proxy_arp
=
0
|
1
2
3
4
5
6
7
|
root@compute
1
:
/
home
/
s
1
# ip netns exec fip-557e9f0c-9c66-46da-b289-218d49c218d2 ip route
default via
192.1
68.1
.
1
dev fg
-4
a
292
fe
1
-58
169.2
54.3
1.2
38
/
31
dev fpr
-
e
8
f
12
f
7
a
-6
proto kernel scope link src
169.2
54.3
1.2
39
192.1
68.1
.
0
/
24
dev fg
-4
a
292
fe
1
-58
proto kernel scope link src
192.1
68.1
.
118
192.1
68.1
.
112
via
169.2
54.3
1.2
38
dev fpr
-
e
8
f
12
f
7
a
-6
17
:
38
:
41.4
62365
9
a
:
4
d
:
66
:
1
c
:
b
5
:
2
b
>
46
:
ef
:
97
:
f
4
:
4
d
:
ff
,
ethertype IPv
4
(
0
x
0800
)
,
length
98
:
(
tos
0
x
0
,
flags [DF]
,
proto ICMP
(
1
)
,
length
84
)
192.1
68.1
.
20
>
192.1
68.1
.
112
:
ICMP echo request
,
id
3138
,
seq
180
,
length
64
|
1
2
3
4
5
6
|
3
:
rfp
-
e
8
f
12
f
7
a
-6
:
<
BROADCAST
,
MULTICAST
,
UP
,
LOWER_UP
>
mtu
1500
qdisc pfifo_fast
state
UP
group
default qlen
1000
link
/
ether
46
:
ef
:
97
:
f
4
:
4
d
:
ff brd ff
:
ff
:
ff
:
ff
:
ff
:
ff
inet
169.2
54.3
1.2
38
/
31
scope
global
rfp
-
e
8
f
12
f
7
a
-6
valid_lft forever preferred_lft forever
inet
192.1
68.1
.
112
/
32
brd
192.1
68.1
.
112
scope
global
rfp
-
e
8
f
12
f
7
a
-6
valid_lft forever preferred_lft forever
|
1
2
3
4
5
6
|
root@compute
1
:
/
home
/
s
1
# ip netns exec qrouter-e8f12f7a-6938-4e65-88c4-97e4cb211b27 ip route
81.1
.
180.0
/
24
dev qr
-517
bdba
3
-
b
1
proto kernel scope link src
81.1
.
180.1
91.1
.
180.0
/
24
dev qr
-
e
47
fca
31
-
db proto kernel scope link src
91.1
.
180.1
169.2
54.3
1.2
38
/
31
dev rfp
-
e
8
f
12
f
7
a
-6
proto kernel scope link src
169.2
54.3
1.2
38
17
:
43
:
21.3
63808
fa
:
16
:
3
e
:
63
:
3
b
:
4
c
>
fa
:
16
:
3
e
:
30
:
ee
:
23
,
ethertype IPv
4
(
0
x
0800
)
,
length
98
:
(
tos
0
x
0
,
flags [DF]
,
proto ICMP
(
1
)
,
length
84
)
192.1
68.1
.
20
>
81.1
.
180.1
8
:
ICMP echo request
,
id
3202
,
seq
221
,
length
64
|
3.2.4 不同服务器上不同网段上的虚机互相访问
1
2
3
4
5
6
7
8
|
s
1
@controller
:
~$ neutron l
3
-
agent
-
list
-
hosting
-
router dvr
-
r
1
+
--------------------------------------+----------+----------------+-------+
|
id
| host | admin_state_up | alive |
+
--------------------------------------+----------+----------------+-------+
|
04
c
360
d
0
-3066
-4
f
04
-9
af
2
-
d
4
ef
8586
ad
2
b | network | True |
:
-
)
|
| aa
8
cf
021
-7
f
3
d
-4667
-9
d
92
-4
d
77
d
4
c
4
fb
59
| compute
2
| True |
:
-
)
|
| beec
232
b
-48
d
7
-4424
-83
e
2
-8
cc
4
e
49
ec
339
| compute
1
| True |
:
-
)
|
+
--------------------------------------+----------+----------------+-------+
|
1
2
|
08
:
17
:
14.4
83282
fa
:
16
:
3
e
:
30
:
ee
:
23
>
fa
:
16
:
3
e
:
63
:
3
b
:
4
c
,
ethertype IPv
4
(
0
x
0800
)
,
length
98
:
(
tos
0
x
0
,
flags [DF]
,
proto ICMP
(
1
)
,
length
84
)
81.1
.
180.1
8
>
90.1
.
180.6
:
ICMP echo request
,
id
12033
,
seq
4
,
length
64
|
1
2
3
4
5
6
7
8
9
|
root@compute
1
:
/
home
/
s
1
# ip netns exec qrouter-e8f12f7a-6938-4e65-88c4-97e4cb211b27 ip route list table main
81.1
.
180.0
/
24
dev qr
-517
bdba
3
-
b
1
proto kernel scope link src
81.1
.
180.1
90.1
.
180.0
/
24
dev qr
-
f
849
ae
46
-48
proto kernel scope link src
90.1
.
180.1
91.1
.
180.0
/
24
dev qr
-
e
47
fca
31
-
db proto kernel scope link src
91.1
.
180.1
169.2
54.3
1.2
38
/
31
dev rfp
-
e
8
f
12
f
7
a
-6
proto kernel scope link src
169.2
54.3
1.2
38
复制代码
08
:
18
:
30.5
55867
fa
:
16
:
3
e
:
ec
:
f
3
:
dd
>
fa
:
16
:
3
e
:
13
:
93
:
0
d
,
ethertype IPv
4
(
0
x
0800
)
,
length
98
:
(
tos
0
x
0
,
flags [DF]
,
proto ICMP
(
1
)
,
length
84
)
81.1
.
180.1
8
>
90.1
.
180.6
:
ICMP echo request
,
id
12033
,
seq
80
,
length
64
|
1
2
3
4
5
|
root@compute
1
:
/
home
/
s
1
# ovs-ofctl dump-flows br-inttable=0, n_packets=0, n_bytes=0, idle_age=6318, priority=2,in_port=5,dl_src=fa:16:3f:12:a3:38 actions=resubmit(,1)
table
=
0
,
n_packets
=
336
,
n_bytes
=
32928
,
idle_age
=
1
,
priority
=
2
,
in_port
=
5
,
dl_src
=
fa
:
16
:
3
f
:
db
:
6
f
:
73
actions
=
resubmit
(
,
1
)
table
=
0
,
n_packets
=
12877
,
n_bytes
=
1220950
,
idle_age
=
1
,
priority
=
1
actions
=
NORMAL
table
=
1
,
n_packets
=
0
,
n_bytes
=
0
,
idle_age
=
6309
,
priority
=
2
,
ip
,
dl_vlan
=
2
,
nw_dst
=
81.1
.
180.0
/
24
actions
=
strip_vlan
,
mod_dl_src
:
fa
:
16
:
3
e
:
63
:
3
b
:
4
c
,
output
:
4
table
=
1
,
n_packets
=
336
,
n_bytes
=
32928
,
priority
=
4
,
dl_vlan
=
2
,
dl_dst
=
fa
:
16
:
3
e
:
30
:
ee
:
23
actions
=
strip_vlan
,
mod_dl_src
:
fa
:
16
:
3
e
:
63
:
3
b
:
4
c
,
output
:
4
table
=
1
,
n_packets
=
0
,
n_bytes
=
0
,
idle_age
=
6319
,
priority
=
1
actions
=
drop
table
=
23
,
n_packets
=
0
,
n_bytes
=
0
,
idle_age
=
6319
,
priority
=
0
actions
=
drop
|
01
02
03
04
05
06
07
08
09
10
11
12
13
|
root@compute
1
:
/
home
/
s
1
# ovs-ofctl dump-flows br-tun
NXST_FLOW reply
(
xid
=
0
x
4
)
:
table
=
0
,
n_packets
=
6423
,
n_bytes
=
593912
,
idle_age
=
0
,
priority
=
1
,
in_port
=
1
actions
=
resubmit
(
,
1
)
table
=
1
,
n_packets
=
5751
,
n_bytes
=
563598
,
idle_age
=
0
,
priority
=
1
,
dl_vlan
=
1
,
dl_src
=
fa
:
16
:
3
e
:
ec
:
f
3
:
dd actions
=
mod_dl_src
:
fa
:
16
:
3
f
:
b
2
:
34
:
82
,
resubmit
(
,
2
)
table
=
2
,
n_packets
=
5768
,
n_bytes
=
565152
,
idle_age
=
0
,
priority
=
0
,
dl_dst
=
00
:
00
:
00
:
00
:
00
:
00
/
01
:
00
:
00
:
00
:
00
:
00
actions
=
resubmit
(
,
20
)
table
=
20
,
n_packets
=
0
,
n_bytes
=
0
,
idle_age
=
6900
,
priority
=
0
actions
=
resubmit
(
,
22
)
table
=
20
,
n_packets
=
11
,
n_bytes
=
1022
,
idle_age
=
3650
,
priority
=
2
,
dl_vlan
=
2
,
dl_dst
=
fa
:
16
:
3
e
:
82
:
a
9
:
ca actions
=
strip_vlan
,
set_tunnel
:
0
x
6
,
output
:
3
table
=
20
,
n_packets
=
5
,
n_bytes
=
490
,
idle_age
=
6411
,
priority
=
2
,
dl_vlan
=
1
,
dl_dst
=
fa
:
16
:
3
e
:
47
:
55
:
00
actions
=
strip_vlan
,
set_tunnel
:
0
x
4
,
output
:
3
table
=
20
,
n_packets
=
0
,
n_bytes
=
0
,
idle_age
=
5820
,
priority
=
2
,
dl_vlan
=
1
,
dl_dst
=
fa
:
16
:
3
e
:
54
:
f
8
:
b
8
actions
=
strip_vlan
,
set_tunnel
:
0
x
4
,
output
:
3
table
=
20
,
n_packets
=
1108
,
n_bytes
=
108584
,
idle_age
=
0
,
priority
=
2
,
dl_vlan
=
1
,
dl_dst
=
fa
:
16
:
3
e
:
13
:
93
:
0
d actions
=
strip_vlan
,
set_tunnel
:
0
x
4
,
output
:
2
table
=
20
,
n_packets
=
0
,
n_bytes
=
0
,
idle_age
=
6889
,
priority
=
2
,
dl_vlan
=
2
,
dl_dst
=
fa
:
16
:
3
e
:
a
1
:
76
:
41
actions
=
strip_vlan
,
set_tunnel
:
0
x
6
,
output
:
2
table
=
20
,
n_packets
=
1
,
n_bytes
=
42
,
idle_age
=
6685
,
priority
=
2
,
dl_vlan
=
2
,
dl_dst
=
fa
:
16
:
3
e
:
c
0
:
8
f
:
2
c actions
=
strip_vlan
,
set_tunnel
:
0
x
6
,
output
:
3
table
=
20
,
n_packets
=
0
,
n_bytes
=
0
,
idle_age
=
6782
,
priority
=
2
,
dl_vlan
=
1
,
dl_dst
=
fa
:
16
:
3
e
:
69
:
92
:
30
actions
=
strip_vlan
,
set_tunnel
:
0
x
4
,
output
:
3
|
- table 1 将网络包的 src mac 修改为了 compute node 1 的 DVR MAC 地址。
- table 20 通过 l2population 获得了到虚机所在的租户网络内的所有存在的虚机的 MAC 地址和 Tunnel 端口号的映射关系。至此,网络包被打上了 Tunnel ID 4,进入 GRE Port 2.
- 其 GRE 隧道的另一头正是 compute 2.
![](https://i-blog.csdnimg.cn/blog_migrate/10f49ba38f53a10071a59c2c8f39b741.jpeg)
3.2.5 同一个服务器上不同网段上的虚机互相访问
3.3 小结
网络流量类型 | 特征 | 转发机制 |
本地 | 源和目的 IP 在同一个 subnet 中,虚机在同一个计算节点上 | br-int 通过 MAC 地址学习直接转发网络包给目标虚机 |
远程 | 源和目的 IP 在同一个 subnet 中,虚机不在同一个计算节点上 | 标准转发,取决于网络的段类型 |
东-西 | 源和目的 IP 不在同一个 subnet 中 | 由源虚机所在计算节点上的 qrouter 负责转发 |
SNAT | IP 不属于本地 router 的任何 subnet 中,而且虚机没有浮动IP | 由源虚机所在计算节点上的 qrouter 负责转发到 neutron 网络节点上 snat |
FIP | IP 不属于本地 router 的任何 subnet 中,而且虚机有浮动IP | 由源虚机所在计算节点上的 qrouter转发到本地的 fip |