Designs pf Computer Network —— Static Route Configuration

《计算机网络课程》课程设计

image002.png

一个单位从ISP申请到一个公网IP地址:202.196.78.123,单位内部的网络拓扑如图1所示,该单位拟采用专用网地址块172.20.0.0/16为各部门分配IP地址,各部门对IP地址的需求已经标注在图1中。请完成以下任务。

Q1

为每一个部门分配地址块,并详细说明这样分配的理由和分配的过程。

采用CIDR无分类编址法对地址进行分配,通过公式$log_2(num)$即可得到地址块的大小,num为主机数量;再通过公式 网络前缀长 = 32 - 地址块长度 得到地址掩码。

部门 主机数 地址块长度 网络前缀 上游路由器 地址掩码
A 100 7 /25 RB 255.255.255.128
B 100 7 /25 RB 255.255.255.128
C 50 6 /26 RC 255.255.255.192
D 200 8 /24 RC 255.255.255.0
E 50 6 /26 RA 255.255.255.192

表 1.1

最后将上游路由器相同的部门合并成子网,得到表1.2。

子网 合并主机数 合并地址块长度 上游路由器 子网掩码
net B 200 8 RB 255.255.255.0
net C 250 8 RC 255.255.255.0
net A 50 6 RA 255.255.255.192

表1.2

Q2

为图1中的主机和路由器的所有接口分配IP地址,用图或表的形式给出你的分配结果。

子网划分过程如图2.1所示。

image005.png

图2.1

IP地址划分如图2.2所示。

image007.jpg

图2.2

Q3

为每台路由器设计静态路由表,要求路由表的项目数尽可能少。根据你的设计,为每台路由器填写下表。

目的前缀 掩码 下一跳 转发接口
0.0.0.0 0.0.0.0 202.196.78.124 tapRA_I
172.20.0.0 255.255.255.0 172.20.3.250 tapRA_RC
172.20.1.0 255.255.255.192 172.20.3.250 tapRA_RC
172.20.2.0 255.255.255.0 172.20.3.254 tapRA_RB
172.20.3.0 255.255.255.192 0.0.0.0 tapRA_swe
172.20.3.248 255.255.255.252 0.0.0.0 tapRA_RB
172.20.3.252 255.255.255.252 0.0.0.0 tapRA_RB

表3.1 路由器RA静态路由表

目的前缀 掩码 下一跳 转发接口
0.0.0.0 0.0.0.0 172.20.1.250 tapRB_RA
172.20.0.0 255.255.255.128 0.0.0.0 tapRB_swa
172.20.0.128 255.255.255.128 0.0.0.0 tapRB_swb
172.20.1.248 255.255.255.252 0.0.0.0 tapRB_RA

表3.2 路由器RB静态路由表

目的前缀 掩码 下一跳 转发接口
0.0.0.0 0.0.0.0 172.20.1.254 tapRC_RA
172.20.1.252 255.255.255.252 0.0.0.0 tapRC_RA
172.20.2.192 255.255.255.128 0.0.0.0 tapRC_swd
172.20.3.0 255.255.255.128 0.0.0.0 tapRC_swc

表3.3 路由器RC静态路由表

Q4

如果该单位内网上的多台主机需要同时访问互联网,应该采用什么技术实现,请详述该技术的原理。

​ 如果想要实现专用网上的主机与公用的互联网上的主机进行通信,则需要利用网络地址转换 NAT。需要在专用网络连接到互联网的路由器按照 NAT 软件,此路由器被称为 NAT 路由器,它至少拥有一个有效的全球地址。这样以来,所有使用本地地址的主机在和外界通信时,都要在 NAT 路由器上将本地地址转换成全球 IP 地址,以此与互联网连接。由于专用本地 IP 地址是可以重用的,所以 NAT 技术大大节省了 IP 地址的消耗。同时也隐藏了内部网络结构,从而降低了内部网络收到攻击的风险。在本次实验建立的拓扑结构图中,tapRA_H 作为 NAT 路由器,在 NAT 地址转换表中实现了专用网到公用网的映射。

