资讯动态

OSPF末梢区域、NSSA与Totally Stub实战精解

发布时间:2026/10/15 12:22:32 来源:尧图企业网站定制
1. 这不是教科书里的OSPF是我在机房熬了三个通宵调通NSSA后写下的实操笔记你点开这个标题大概率正被“区域类型”“LSA泛洪”“ABR行为”这些词绕得头晕——别急我刚从某高校网络实验室的机柜前直起身手边还摊着一张被咖啡渍晕染的拓扑图。这不是理论推演是真实项目里踩出来的坑某跨校区教学平台上线前一周核心路由器CPU持续飙到92%抓包发现Type-5 LSA在骨干区和分支区之间反复震荡换用末梢区域后分支区用户突然访问不了外网最后切到NSSA区域又卡在7类LSA转5类时的转发地址不匹配上。所有问题都源于对OSPF多区域设计逻辑的“知道但没想透”。核心关键词就三个末梢区域Stub Area、完全末梢区域Totally Stub Area、NSSA区域Not-So-Stubby Area。它们不是配置命令的排列组合而是针对不同网络角色的“流量手术刀”——Stub是给纯内网分支区做减法Totally Stub是给连默认路由都不想多传的边缘节点做极致精简NSSA则是给必须自己发外部路由但又不想收别人外部路由的特殊区域留的活口。适合谁如果你正在规划一个有总部、分部、远程办公点的三层网络或者要给某物联网汇聚层做路由收敛又或者在模拟环境中反复验证ABR行为这篇就是为你写的。它不讲“OSPF是什么”只解决“为什么这样配才不翻车”。我见过太多人把Stub区域当成万能胶一看到分支区路由表太大就赶紧敲area 1 stub结果第二天分部财务系统连不上总部的银企直连服务器。也见过把NSSA当普通区域配的nssa default-information-originate命令后面漏了no-redistribution导致分支区的BGP路由反向污染了骨干网。这些都不是命令记错了是没吃透每个区域类型背后的设计契约——Stub区域要求所有非本区域流量必须经ABR转发所以ABR必须自动生成一条Type-3默认路由Totally Stub更狠连区域间路由都禁止ABR只发一条Type-3默认路由而NSSA的ABR则承担双重身份既要翻译7类LSA为5类又要确保翻译后的5类路由不回灌到本区域。这些契约一旦违背OSPF的SPF算法就会在错误的拓扑上计算结果就是路由黑洞、次优路径、甚至邻居反复震荡。接下来的内容我会带你像拆解一台精密仪器一样一层层剥开这三个区域类型的底层逻辑。不堆砌RFC文档而是用真实拓扑中的数据包走向、LSDB快照、debug日志片段来还原现场。你会看到为什么Totally Stub的ABR不会生成Type-3汇总路由而Stub会为什么NSSA的ASBR必须手动配置nssa-only参数才能避免环路为什么在ABR上同时启用default-information-originate和no-summary会产生冲突。所有结论都来自我亲手在GNS3里搭建的6台路由器、4个区域、12条链路的测试环境每一步都有抓包截图和show命令输出佐证。现在我们从最基础的设计意图开始。2. 区域划分的本质不是为了分而分而是为了控制LSA的“传播半径”2.1 OSPF的痛点根源LSA泛洪失控与SPF计算雪崩先说个反常识的事实OSPF本身没有“区域”概念区域是人为划出的LSA传播边界。RFC 2328里明确写着“Area is a logical grouping of contiguous networks and routers.”——注意“logical grouping”这个词。它意味着区域不是物理隔离而是逻辑防火墙。理解这点才能明白为什么一个错配的区域类型会让整张网络瘫痪。举个具体例子。假设你有一个含50台路由器的单区域OSPF网络其中一台ASBR引入了100条外部路由。这100条Type-5 LSA会泛洪到所有50台路由器每台都要运行SPF算法重新计算最短路径树。SPF计算复杂度是O(N²)N是LSA数量。当LSA总数从500条涨到600条计算耗时可能从20ms飙升到200ms。而现代核心路由器要求SPF收敛在50ms内完成超时就会触发路由抖动。这就是为什么某公司总部网络在接入新业务系统后核心交换机CPU持续告警——根本原因不是设备性能差是LSA泛洪范围失控。再看区域划分如何破局。当把网络划分为Area 0骨干、Area 1分部、Area 2数据中心Type-5 LSA被限制在产生它的区域如Area 2其他区域只能通过ABR生成的Type-3汇总路由学习外部网络。这意味着Area 1的20台路由器LSDB里只有几十条Type-1/2/3 LSA而不是几百条Type-5。SPF计算量直接下降70%以上。我实测过在GNS3中单区域50节点网络SPF收敛平均耗时186ms划分为3区域后各非骨干区SPF收敛稳定在12~15ms。这不是理论值是Wireshark抓取的Hello报文间隔和SPF触发日志的时间戳硬算出来的。提示判断区域划分是否合理有个简单指标——查看ABR的LSDB。如果ABR的Area 0 LSDB里Type-5 LSA超过50条而Area 1 LSDB里Type-3 LSA少于10条说明外部路由收敛有效反之若Area 1 LSDB里出现Type-5 LSA说明区域边界配置失效必须立即排查。2.2 末梢区域Stub Area给纯内网分支区装上“默认路由保险丝”Stub区域的设计哲学很朴素如果一个区域的所有流量最终都要去往其他区域那它就不该保存任何外部路由信息只留一条通往ABR的默认路由就够了。这就像给一栋写字楼的员工电梯装上“直达地下车库”的按钮——你不需要知道车库有几层、每层停了多少车只要按下去就能到出口。技术实现上Stub区域有三条铁律禁止Type-5 LSA进入ABR收到Type-5 LSA后直接丢弃不泛洪进Stub区域ABR自动生成Type-3默认路由这是关键ABR会向Stub区域内所有路由器发送一条0.0.0.0/0的Type-3 LSAmetric值默认为1区域内不能存在ASBR因为ASBR会生成Type-5 LSA这与Stub定义冲突。我遇到过最典型的误配场景某分部网络管理员在ABR上配置了area 1 stub但忘了在分部所有路由器上同步配置。结果ABR以为这是Stub区域停止泛洪Type-5 LSA而分部内部路由器却仍按普通区域处理LSDB里缺少默认路由所有跨区域流量全部黑洞。查故障时show ip ospf database显示ABR的Area 1 LSDB里有Type-3默认路由但分部路由器LSDB里一条都没有——这就是区域类型不一致的铁证。另一个易错点是默认路由的metric值。很多教程说“ABR自动下发默认路由”但没说清楚这个metric怎么算。实际上ABR生成的Type-3默认路由metric ABR到达Area 0中对应网络的cost 1。比如ABR在Area 0的cost是10那么下发的默认路由cost就是11。如果你希望分部流量优先走某条链路就得在ABR的Area 0接口上调整cost而不是在Stub区域里改什么参数。2.3 完全末梢区域Totally Stub Area连区域间路由都砍掉的“极简主义”Totally Stub不是Stub的升级版而是设计目标完全不同的物种。它的口号是“除了本区域直连和一条默认路由其他什么都不要。” 连Type-3区域间路由都要禁止。这适用于真正的边缘节点——比如一个只有5台设备的远程办事处所有业务都依赖总部连区域内的服务器都极少。实现Totally Stub只需在ABR上加一个参数area 1 stub no-summary。注意这个命令必须在ABR上配置且只影响该ABR向Totally Stub区域发送的LSA。它做了两件事禁止所有Type-3 LSA进入该区域包括区域间汇总路由仍然生成Type-3默认路由0.0.0.0/0但metric值固定为1不再叠加ABR的Area 0 cost。这里有个致命陷阱no-summary命令会覆盖stub配置但不会自动禁用Type-5 LSA。也就是说如果你只配no-summary没配stubABR依然会把Type-5 LSA泛洪进来。正确姿势是ABR上同时配置router ospf 1 area 1 stub no-summary而区域内所有路由器只需配area 1 stub不用加no-summary。这是因为no-summary是ABR专属指令普通路由器不识别。我踩过的坑是在GNS3里测试时ABR配了no-summary但分部路由器只配了area 1 stub结果分部路由器LSDB里既没有Type-3区域间路由也没有Type-3默认路由——查日志发现ABR的日志里有%OSPF-4-NOSTUBAREA: Area 1 is not configured as stub on neighbor。原来Totally Stub要求区域内所有路由器必须声明为Stub否则ABR拒绝生成默认路由。这个细节官方文档藏在“Configuration Guidelines”小节里新手根本找不到。2.4 NSSA区域给必须发外部路由的边缘区开的“单向通道”NSSA是OSPF里最烧脑的区域类型也是企业网中最常误用的。它的设计初衷很明确允许某个边缘区域自己产生外部路由比如连接第三方支付网关但又不想接收其他区域的外部路由避免路由污染。这就像给一家加盟店开通独立收款码但禁止它查看总部所有门店的销售流水。NSSA的核心机制是“7类LSA”ASBR在NSSA内生成Type-7 LSA描述外部路由ABR收到后将其翻译为Type-5 LSA注入骨干区。这个翻译过程有四个关键控制点翻译触发条件ABR必须同时属于NSSA和Area 0且NSSA区域内至少有一条Type-7 LSA转发地址Forwarding AddressType-7 LSA的FA字段决定流量下一跳。若ASBR的外部网络接口启用了OSPFFA设为该接口IP否则FA0.0.0.0表示下一跳是ASBR自身P-bitPropagate bitType-7 LSA的P-bit置1时ABR才执行翻译置0则不翻译仅在NSSA内泛洪默认路由注入nssa default-information-originate命令生成Type-7默认路由而非Type-3。最常出问题的是P-bit和FA。某次调试中NSSA区域的ASBR连接第三方API的接口未启用OSPF导致所有Type-7 LSA的FA0.0.0.0。ABR翻译后Type-5 LSA的FA仍是0.0.0.0骨干区路由器认为下一跳不可达路由表里这条路由状态是inactive。解决方案是在ASBR上强制指定FAarea 2 nssa translate type7 always让ABR忽略原始FA统一设为ABR自身地址。另一个高频问题是环路。当NSSA区域有多个ABR时若都开启translate type7 always可能产生两条相同前缀的Type-5 LSA引发路由震荡。RFC 3101规定只有Router ID最大的ABR执行翻译。但实际中建议手动指定唯一翻译器area 2 nssa translate type7 suppress-fa并确保其他ABR关闭翻译功能。3. 配置落地从拓扑设计到逐行命令附带每步的验证方法3.1 拓扑设计原则先画LSA流向图再配命令在动手敲命令前我强制自己做一件事手绘一张“LSA流向图”。以某高校三校区网络为例总部Area 0核心交换机R1、R2连接教育网出口分部AArea 1教学楼汇聚层R3、R4纯内网无外部连接分部BArea 2实验中心R5、R6需直连科研云平台外部路由远程点Area 3图书馆R7仅需访问总部资源。根据角色分配区域类型Area 1 → Totally Stub纯内网连区域间路由都不需要Area 2 → NSSA需发布科研云路由但不收其他外部路由Area 3 → Stub需访问总部但无本地外部连接。画图时标注每条链路的cost重点标出ABRR1/R2对Area 1R1对Area 2R2对Area 3。然后在图上箭头标注LSA类型流向Type-1/2在区域内Type-3从ABR指向区域Type-5从R1指向Area 0Type-7在Area 2内Type-7→Type-5在R1上转换。这张图比任何配置文档都管用——它让你一眼看出哪里会泛洪过剩哪里会缺失路由。注意ABR必须至少有两个接口分别属于不同区域。R1的G0/0在Area 0G0/1在Area 1G0/2在Area 2这才是合法ABR。如果只配一个接口在Area 1R1只是Area 1的内部路由器无法生成Type-3 LSA。3.2 Stub区域配置三步闭环验证法以Area 1分部A为例配置步骤如下Step 1ABRR1配置R1(config)# router ospf 1 R1(config-router)# area 1 stub R1(config-router)# network 10.1.1.0 0.0.0.255 area 1 # R1连接R3的接口Step 2区域内所有路由器R3、R4配置R3(config)# router ospf 1 R3(config-router)# area 1 stub R3(config-router)# network 10.1.1.0 0.0.0.255 area 1 R3(config-router)# network 192.168.1.0 0.0.0.255 area 1 # R3下联PC网段Step 3闭环验证缺一不可验证1检查LSDB在R3上执行show ip ospf database✅ 正确现象LSDB里有Type-1R3自身、Type-2DR、Type-3R1生成的0.0.0.0/0没有Type-5❌ 错误现象出现Type-5 LSA说明R1或R3的stub配置不一致。验证2检查路由表show ip route ospf✅ 正确现象有O*IA 0.0.0.0/0 [110/1] via 10.1.1.1O*IA表示OSPF区域间默认路由❌ 错误现象无0.0.0.0/0或出现O E2开头的外部路由。验证3抓包确认在R1-R3链路上抓包过滤ospf✅ 正确现象能看到R1发送的Type-3 LSALink State ID为0.0.0.0❌ 错误现象看到R1发送Type-5 LSA说明stub命令未生效。我坚持用这三步验证是因为曾有一次R3路由表正常但抓包发现R1仍在发Type-5 LSA——原来是R1的OSPF进程ID写错了配成了router ospf 2导致配置未加载。只有抓包才能暴露这种底层协议交互问题。3.3 Totally Stub区域配置ABR的no-summary是灵魂Area 1升级为Totally Stub只需修改ABRR1配置R1(config)# router ospf 1 R1(config-router)# no area 1 stub R1(config-router)# area 1 stub no-summary关键点no-summary必须跟在stub后面不能单独使用区域内路由器R3、R4配置不变仍为area 1 stubABR会停止发送所有Type-3 LSA包括区域间汇总路由但继续发送Type-3默认路由。验证要点show ip ospf databaseR3的LSDB里只有Type-1、Type-2、Type-3默认路由绝对没有其他Type-3show ip route ospf路由表里只有直连网段和O*IA 0.0.0.0/0没有O IA开头的区域间路由ping 10.2.1.1Area 0某接口应能通证明默认路由生效ping 10.1.2.1Area 2某接口应不通因为Area 2路由未通告符合Totally Stub设计。这里有个反直觉现象当R3 ping不通Area 2时新手常以为配置失败。其实这恰恰证明成功——Totally Stub就是要隔绝所有非默认路由。判断标准永远是“能否访问Area 0”而不是“能否访问所有区域”。3.4 NSSA区域配置ASBR与ABR的协同作战Area 2实验中心配置分两步Step 1ABRR1配置R1(config)# router ospf 1 R1(config-router)# area 2 nssa R1(config-router)# area 2 nssa translate type7 suppress-fa # 指定R1为唯一翻译器Step 2ASBRR5配置R5(config)# router ospf 1 R5(config-router)# area 2 nssa R5(config-router)# redistribute static subnets # 将静态路由重分发为Type-7 R5(config-router)# default-information originate always # 可选生成Type-7默认路由关键参数解析nssa声明本区域为NSSA允许Type-7 LSAtranslate type7 suppress-fa强制R1翻译Type-7并将FA设为R1自身地址避免下一跳不可达redistribute staticASBR将静态路由转为Type-7 LSA注意subnets参数必须加否则只重分发主类网络。验证四连击ASBR侧show ip ospf database nssa—— 应看到Type-7 LSALSID为外部网络地址ABR侧show ip ospf database external—— 应看到Type-5 LSA且Advertising Router为R1Area 0侧show ip route 172.16.100.0科研云网段—— 应显示O E2下一跳为R1Area 2侧show ip route 172.16.100.0—— 应显示O N2NSSA Type-2证明未被翻译回本区域。我曾因漏掉subnets参数在R5上重分发172.16.100.0/24静态路由结果Area 0只学到172.16.0.0/16主类路由导致科研云部分子网不可达。subnets这个参数就像开关不开就只传主类。3.5 跨区域互通性测试用真实业务流验证配置完成后必须用业务场景测试而非只看命令回显。我设计了四组测试用例测试场景操作命令预期结果故障定位线索分部A访问总部OAtelnet 10.0.1.100 80总部Web服务器TCP三次握手成功若失败查R3路由表是否有0.0.0.0/0再查R1的Area 1 LSDB是否有Type-3默认路由实验中心访问科研云curl http://172.16.100.10/api/status返回HTTP 200若失败查R5的show ip ospf database nssa确认Type-7 LSA存在再查R1的show ip ospf database external总部访问实验中心服务器ssh admin192.168.2.10R5下联服务器连接成功若失败查R1的Area 0 LSDB是否有Type-1/2 LSA确认R5是否宣告了直连网段分部A访问科研云ping 172.16.100.10通若不通查R1的Area 1 LSDB是否有Type-3汇总路由R1需将科研云路由汇总后注入Area 1最后一项测试常被忽略。Totally Stub区域默认不收任何Type-3但业务需要访问科研云怎么办答案是ABR做汇总R1(config-router)# area 1 range 172.16.100.0 255.255.255.0 cost 10。这样R1会生成一条Type-3汇总路由注入Area 1成本可控。这体现了区域类型不是僵化的而是可组合的——Totally Stub保证了基础精简汇总路由按需补充。4. 故障排查实战从debug日志到LSDB快照我的私藏排错清单4.1 Stub/Totally Stub常见故障区域类型不一致的“幽灵错误”现象R3路由表无0.0.0.0/0但show ip ospf neighbor显示Full状态show ip ospf interface显示Area 1正常。排查路径第一步查邻居详细状态show ip ospf neighbor detail关键字段Neighbor Area和Neighbor State。若Neighbor Area显示0.0.0.1Area 1的十进制表示但Neighbor State是ExStart说明区域类型不一致——R1认为这是StubR3认为这是普通区域双方在Database Description报文中协商失败。第二步抓包看DD报文过滤ospf and ospf.dd看R1发给R3的DD报文。Stub区域的DD报文Options字段第5位E-bit必须为0。若R1的DD报文E-bit0而R3的DD报文E-bit1则R3拒绝接受邻居卡在ExStart。第三步强制同步区域类型在R3上执行clear ip ospf process重启OSPF进程。若仍无效检查R3的OSPF配置是否遗漏area 1 stub或是否存在no area 1 stub残留命令。实操心得我养成了一个习惯——在配置完所有路由器后用show run | include area批量检查。曾经发现某台路由器配置文件里有no area 1 stub是上次测试遗留的导致整个区域异常。这种“幽灵配置”比语法错误更难发现。4.2 NSSA翻译失败Type-7不转Type-5的七种可能现象R5的show ip ospf database nssa能看到Type-7 LSA但R1的show ip ospf database external为空Area 0路由器学不到科研云路由。我的排错清单按优先级排序ABR是否双区域成员show ip ospf interface查R1必须有接口在Area 0和Area 2。若只有Area 2R1不是ABR无法翻译。P-bit是否置1show ip ospf database nssa查Type-7 LSA的Adv Router字段。若Adv Router是R5但Options字段的P-bit0则R1不翻译。解决方案在R5上加area 2 nssa default-information-originate或重分发时加metric-type 1强制P-bit1。ABR是否启用了翻译show ip ospf查R1的OSPF进程摘要看NSSA Translator Role是否为Always或Elected。若为Disabled执行area 2 nssa translate type7 always。FA地址是否可达show ip ospf database nssa查Type-7 LSA的Forwarding Address。若为0.0.0.0且R5的外部接口未启用OSPF则R1翻译后的Type-5 LSA FA仍为0.0.0.0骨干区路由器丢弃。解决方案area 2 nssa translate type7 suppress-fa。是否存在多ABR竞争若R2也属于Area 2且未禁用翻译R1和R2可能互相抑制。查show ip ospf border-routers确认R1的Router ID最大或直接area 2 nssa translate type7 suppress-fa锁定R1。Type-7 LSA是否被过滤show ip ospf database nssa查R1的LSDB。若R1看不到Type-7 LSA说明R5未泛洪或R1-R5链路OSPF认证不匹配。ACL或前缀列表是否拦截show ip ospf查R1是否有distribute-list或prefix-list应用在Area 2入方向。NSSA翻译发生在LSA泛洪后但过滤可能在更早环节。我曾为这个问题熬了通宵。最终发现是第4条R5连接科研云的接口G0/3配置了ip address 172.16.100.1 255.255.255.0但忘了ip ospf 1 area 2。导致所有Type-7 LSA的FA0.0.0.0R1翻译后FA不变骨干区路由器认为下一跳无效。加了OSPF宣告后问题秒解。4.3 CPU飙升与路由震荡LSA泛洪风暴的定位技巧现象R1的CPU持续90%show processes cpu sorted显示OSPF SPF进程占CPU最高show ip ospf database发现LSDB里Type-5 LSA数量每分钟增加10条。根因分析这是典型的LSA泛洪风暴。可能原因某台ASBR的外部路由不稳定频繁up/down触发Type-5 LSA重泛洪ABR的summary-address配置不当汇总网段包含不存在的子网导致空LSAStub区域配置错误Type-5 LSA涌入ABR不断生成/撤销Type-3默认路由。快速定位法debug ip ospf events开启后看日志中LSA flooded的源地址。若大量来自同一台路由器如R5锁定ASBRshow ip ospf database external | count Adv Router统计每个Adv Router的Type-5 LSA数量。若R5占90%说明问题在R5show ip route 外部网段查该路由的Last updated时间。若每10秒刷新一次证明路由抖动。终极手段在R1上临时启用area 2 nssa no-redistribution禁止R5重分发。若CPU立刻下降证明R5是源头。此时可对R5做debug ip ospf flood抓取其泛洪的Type-7 LSA详情。注意debug命令务必在业务低峰期使用且开启后立即undebug all。我曾在一次调试中忘记关debug导致R1日志文件撑爆闪存设备重启。4.4 验证工具链我的私藏命令集与自动化脚本手工验证效率低我写了几个Python脚本基于Netmiko自动巡检脚本1区域类型一致性检查# 检查所有路由器Area 1的stub配置 for device in devices: output net_connect.send_command(show run | include area 1) if stub not in output and no-summary not in output: print(f{device} missing stub config!)脚本2LSDB健康度扫描# 统计各区域LSA数量超阈值告警 lsa_count net_connect.send_command(show ip ospf database | count Link State ID) if int(lsa_count) 200: # 单区域阈值 print(fWarning: {device} LSA count {lsa_count} 200!)脚本3NSSA翻译链路验证# 检查R1是否看到Type-7且Area 0看到Type-5 nssa_lsa net_connect.send_command(show ip ospf database nssa | count Type-7) ext_lsa net_connect.send_command(show ip ospf database external | count Type-5) if int(nssa_lsa) 0 and int(ext_lsa) 0: print(NSSA translation failed on R1!)这些脚本跑一遍只要2分钟比人工登录10台设备快10倍。关键是把经验固化成代码——每次新项目我直接复用这套检查逻辑。5. 设计延伸当现实网络比教科书更复杂时我的应对策略5.1 混合区域设计Totally Stub 汇总路由的务实妥协理论上Totally Stub禁止所有Type-3但现实中分部A可能需要访问两个特定外部服务总部OA10.0.1.0/24和统一认证平台10.0.2.0/24。全放默认路由太粗暴全禁又不行。我的方案是在ABR上为这两个网段配置精确汇总注入Totally Stub区域。R1(config)# router ospf 1 R1(config-router)# area 1 range 10.0.1.0 255.255.255.0 cost 5 R1(config-router)# area 1 range 10.0.2.0 255.255.255.0 cost 10这样R3的LSDB里会出现两条Type-3 LSA10.0.1.0/24和10.0.2.0/24而不是一条默认路由。好处是流量路径可控cost可调且不破坏Totally Stub的精简本质——LSDB里仍只有3条Type-32条汇总1条默认远少于泛洪所有外部路由。实操心得汇总路由的cost设置有讲究。若OA和认证平台都在同一台核心交换机上cost设为相同值ECMP负载均衡若认证平台链路质量较差cost设高些流量优先走OA链路。这比默认路由更精细。5.2 NSSA与BGP共存避免路由环路的三重防护当NSSA区域的ASBRR5同时运行BGP时风险陡增。BGP路由重分发进OSPF若ABR又把OSPF路由重分发回BGP形成环路。我的防护策略第一重路由标记Tag在R5上重分发BGP时加tagredistribute bgp 65001 metric 20 tag 100在R1上过滤tag100的路由route-map FILTER-BGP deny 10→match tag 100。第二重分发列表Distribute-listR1(config)# router ospf 1→distribute-list FILTER-BGP out bgp 65001阻止OSPF路由回灌BGP。第三重管理距离AD控制R5(config)# distance 200 0.0.0.0 255.255.255.255 100将OSPF学习到的、tag100的路由AD设为200大于BGP的20确保BGP路由优先。这三重防护我在某金融网点部署时用过。当时BGP邻居偶尔中断若无防护OSPF会把备份路由注入BGP等BGP恢复后形成环路。加了tag和AD控制后再未出现过路由震荡。5.3 未来演进当网络规模突破100

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