佛山正规的免费网站优化学做网站要学什么语言
佛山正规的免费网站优化,学做网站要学什么语言,网站图片代码怎么做的,网络推广经验1. 环境准备#xff1a;搭建你的第一个混合路由实验场
很多刚接触网络的朋友一听到OSPF、RIP这些动态路由协议#xff0c;就觉得头大#xff0c;感觉是大型企业网络才用得到的东西。其实不然#xff0c;这些协议的核心思想非常直观#xff0c;就是让网络设备能自己“聊天”…1. 环境准备搭建你的第一个混合路由实验场很多刚接触网络的朋友一听到OSPF、RIP这些动态路由协议就觉得头大感觉是大型企业网络才用得到的东西。其实不然这些协议的核心思想非常直观就是让网络设备能自己“聊天”互相告诉对方“我这儿能到哪些地方”。今天我就带你用一台普通的Ubuntu 20.04电脑配合功能强大又免费开源的FRR路由套件亲手搭建一个同时运行OSPF和RIP的混合路由环境。这个实验不需要昂贵的硬件路由器你的笔记本电脑或者一台虚拟机就能搞定非常适合学习、测试甚至为小型办公或家庭实验室网络提供更灵活的路由选择。我选择Ubuntu 20.04作为平台主要是因为它长期支持社区资源丰富遇到问题容易找到解决方案。而FRRFRRouting可以说是开源路由软件里的“瑞士军刀”它完整实现了包括OSPF、RIP、BGP在内的几乎所有主流路由协议而且配置风格和业界巨头思科、Juniper的命令行非常相似学好了FRR再去看那些商业设备的配置你会觉得特别亲切。在开始动手之前我们需要先把“舞台”搭好。这个舞台就是我们的软件环境主要包括FRR的安装和一些基本的系统网络配置。首先确保你的Ubuntu 20.04系统已经更新到最新状态。打开终端输入以下命令来安装FRR。FRR的官方为Ubuntu提供了方便的仓库我们直接添加并安装即可。sudo apt update sudo apt install -y software-properties-common sudo add-apt-repository ppa:frrouting/frr sudo apt update sudo apt install -y frr frr-pythontools安装过程中可能会问你选择哪些路由守护进程如果你不确定可以先全选或者只选ospfd和ripd因为我们这次实验主要用它们。安装完成后FRR服务默认是禁用的我们需要先启用它并允许它通过系统的权限控制。编辑FRR的守护进程配置文件把我们需要用到的协议开关打开。sudo vi /etc/frr/daemons找到文件中关于ospfd和ripd的行默认它们可能是no我们把它们改成yes。ospfdyes ripdyes保存退出后我们还需要让FRR有权限操作系统的网络栈比如添加路由、配置接口。编辑/etc/frr/daemons同目录下的frr.conf文件如果不存在可以后续通过vtysh命令行生成但更关键的是确保FRR服务能运行。我们启动FRR服务并设置开机自启。sudo systemctl enable frr sudo systemctl start frr现在你可以通过sudo vtysh命令进入FRR的专属命令行界面了如果看到类似router#的提示符恭喜你FRR已经成功运行我们的“软路由器”就绪了。接下来我们需要构思一个简单的网络拓扑来模拟真实场景。为了不让事情变得太复杂我设计了一个包含三台“路由器”实际上都是FRR实例可以用网络命名空间模拟和若干主机的拓扑。但为了让第一次实验更简单直观我建议你先在一台物理机上用多个虚拟网络接口VETH pair和网络命名空间来模拟多台设备这是学习网络协议成本最低、最灵活的方式。2. 网络拓扑设计与模拟环境搭建光有软件还不够我们得有一个具体的网络场景来施展拳脚。直接上物理设备不现实用虚拟机又有点重这里我强烈推荐使用Linux的网络命名空间Network Namespace配合虚拟以太网对VETH Pair来搭建实验环境。这就像在你的电脑里凭空划出几个独立的“网络小房间”每个房间都有自己的网卡、IP地址和路由表互不干扰完美模拟多台路由器。这个方法效率极高资源占用几乎可以忽略不计。我设计的这个混合路由实验拓扑包含了OSPF和RIP两种协议共存的典型场景。假设我们有一个小型的园区网核心区域设备性能较好我们使用OSPF协议来快速收敛并传递路由而边缘接入部分有一些老旧的设备只支持简单的RIP协议。我们的目标就是让这两种协议能和平共处互相学习路由信息。具体来说我们会创建三台路由器R1、R2和R3。R1和R2之间运行RIP协议模拟边缘网络R2和R3之间以及R3和R1之间运行OSPF协议模拟核心网络。这样R2就成为了一个“边界路由器”它同时运行RIP和OSPF负责在两种协议间重分发路由信息。下面我们来一步步创建这个拓扑。首先创建三个网络命名空间分别代表三台路由器。sudo ip netns add R1 sudo ip netns add R2 sudo ip netns add R3接着创建连接它们的虚拟网线VETH Pair。VETH总是成对出现就像一根网线的两头。# 创建 R1 - R2 的链路 (用于RIP) sudo ip link add veth-r1-r2 type veth peer name veth-r2-r1 # 创建 R2 - R3 的链路 (用于OSPF) sudo ip link add veth-r2-r3 type veth peer name veth-r3-r2 # 创建 R3 - R1 的链路 (用于OSPF) sudo ip link add veth-r3-r1 type veth peer name veth-r1-r3现在这些虚拟接口还在默认的网络空间里我们需要把它们分别“插到”对应的路由器命名空间上。# 将接口的一端移动到对应的命名空间 sudo ip link set veth-r1-r2 netns R1 sudo ip link set veth-r2-r1 netns R2 sudo ip link set veth-r2-r3 netns R2 sudo ip link set veth-r3-r2 netns R3 sudo ip link set veth-r3-r1 netns R3 sudo ip link set veth-r1-r3 netns R1然后在每个命名空间内为接口配置IP地址并启动它们。我们规划一下IP地址R1-R2链路用192.168.12.0/24网段R2-R3链路用10.23.0.0/24网段R3-R1链路用10.31.0.0/24网段。另外我们还在R1和R3上各创建一个环回接口Loopback模拟各自连接的一个内部网络比如1.1.1.1/32和3.3.3.3/32。# 配置 R1 sudo ip netns exec R1 ip addr add 192.168.12.1/24 dev veth-r1-r2 sudo ip netns exec R1 ip addr add 10.31.0.1/24 dev veth-r1-r3 sudo ip netns exec R1 ip link set veth-r1-r2 up sudo ip netns exec R1 ip link set veth-r1-r3 up sudo ip netns exec R1 ip link add lo1 type dummy sudo ip netns exec R1 ip addr add 1.1.1.1/32 dev lo1 sudo ip netns exec R1 ip link set lo1 up # 配置 R2 sudo ip netns exec R2 ip addr add 192.168.12.2/24 dev veth-r2-r1 sudo ip netns exec R2 ip addr add 10.23.0.2/24 dev veth-r2-r3 sudo ip netns exec R2 ip link set veth-r2-r1 up sudo ip netns exec R2 ip link set veth-r2-r3 up # 配置 R3 sudo ip netns exec R3 ip addr add 10.23.0.3/24 dev veth-r3-r2 sudo ip netns exec R3 ip addr add 10.31.0.3/24 dev veth-r3-r1 sudo ip netns exec R3 ip link set veth-r3-r2 up sudo ip netns exec R3 ip link set veth-r3-r1 up sudo ip netns exec R3 ip link add lo3 type dummy sudo ip netns exec R3 ip addr add 3.3.3.3/32 dev lo3 sudo ip netns exec R3 ip link set lo3 up最后为了让FRR的各个实例能在不同的命名空间里独立运行我们需要为每个命名空间启动一个独立的FRR守护进程。这有点复杂一个更简单的办法是我们只在一台FRR里通过配置不同的路由进程和接口来模拟。但为了彻底模拟三台独立路由器我们可以复制FRR的配置文件并用ip netns exec来启动vtysh进行配置。不过在本次实验中为了简化我们先在一台机器的FRR上通过配置不同的Router ID和接口来逻辑区分三台路由器。这是一种“单进程多实例”的模拟思路非常适合学习和测试。3. 配置OSPF协议打造高效核心网络OSPF开放最短路径优先协议就像一个高效、智能的团队沟通员。它不会像广播一样到处喊话而是只和建立了“邻居”关系的路由器交换信息并且传递的是整个网络的“地图”链路状态数据库每台路由器根据这张完整的地图自己用算法SPF算法计算出到所有目的地的最佳路径。这种方式的优点是收敛速度快网络规模大时更高效。在我们的拓扑里R1、R2、R3之间的三角形链路我们就用OSPF来管理。首先我们进入FRR的配置命令行。在终端输入sudo vtysh。你会进入一个以ubuntu#或router#开头的命令行界面这就是FRR的配置视图了。我们先从配置R1的OSPF开始。输入configure terminal进入全局配置模式。router# configure terminal router(config)# router ospf router(config-ospf)# router-id 1.1.1.1这里我显式地设置了router-id为1.1.1.1。router-id是OSPF中路由器的唯一标识最好手动设置为一个稳定的IP地址比如环回口地址避免它因为接口IP变化而改变导致邻居关系震荡。接下来我们需要告诉OSPF哪些接口参与OSPF进程以及它们属于哪个区域Area。OSPF通过划分区域来分层管理大型网络我们这个小实验用一个骨干区域Area 0就够了。router(config-ospf)# network 10.31.0.0/24 area 0 router(config-ospf)# network 1.1.1.1/32 area 0network命令后面的网段定义了哪些接口IP落在该范围内这些接口就会启用OSPF。这里我让连接R3的接口10.31.0.1/24和环回口1.1.1.1/32运行在Area 0。注意我没有把连接R2的接口192.168.12.1/24放进OSPF因为那条链路我们计划运行RIP。配置完后输入end退回特权模式然后用write memory保存配置。接着我们以同样的逻辑配置R3。router# configure terminal router(config)# router ospf router(config-ospf)# router-id 3.3.3.3 router(config-ospf)# network 10.23.0.0/24 area 0 router(config-ospf)# network 10.31.0.0/24 area 0 router(config-ospf)# network 3.3.3.3/32 area 0 router(config-ospf)# end router# write memory现在配置R2。R2比较特殊它有两个接口分别连接R1和R3。连接R3的接口10.23.0.2/24我们运行OSPF连接R1的接口192.168.12.2/24则留给RIP。router# configure terminal router(config)# router ospf router(config-ospf)# router-id 2.2.2.2 router(config-ospf)# network 10.23.0.0/24 area 0 router(config-ospf)# end router# write memory配置完成后我们可以检查OSPF的运行状态。在特权模式下使用show ip ospf neighbor命令查看邻居关系是否建立成功。如果一切正常你应该能看到R2和R3互为邻居R1和R3也互为邻居因为R1和R2之间的链路没开OSPF所以它们不是OSPF邻居。再用show ip route ospf命令就能看到通过OSPF协议学习到的路由了。例如在R2上你应该能看到通往1.1.1.1/32R1的环回口和3.3.3.3/32R3的环回口的路由下一跳分别是R1和R3。这个过程可能需要几秒钟的时间进行邻居发现和数据库同步耐心等一下。OSPF配置的关键在于router-id的稳定性和network语句的精确性一定要确保接口IP落在你声明的网段范围内。4. 配置RIP协议兼容老旧设备如果说OSPF是精明强干的现代经理那RIP路由信息协议就像是位老实巴交、按部就班的老员工。它的原理非常简单每个路由器定期比如每30秒向邻居广播自己知道的所有路由信息每条信息附带一个“跳数”经过的路由器数量。邻居收到后把跳数加1再告诉自己的其他邻居。它只关心跳数多少不关心链路带宽、延迟等复杂因素。虽然现在看来效率不高且容易产生环路但在小型、简单的网络或者一些只支持RIP的老设备上它依然有其用武之地。在我们的实验中R1和R2之间的链路就模拟这种场景。配置RIP比OSPF更简单。我们继续在vtysh命令行里操作。首先在R1上配置RIP进程。router# configure terminal router(config)# router rip router(config-router)# version 2 router(config-router)# network 192.168.12.0/24 router(config-router)# redistribute connected这里有几个关键点。第一我指定使用version 2。RIP有两个版本RIPv1是有类路由协议不支持变长子网掩码VLSM和认证广播发送更新。RIPv2是无类路由协议支持VLSM和认证并且采用组播224.0.0.9发送更新更安全高效所以一般我们都用RIPv2。第二network命令和OSPF里的类似指定了运行RIP的接口所在网段。这里我只在连接R2的接口192.168.12.1上启用RIP。第三我加了一条redistribute connected命令。这条命令的意思是将本路由器上直连的路由比如1.1.1.1/32和10.31.0.0/24也注入到RIP协议中通告给RIP邻居。这样R2才能通过RIP学到R1上的这些网络信息。接着在R2上配置RIP。R2的配置和R1对称。router# configure terminal router(config)# router rip router(config-router)# version 2 router(config-router)# network 192.168.12.0/24 router(config-router)# end router# write memory在R2上我暂时没有配置redistribute connected因为目前我们只希望RIP处理这条直连链路。配置完成后可以稍等片刻等待RIP的更新周期然后使用show ip rip命令查看RIP的状态或者用show ip route rip查看通过RIP学到的路由。此时在R1上你应该还看不到从R2学来的RIP路由因为R2的OSPF路由还没有被注入到RIP中。反过来在R2上你应该能看到一条通过RIP学到的、通往1.1.1.1/32的路由下一跳是192.168.12.1R1。这就是RIP从R1那里redistribute connected学到的。这里有一个非常重要的细节RIP默认的管理距离Administrative Distance, AD是120而OSPF是110。管理距离是路由器判断不同路由协议提供的、通往同一目的地的路由条目谁更可信的标尺数值越小越优先。所以如果一台路由器同时通过OSPF和RIP学到了通往1.1.1.1的路由它会优先选择OSPF提供的AD 110认为这条路由更可靠。这个机制在我们接下来的混合路由场景中至关重要。5. 路由重分发让OSPF和RIP握手言和现在我们有了两个独立的“王国”OSPF王国R1-R3-R2三角和RIP王国R1-R2直连。R1和R2是这两个王国的边境城市。R1知道OSPF王国里的所有地方包括R3和3.3.3.3也知道自己RIP王国里的地方1.1.1.1。R2知道OSPF王国里的所有地方也知道从RIP邻居R1那里听说的1.1.1.1。但是OSPF王国里的R3并不知道RIP王国里的1.1.1.1在哪里。同样RIP王国目前只有R1也不知道OSPF王国里的3.3.3.3在哪里。它们之间缺乏信息交流。这就需要“路由重分发”这个外交官出场了。路由重分发顾名思义就是把一个路由协议学习到的路由转换并注入到另一个路由协议中。在我们的拓扑中关键点就是R1和R2这两台同时运行了两种协议的路由器。我们需要在它们身上配置重分发让路由信息在两个协议间流动。通常我们会在更“聪明”的协议OSPF向更“简单”的协议RIP重分发时设置一个度量值metric因为RIP只理解跳数。我们先在R1上配置将OSPF路由重分发进RIP。router# configure terminal router(config)# router rip router(config-router)# redistribute ospf metric 5这条命令告诉RIP进程“把从OSPF学来的所有路由都拿过来贴上跳数5的标签然后通告给你的RIP邻居R2。” 这里我手动设置了度量值为5跳。你也可以不设置FRR会有一个默认的度量值。同样地我们还需要把RIP的路由重分发进OSPF这样R3才能学到1.1.1.1。在R1的OSPF进程下配置router(config)# router ospf router(config-ospf)# redistribute rip subnetsredistribute rip命令将RIP路由引入OSPF。subnets关键字很重要它确保重分发时携带具体的子网掩码信息。OSPF重分发外部路由时默认类型是Type 2E2它只计算外部路由进入OSPF域之后的内部开销不考虑外部路径的代价。对于我们的实验保持默认即可。现在R1就成为了一个双向的“翻译官”。但这样够了吗还不够。因为R2也需要做类似的事情否则R3通过OSPF学到的、通往1.1.1.1的路由下一跳是指向R1的因为R1重分发进来的但R3到R1的流量需要经过R2根据我们的拓扑这可能会形成非最优路径甚至路由环路。更常见的做法是在作为“边界”的路由器R2上进行单向或双向重分发。我们来配置R2让它将OSPF路由重分发进RIP。router# configure terminal router(config)# router rip router(config-router)# redistribute ospf metric 5同时也将RIP路由重分发进OSPF。router(config)# router ospf router(config-ospf)# redistribute rip subnets配置完成后耐心等待几十秒让路由协议完成收敛。然后我们可以在各个路由器上用show ip route查看完整的路由表。这时你应该能看到一个完整互通的路由表。例如在R3上你不仅能看到直连路由和OSPF内部路由10.23.0.0/24,10.31.0.0/24,1.1.1.1/32还能看到一条通过OSPF外部路由标记为O E2学到的、通往192.168.12.0/24R1-R2链路的路由。同样在R1上通过RIP也能看到通往3.3.3.3/32的路由虽然可能经过R2因为R2重分发了OSPF路由进RIP。路由重分发是混合路由网络的核心但也是容易引入路由环路和次优路径的地方配置时需要格外小心通常需要配合路由过滤或路由标签来管理。6. 协议优先级与路由选路深度解析当网络中有多个路由协议同时提供通往同一目的地的路径时路由器怎么决定走哪条路这就是路由选路要解决的问题。前面提到的管理距离AD是决策的第一道关卡。FRR以及大多数路由器内部有一个默认的管理距离表。我们来回顾一下关键协议的默认AD值直连路由Connected的AD是0这是最可信的。静态路由Static的AD是1。OSPF内部路由的AD是110。RIP路由的AD是120。IS-IS路由的AD是115。BGP外部路由的AD是20从eBGP学来的和200从iBGP学来的。在我们的混合网络中就可能出现这样的情况R2要到达1.1.1.1R1的环回口。它可能通过两种方式学到这条路由第一从R1通过RIP协议学来AD是120。第二从R3通过OSPF协议学来因为R1或R2将RIP路由重分发进了OSPFAD是110OSPF外部路由E1/E2的AD也是110但计算方式不同。根据“AD值小者优先”的原则R2会毫不犹豫地选择OSPF提供的路由尽管这条路径可能是R2-R3-R1比直连的R2-R1要远。这显然是一条次优路径。要验证这一点你可以在R2上使用show ip route 1.1.1.1查看具体路由条目看看它的下一跳是谁以及是通过什么协议学到的。为了解决这种次优路径问题我们有几种方法。第一种方法是修改协议的管理距离但这种方法要慎用因为它会影响该协议所有路由的优先级。例如在R2上我们可以将OSPF外部路由的管理距离调大。router# configure terminal router(config)# router ospf router(config-ospf)# distance ospf external 130这条命令将OSPF外部路由E1和E2的AD设置为130大于RIP的120。这样R2就会优先选择RIP传来的路由了。但这种方法比较生硬。第二种更精细的方法是使用路由映射route-map和前缀列表prefix-list或访问控制列表ACL在重分发时进行过滤或打上标签然后基于标签来调整AD或进行选路。例如我们可以只针对1.1.1.1/32这条特定路由在重分发进OSPF时打上一个标签然后在R2上匹配这个标签并为其设置一个更高的AD。这种方法更灵活但配置也更复杂。对于我们的实验小拓扑次优路径可能问题不大。但在生产网络中这可能导致流量绕远增加延迟和链路负载。因此在设计混合路由网络时必须仔细规划重分发点和路由策略理解并控制管理距离的影响。一个最佳实践是尽量避免双向重分发如果不可避免则应在重分发点使用路由过滤只允许必要的路由被重分发并考虑使用路由标签来防止路由环路。你可以通过show ip ospf和show ip rip命令查看协议的详细参数包括默认和当前配置的管理距离这对调试非常有帮助。7. 连通性测试与故障排查实战配置了一大通我们的网络到底通没通是骡子是马得拉出来遛遛。测试连通性最直接的工具就是ping和traceroute。我们从最边缘的设备开始测试。首先测试RIP域内的连通性。在R2上ping R1的环回口地址。sudo ip netns exec R2 ping 1.1.1.1 -c 4如果RIP配置正确且重分发生效这个ping应该是成功的。它走的路径应该是R2 - R1直连RIP链路。接着测试OSPF域内的连通性。在R1上ping R3的环回口。sudo ip netns exec R1 ping 3.3.3.3 -c 4这个ping也应该成功路径是R1 - R3直连OSPF链路。现在测试跨协议域的连通性这是重分发是否成功的关键。在R3上ping R1的环回口1.1.1.1。sudo ip netns exec R3 ping 1.1.1.1 -c 4如果成功说明R1或R2成功地将RIP路由1.1.1.1重分发进了OSPF并且被R3学到了。你可以用traceroute或trace命令来查看实际路径。sudo ip netns exec R3 traceroute 1.1.1.1路径显示可能是R3 - R2 - R1也可能是R3 - R1这取决于你的重分发配置和路由选路结果。同样地在R1上ping R3的环回口3.3.3.3测试RIP到OSPF的反向连通性。如果ping不通别慌网络排错是常态。我们可以按照自底向上的顺序来排查。第一步检查物理虚拟链路。在每个命名空间里用ip addr show和ip link show确认接口状态是UPIP地址配置正确。用ping测试直连邻居的接口IP是否通比如在R1上ping 192.168.12.2在R2上ping 10.23.0.3。如果直连都不通检查VETH配对和命名空间绑定是否正确。第二步检查路由协议邻居关系。在FRR的vtysh里用show ip ospf neighbor查看OSPF邻居状态。正常情况下邻居状态应该是Full/DR或Full/Backup。如果状态卡在Init或2-Way可能是组播问题或Hello参数不匹配。用show ip rip查看RIP是否发送和接收更新。第三步检查路由表。这是最关键的一步。在每台路由器上使用show ip route和show ip route ospf/show ip route rip仔细查看是否学到了你期望的路由。特别注意下一跳地址是否正确。如果缺少某条路由回到重分发配置检查。redistribute命令写对了吗network语句覆盖了正确的接口吗第四步检查重分发和路由过滤。使用show running-config查看当前生效的配置确认重分发命令无误。如果配置了路由映射或过滤列表用show route-map和show ip prefix-list来验证它们是否按预期匹配了路由。第五步使用调试命令。FRR提供了强大的调试功能但生产环境慎用。在特权模式下可以用debug ospf packet和debug rip packet来实时查看协议报文但这会输出大量信息。更推荐使用log-adjacency-changes这类命令记录邻居状态变化。排错过程就像破案需要耐心和逻辑。养成从底层到高层、从简单到复杂的检查习惯大部分问题都能被定位。我在实际项目中就遇到过因为忘记配置router-id导致OSPF邻居反复震荡的问题还有因为接口MTU不一致导致OSPF数据库无法同步的坑这些都是血泪教训。