​ NAT 存在两种形式:基本 NAT 和网络地址与端口转换 NAPT。

  1. 基本 NAT 技术

​ 当主机跨网络通信时,NAT 技术可以将报文的目的 IP 地址转换为路由器的 WAN 口IP 地址。也就是可以将私有 IP 和公有 IP 转化的过程,并且记录在 NAT 映射表中。其 中公网 IP 是唯一的,使用 NAT 技术后,可以使得不同局域网内的主机的 IP 地址可以一样。但是同一局域网内的主机 IP 地址不能一样。

  1. 网络地址与端口转换 NAPT

​ 与基本 NAT 技术不同的是,基本 NAT 技术中一个全局 IP 对应一个私有 IP(即一个内部地址转换成一个外部地址进行通信。),而网络地址与端口转换 NAPT 技术中一个全局 IP 加上不同的端口号对应多个私有 IP(即多个内部地址使用同一地址不同端口转换成外部地址进行通信)。所以 NAPT 技术实现了一个全球 IP 地址供多台专用网主机同时访问互联网。

Q5

在Linux中,编写脚本程序,利用Linux虚拟网络,创建图1所示虚拟网络拓扑,并按照你的设计,为各路由器和主机配置IP地址,为各路由器配置静态路由,提交你编写的脚本程序。在Linux中执行你的脚本程序,然后用route -n命令打印各路由器的路由表,截图并提交你打印的路由表。

查看路由表结果如图5.1,图5.2,图5.3所示。

image009.png

图5.1 路由器RA路由表

image012.png

图5.2 路由器RB路由表

image014.png

图5.3 路由器RC路由表

脚本程序:

topo.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
#!/bin/sh
#本脚本创建虚拟网络拓扑,并为各接口配置IP地址,但未进行路由配置。
set -x

#开启ip分组转发
sysctl -w net.ipv4.ip_forward=1
#为更好的模拟路由器工作,需关闭Linux防火墙,避免路由器进行IP分片重组
systemctl stop firewalld.service
#关闭Linux反向路径校验
sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.default.rp_filter=0
#iptables服务,进行TCP相关实验时需要开启,进行ICMP目的不可达实验时也需要开启
systemctl start iptables.service
#启用linux内核的ICMP重定向响应,进行ICMP重定向实验时需要开启
sysctl -w net.ipv4.conf.all.accept_redirects=1

#创建SWE及其相连的主机HE,配置IP和默认路由
#创建Bridge
brctl addbr swe
#创建namespace
ip netns add he1
#将lo接口上线
ip netns exec he1 ip link set lo up
#创建veth pair
ip link add taphe1 type veth peer name taphe1_p
#把tap迁移到namespace
ip link set taphe1 netns he1
#把相应tap添加到Bridge中
brctl addif swe taphe1_p
#配置IP地址
ip netns exec he1 ip addr add local 172.20.1.62/26 dev taphe1
#将Bridge及相关tap状态设置为up
ip link set swe up
ip link set taphe1_p up
ip netns exec he1 ip link set taphe1 up
#配置默认路由
ip netns exec he1 route add default gw 172.20.1.1

#创建SWA及其相连的主机HA,配置IP和默认路由
#创建Bridge
brctl addbr swa
#创建namespace
ip netns add ha1
#将lo接口上线
ip netns exec ha1 ip link set lo up
#创建veth pair
ip link add tapha1 type veth peer name tapha1_p
#把tap迁移到namespace
ip link set tapha1 netns ha1
#把相应tap添加到Bridge中
brctl addif swa tapha1_p
#配置IP地址
ip netns exec ha1 ip addr add local 172.20.0.127/25 dev tapha1
#将Bridge及相关tap状态设置为up
ip link set swa up
ip link set tapha1_p up
ip netns exec ha1 ip link set tapha1 up
#配置默认路由
ip netns exec ha1 route add default gw 172.20.0.1

