介绍
Lantern Festival 各区域的本地服务正常,但工作人员还无法获取另一区域的节目。你将恢复分离网络之间的一条限定路径,同时保持广播室可用。
你应已能识别 IPv4 地址、简单的 /24 范围、客户端/服务端角色和端口,并能输入终端命令、用 ip addr 查看地址。已准备的 Linux 节点共享同一个内核;它们是网络命名空间,不是独立实体机器。不要求编程、防火墙、动态路由或子网算术。
使用 Area Plan 发起真实节目请求,使用 Area A 和 Area B 操作各自客户端,使用 West Router 和 East Router 修改路由。每个终端保留自己的目录和网络状态。打开 Tab 不会重置进度。这个实验独立开始。时长是包含阅读和普通错误处理的作者估计,未经过初学者计时研究。
恢复通往 Workshop 的路径
本步骤先建立正常的本地样例,再调查远端目标。从 Area Plan 开始。在 Main Stage 卡片中选择 Request from Area A。应看到开场演出和灯笼巡游,最后一行为 Request received from: 10.71.0.10。使用浏览器的后退按钮返回。在 Broadcast Room 上选择 Request from Area A:广播提示也可获取。这些是必须保留的正常服务。
切换到 Area A。终端已位于 /home/labex/project/festival-routes/a。pwd 打印这个目录。ip -4 addr show 显示 IPv4 地址;dev eth0 选择课程接口。
pwd
ip -4 addr show dev eth0
应看到 10.71.0.10/24。本方案中,/24 表示以 10.71.0 开头的地址属于本地网络。Workshop 使用另一个子网 10.72.0.0/24。路由器在网络之间转发报文,不改变报文的原始地址。
HTTP 是已准备的节目服务使用的请求/响应协议。curl 请求 HTTP 资源。--noproxy '*' 对所有目标绕过代理设置;引号使 * 保持字面含义。-f 把 HTTP 错误视为失败,-s 隐藏进度条,-S 仍显示错误。--max-time 3 将整个尝试限制为三秒。端口 8080 是已准备的节目服务。
curl --noproxy '*' -fsS --max-time 3 http://10.71.0.10:8080/programme.txt
阅读完整的本地节目,包括来源地址。现在尝试 Workshop。下一次请求预计会失败;它不会损坏网络。
curl --noproxy '*' -fsS --max-time 3 http://10.72.0.10:8080/programme.txt
应看到连接失败,而不是节目。立即读取原生退出状态:$? 保存上一条命令的状态,echo 将它打印出来。
echo $?
非零状态表示本次尝试失败。连接失败(通常为 7)、超时(28)和 HTTP 拒绝(22,使用 -f 时)表示不同观察,任何一个都不能单独定位所有根因。端口拒绝可能意味着已到达主机,但没有监听程序接受连接。如果请求输错,先核对准确的 Tab、地址和端口,再重试。不要重置 VM。
本地服务和第三网络正常。接下来要判断 West Router 会用哪条路径到达 Workshop。
读取路由器的决策
本部分将区分客户端默认网关和路由器针对特定目标的路径。从 Area A 开始。ip route 读取实时路由表;ip route get 向内核查询将选择哪条路径,不会发送节目请求。
ip route
ip route get 10.72.0.10
应看到 via 10.71.0.1 dev eth0:下一跳是相邻的 West Router。via 指明这个邻居,dev 指明出口接口。这不能证明 West Router 知道剩余路径。
切换到 West Router,其课程工作目录以 /west 结尾。读取接口和路由:
ip -4 addr show
ip route
ip route get 10.72.0.10
最后一次查询应显示 RTNETLINK answers: No route to host。LAN 接口为 10.71.0.1/24;transit 为 172.22.0.1/24。相邻 East Router 使用 172.22.0.2/24,并通过 10.72.0.1/24 连接 Workshop。Broadcast Room 位于 West Router 的 broadcast 接口后,接口地址为 10.73.0.1/24。
已准备的 unreachable default metric 32760 是刻意设置的默认路由:这个隔离练习中,不匹配其他路径的目标会被拒绝。普通默认路由也可以使用网关。这里要保留原默认路由。metric 32760 是前缀相同时比较的优先级;在这种比较中,更低的 metric 更优先。目标 10.72.0.0/24 的路由比默认路由更具体,只改变该区域的路径。不要替换默认路由或清空路由表。
在 Area Plan 中展开 West Router · live routing table,对照同一张原生路由表。地图表示结构;节目请求验证真实通信。第一个实验中,East Router 的回程已准备好。你只需补上 West Router 缺失的目标路由。
添加限定路径
本部分将添加一条目标路由并获取完整的远端资源。从 West Router 开始。这个终端已拥有课程命名空间内的管理权限。ip route add 添加实时路由;10.72.0.0/24 是目标范围,via 172.22.0.2 是相邻路由器,dev transit 选择通向该邻居的链路。
ip route add 10.72.0.0/24 via 172.22.0.2 dev transit
成功时通常没有输出。再次读取决策:
ip route get 10.72.0.10
应看到 via 172.22.0.2 dev transit。这里显示的 src 属于路由器自身发起的请求;转发的 Area A 流量仍保留自己的地址。切换到 Area A,发起真实客户端请求:
curl --noproxy '*' -fsS --max-time 3 http://10.72.0.10:8080/programme.txt
应看到 Workshop、纸灯笼工作坊和节奏圈活动,以及 Request received from: 10.71.0.10。
保存节目并保留其他路径
本步骤将保存远端资源,并保留本地和广播路径。从 Area A 开始。-o remote-programme.txt 将收到的字节保存到这个终端的目录中。cat 读取已保存的文件。
curl --noproxy '*' -fsS --max-time 3 -o remote-programme.txt http://10.72.0.10:8080/programme.txt
cat remote-programme.txt
也检查必须保留的广播路径:
curl --noproxy '*' -fsS --max-time 3 http://10.73.0.10:8080/programme.txt
在 Area Plan 中返回首页,选择 Workshop 的 Request from Area A。阅读相同节目及原始来源地址。使用浏览器后退按钮,再请求 Main Stage 和 Broadcast Room。路由表展开区域仍须显示原默认路由和直连路由。
如果 add 报告 File exists,在 West Router 中读取 ip route。replace 只添加或更新指定前缀:
ip route replace 10.72.0.0/24 via 172.22.0.2 dev transit
如果误加了 10.72.1.0/24,它不会匹配本次目标。只用 ip route del 10.72.1.0/24 删除这条错误记录,再使用上方正确路由。遇到其他输入错误时,也先读取路由表,只删除自己多加的前缀。绝不要使用 flush。保留地址、所有原路由、链路和服务。如果失败的下载没有留下完整文件,重复同一下载命令。这些路由只在本会话中实时生效;重启后的持久化不在本实验范围内。

通过路线图定位两个中转邻居,再对照目标行和保留的默认路由。展开的表格显示正在工作的实验中的真实内核路由。
总结
你使用真实目标查询和限定路由交付了活动节目,同时保留原地址和其他路径。客户端网关只是第一跳;每个路由器都需要可用的后续决策。