#创建SWB及其相连的主机HB,配置IP和默认路由
#创建Bridge
brctl addbr swb
#创建namespace
ip netns add hb1
#将lo接口上线
ip netns exec hb1 ip link set lo up
#创建veth pair
ip link add taphb1 type veth peer name taphb1_p
#把tap迁移到namespace
ip link set taphb1 netns hb1
#把相应tap添加到Bridge中
brctl addif swb taphb1_p
#配置IP地址
ip netns exec hb1 ip addr add local 172.20.0.254/25 dev taphb1
#将Bridge及相关tap状态设置为up
ip link set swb up
ip link set taphb1_p up
ip netns exec hb1 ip link set taphb1 up
#配置默认路由
ip netns exec hb1 route add default gw 172.20.0.253

#创建SWC及其相连的主机HC,配置IP和默认路由
#创建Bridge
brctl addbr swc
#创建namespace
ip netns add hc1
#将lo接口上线
ip netns exec hc1 ip link set lo up
#创建veth pair
ip link add taphc1 type veth peer name taphc1_p
#把tap迁移到namespace
ip link set taphc1 netns hc1
#把相应tap添加到Bridge中
brctl addif swc taphc1_p
#配置IP地址
ip netns exec hc1 ip addr add local 172.20.3.62/26 dev taphc1
#将Bridge及相关tap状态设置为up
ip link set swc up
ip link set taphc1_p up
ip netns exec hc1 ip link set hc1 up
#配置默认路由
ip netns exec hc1 route add default gw 172.20.3.1

#创建SWD及其相连的主机HD,配置IP和默认路由
#创建Bridge
brctl addbr swd
#创建namespace
ip netns add hd1
#将lo接口上线
ip netns exec hd1 ip link set lo up
#创建veth pair
ip link add taphd1 type veth peer name taphd1_p
#把tap迁移到namespace
ip link set taphd1 netns hd1
#把相应tap添加到Bridge中
brctl addif swd taphd1_p
#配置IP地址
ip netns exec hd1 ip addr add local 172.20.2.254/26 dev taphd1
#将Bridge及相关tap状态设置为up
ip link set swd up
ip link set taphd1_p up
ip netns exec hd1 ip link set hd1 up
#配置默认路由
ip netns exec hd1 route add default gw 172.20.2.253
#创建各路由器NS
ip netns add RA
ip netns add RB
ip netns add RC
#各路由器lo接口上线
ip netns exec RA ip link set lo up
ip netns exec RB ip link set lo up
ip netns exec RC ip link set lo up

#连接路由器RA和网桥SWE
#创建veth pair
ip link add tapRA_swe type veth peer name tapswe_RA
#把tap迁移到路由器和网桥
ip link set tapRA_swe netns RA
brctl addif swe tapswe_RA
#配置相应tap的IP地址
ip netns exec RA ip addr add local 172.20.1.1/26 dev tapRA_swe
#将相关tap状态设置为up
ip netns exec RA ip link set tapRA_swe up
ip link set tapswe_RA up

#连接路由器RB和网桥SWA
#创建veth pair
ip link add tapRB_swa type veth peer name tapswa_RB
#把tap迁移到路由器和网桥
ip link set tapRB_swa netns RB
brctl addif swa tapswa_RB
#配置相应tap的IP地址
ip netns exec RB ip addr add local 172.20.0.1/25 dev tapRB_swa
#将相关tap状态设置为up
ip netns exec RB ip link set tapRB_swa up
ip link set tapswa_RB up

#连接路由器RB和网桥SWB
#创建veth pair
ip link add tapRB_swb type veth peer name tapswb_RB
#把tap迁移到路由器和网桥
ip link set tapRB_swb netns RB
brctl addif swb tapswb_RB
#配置相应tap的IP地址
ip netns exec RB ip addr add local 172.20.0.253/25 dev tapRB_swb
#将相关tap状态设置为up
ip netns exec RB ip link set tapRB_swb up
ip link set tapswb_RB up

#连接路由器RC和网桥SWC
#创建veth pair
ip link add tapRC_swc type veth peer name tapswc_RC
#把tap迁移到路由器和网桥
ip link set tapRC_swc netns RC
brctl addif swc tapswc_RC
#配置相应tap的IP地址
ip netns exec RC ip addr add local 172.20.3.1/26 dev tapRC_swc
#将相关tap状态设置为up
ip netns exec RC ip link set tapRC_swc up
ip link set tapswc_RC up

#连接路由器RC和网桥SWD
#创建veth pair
ip link add tapRC_swd type veth peer name tapswd_RC
#把tap迁移到路由器和网桥
ip link set tapRC_swd netns RC
brctl addif swd tapswd_RC
#配置相应tap的IP地址
ip netns exec RC ip addr add local 172.20.2.253/26 dev tapRC_swd
#将相关tap状态设置为up
ip netns exec RC ip link set tapRC_swd up
ip link set tapswd_RC up

#连接路由器RA和路由器RB
#创建veth pair
ip link add tapRA_RB type veth peer name tapRB_RA
#把tap迁移到路由器
ip link set tapRA_RB netns RA
ip link set tapRB_RA netns RB
#配置相应tap的IP地址
ip netns exec RA ip addr add local 172.20.1.250/30 dev tapRA_RB
ip netns exec RB ip addr add local 172.20.1.249/30 dev tapRB_RA
#将相关tap状态设置为up
ip netns exec RA ip link set tapRA_RB up
ip netns exec RB ip link set tapRB_RA up

#连接路由器RA和路由器RC
#创建veth pair
ip link add tapRA_RC type veth peer name tapRC_RA
#把tap迁移到路由器
ip link set tapRA_RC netns RA
ip link set tapRC_RA netns RC
#配置相应tap的IP地址
ip netns exec RA ip addr add local 172.20.1.254/30 dev tapRA_RC
ip netns exec RC ip addr add local 172.20.1.253/30 dev tapRC_RA
#将相关tap状态设置为up
ip netns exec RA ip link set tapRA_RC up
ip netns exec RC ip link set tapRC_RA up

#连接路由器RA和Linux Host
#创建veth pair
ip link add tapRA_I type veth peer name tapI_RA
#把tap迁移到路由器
ip link set tapRA_I netns RA
#配置相应tap的IP地址
ip netns exec RA ip addr add local 202.196.78.123/24 dev tapRA_I
ip addr add local 202.196.78.124/24 dev tapI_RA
#将相关tap状态设置为up
ip netns exec RA ip link set tapRA_I up
ip link set tapI_RA up
#为Linux Host配置到虚拟实验网络的路由
route add -net 170.20.0.0/16 gw 202.196.78.123

#END

route_table.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/sh
#本脚本为虚拟网络拓扑进行静态路由配置。
set -x

#各路由器的直连路由,已经在script3.1中设置IP地址时自动生成了,无需手动配置
#RA路由(最长前缀匹配)
ip netns exec RA route add -net 172.20.2.0/24 gw 172.20.1.253
ip netns exec RA route add -net 172.20.0.128/25 gw 172.20.1.249
ip netns exec RA route add -net 172.20.1.0/24 gw 172.20.1.1
#默认路由,(进行ICMP目的不可达实验时删除,以产生网络不可达 #ICMP3-0)
ip netns exec RA route add default gw 172.20.1.253
ip netns exec RA route add default gw 172.20.1.249
#RB路由
ip netns exec RB route add default gw 172.20.1.250
#RC路由
ip netns exec RC route add default gw 172.20.1.254

#end