《网络、域控与信息安全》

面对“为什么、依据、合理性”拷问,该如何应对?

与这样喜欢刨根问底、追求逻辑严密、要求明确依据的人打交道,需要一些策略,以避免陷入无休止的争论,同时保持沟通的有效性。这里有几个关键点:

1. 逻辑严密,确保信息充分

这些人通常重视逻辑和证据,因此:

  • 提供明确的事实和数据:如果你的观点基于某些事实或数据,尽量提供可靠的来源或实例。
  • 结构化表达:像写论文一样,先提出观点,然后给出理由,最后总结推论。
  • 预判问题:提前思考对方可能的疑问,准备好应对方案。

示例: ❌ “这个方法更好。”

✅ “这个方法更好,因为它减少了50%的错误率,提升了20%的效率,这些数据来自我们上个月的测试。”

2. 反问对方的标准,引导其明确界限

如果对方一直质疑“为什么”、“依据是什么”,你可以:

  • 让对方明确标准:询问“你认为合理的标准是什么?”“在什么情况下你会接受这个结论?”
  • 反问合理性:如果对方对你的说法有异议,可以要求对方提供他们的标准或反例。

示例: ❌ “你这样说不合理。”

✅ “你认为合理的标准是什么?如果是X、Y、Z,那我们可以逐一对比。”

3. 避免陷入“无限追问”

有些人会一直追问“为什么”直到所有问题都被推到哲学层面,这时可以:

  • 界定讨论范围:比如“我们这里讨论的是技术可行性,不涉及社会伦理”。
  • 给出“停止条件”:比如“如果我们能证明A、B、C成立,就能推导出D,D就算合理。”

示例: ❌ “你这个方案为什么合理?”

✅ “在A条件下,这个方案比B更节省成本,比C更易维护,因此它符合我们的需求。”

4. 利用权威、规则和已有共识

当对方总是追问“依据是什么”,可以:

  • 引用权威:行业标准、专家意见、政策文件等。
  • 回归规则:如果有规定、合同、流程,那就是天然的依据。
  • 强调共识:如果团队之前已有类似决定,可以强调“我们过去是这样做的,结果也符合预期。”

示例: ❌ “你凭什么这么做?”

✅ “行业标准 ISO 9001 也推荐这样做,并且我们公司的最佳实践也是这样。”

5. 识别对方的真正意图

有时候,对方并不是想刁难,而是:

  • 想确认你是否思考周全:这时要展现你的逻辑能力,而不是防御性回应。
  • 对决策不信任:如果是这样,可能需要增加透明度和沟通。
  • 想显示自己更专业:这种情况下,适当认可对方观点,避免陷入无谓争执。

示例: ❌ “你老是问为什么,我已经解释过了!”

✅ “你的问题很好,看来你也关心这个决定的合理性。我可以再详细解释一下。”

6. 应对“模糊边界”问题

有些人会不断追问“是否绝对正确”或者“是否适用于所有情况”,但现实世界大多数决策都不是100%确定的。这时:

  • 承认不确定性,但提供最优解:“确实,这个方案不是唯一最优的,但在现有条件下,它是最合适的。”
  • 设定适用范围:“这个方法适用于X场景,在Y场景下可能有更好的选择。”

示例: ❌ “这个方案是不是绝对合理?有没有更好的?”

✅ “在目前的资源和时间条件下,这个方案是最优的。如果情况变化,我们可以再评估。”

7. 适当限制讨论,避免无休止争论

如果对方不断追问,导致讨论无法推进:

  • 设定讨论结束的条件:“如果没有新的信息,我们可以先执行这个方案。”
  • 时间限制:“我们可以再讨论10分钟,然后做决定。”
  • 引入第三方裁决:请主管、专家、团队一起评估,而不是让个人对抗。

示例: ❌ “你还是没能让我信服。”

✅ “我们已经讨论了核心因素,如果你有更好的方案,可以提出具体建议,我们可以评估。”

忙得像陀螺?运维高效工作的秘密

优化工作方式可以从 时间管理、准备策略、能力提升 三个方面入手。

  1. 时间管理:提高效率,减少浪费

① 设定优先级(80/20 原则)

  • 重要且紧急(立即处理)
  • 重要但不紧急(提前规划)
  • 紧急但不重要(尽量简化或委派)
  • 不重要不紧急(减少或丢弃)

② 时间块管理(番茄工作法/深度工作)

  • 设定 60-90 分钟的专注时间段
  • 适当安排休息,避免疲劳影响效率
  • 将类似任务批量处理,减少切换成本

③ 避免低效工作

  • 减少不必要的会议,确保会议有明确议题和结论
  • 限制碎片化信息干扰(如微信、邮件设定特定查收时间)
  • 使用工具(如 ToDoList、Notion、滴答清单)跟踪任务进度
  1. 准备策略:提前规划,降低风险

① 预留缓冲时间

  • 对于项目或任务,提前规划多一步,留出 10%-20% 的时间应对突发情况
  • 先处理关键路径上的任务,确保整体进度不受阻

② 复盘与改进

  • 记录每天/每周的工作重点,总结哪里可以优化
  • 复盘失败经验,找到影响效率的关键问题并调整策略

③ 养成随手记录的习惯

  • 重要的知识点或灵感及时记录,避免信息遗失
  • 形成自己的知识库,提高下次类似任务的执行效率
  1. 工作能力:持续提升,减少低效努力

① 针对性学习

  • 识别当前工作中的薄弱点,优先提升影响最大的技能
  • 学习时以实践为主,直接在工作场景中应用新方法

② 迭代优化流程

  • 发现重复性任务,尝试优化或自动化(如脚本、模板化)
  • 观察团队或行业中高效的方法,适当引入自己的工作方式

③ 适当寻求帮助

  • 遇到瓶颈时,可以向更有经验的人请教,避免浪费时间钻牛角尖
  • 团队协作时,合理分工,提高整体效率

信息运维难以使用番茄时钟?不如换一种方式

  1. 设定“可调整的时间块”

核心思路:与其固定 25/5 分钟的番茄钟,不如划分 上午、下午各1-2个专注时间段,在这些时间段内尽量减少非必要的打扰(如非紧急问题推迟处理)。 示例(适合桌面运维的时间安排):

  • 上午:09:00-10:30 处理已知问题、常规维护任务
  • 中午:10:30-12:00 处理突发需求、用户请求
  • 下午:14:00-15:30 进行优化工作、技术学习

晚些时间:15:30-17:30 复盘当天问题、完成未尽任务

✅ 批量处理相似任务(减少切换成本)

  • 案例1:上午统一处理 Windows 更新相关问题,下午再处理软件兼容性问题,而不是随机接收所有问题。 & 案例2:每小时或半小时批量回复 IM / 邮件,而不是随时被打断。
  1. 让准备工作更充分,减少突发问题带来的混乱

✅ 提前准备常见问题的方案(降低重复工作)

  • 文档化解决方案:常见问题(如打印机故障、VPN 连接失败)建立内部 FAQ,减少重复解答的时间。
  • 编写批处理或脚本:针对常见运维操作(如清理缓存、修复网络)编写小工具,提高效率。

✅ 关键任务前预留“缓冲时间”

例子:计划 10:00 开始远程部署某个更新,可以 09:45 预留 15 分钟检查关键配置,避免出现意外时手忙脚乱。

  1. 提升工作能力,减少时间浪费

✅ 形成自己的知识库,提高查找效率

整理并维护自己的 故障处理笔记,遇到类似问题时可以快速找到解决方案,减少重复查找的时间。 可以用 Notion、OneNote 或 Typora 记录运维经验,或者用 Excel 建立一个 运维案例表,方便快速查询。

✅ 适当使用自动化工具

远程运维时,尽量用 PowerShell、批处理或 Python 自动化部分重复性任务(如批量安装软件、获取设备信息)。 设置组策略(GPO)或 SCCM、MDT 进行部分自动化部署,减少手动操作的时间。

  1. 处理突发事件时,减少干扰和时间浪费

✅ 设定“突发问题的优先级”(减少低优先级干扰)

  • 用户问题 ≠ 全都必须立刻处理,先判断是否紧急:
  • 高优先级(影响多人、业务中断)→ 立即处理
  • 中优先级(影响单个用户,但有临时解决方案)→ 记录并安排时间
  • 低优先级(影响小,可由用户自行尝试解决)→ 引导用户查看 FAQ 或提交工单

✅ 预设“应对话术”,减少被无效打扰

用户总爱问 “我这个电脑卡了怎么办?”,可以直接提供“检查任务管理器 -> 关闭占用高的进程”这类简短方案,避免每次都手把手解决。 可以引导用户提交工单或使用 FAQ,而不是随时被打断处理小问题。

总结:适应运维的时间管理方式

  • ✅ 时间管理:不必强行使用番茄钟,可以改用 时间块+批量处理 的方式。
  • ✅ 准备充分:提前整理常见问题方案,减少重复处理。
  • ✅ 能力提升:建立知识库 + 适当用自动化工具提升效率。
  • ✅ 减少干扰:设定问题优先级,减少低优先级问题的打扰。

创建域控

工作组的不足

没安装域控的情况下,如果其他服务器有该电脑的同名同密码的账户,可直接输入此账户访问网络资源,这比较危险。

  • 没办法统一管理
  • 没办法集中身份验证

域环境说明

有活动目录的计算机就是域控制器,域控制器就是中央,域用户就是成员,组策略就是指示。

域控与成员之间有一套信任密钥机制(Netlogon 网络登录服务),默认四十多天,相关主机还原操作易造成信任丢失,只能重新加入到域了。

另外,域控不能用 Ghost,需要用 wim 安装,因为SID不能重复。

集中身份验证说明

之前的信任密钥加密生成的,用做身份验证,域控还会有域控自己的一套密钥交再给计算机,用来完成访问域控网络其他计算机资源。

由密钥解密后的域用户、组、本地用户,加上一些系统设置的特权,绑定到计算机的令牌。域成员之间的访问,需要将令牌传递到域控。

注意:域控坏了,此前登录过的账户在本地还可以的,因为有缓存,但也可以设置不让登录。

DNS 定位域控制器说明

DNS 作用负责将域名解析成 IP 地址。域控向 DNS 注册 SRV(服务器资源记录),计算机通过 SRV 记录找到域控。

域名解析不是由本地连接的 DNS 解析的,域控只要能上网,它就能够解析出来,是不需要指向 Internet 上的 DNS。反而,将域控指向 Internet 上的 DNS 注册 SRV 是不对的。

另外,带回家的笔记本开机比较慢,因为只有一个 223.5.5.5,不是域控 DNS,域控计算机每次开机,都试图多次通过 DNS 加入到域,所以开机时间比较长,所以需要设置主备 DNS。

安装活动目录

  • 上网模式:仅主机;IP 配置:192.168.0.99/24 192.168.0.1
  • 勾选 AD域服务、DNS服务器,一直下一步

选择新林,注意带 .com、.net 等此类域名。有关【林功能级别】和【域功能级别】则是多域环境下的域控版本兼容性,有黄色提示“无法创建DNS委派”不用管,下一步。

SYSVOL是放组策略的,必须是 NTFS 格式。

重启后用命令重启下网络登录服务。如果缺少服务有可能找不到域控服务器,确保如图所示的这类几个文件是完整的。

net stop netlogon
net start netlogon

将计算机加入域控

在域控主机进入【Active Directory 用户和计算机】,创建【组织单位】 并接着创建用户即可开始测试。

把域用户添加到本地管理员组

在 win10 【此电脑】的【管理】,【组】里的 administrators 创建。

参考资料

添加计算机到域,测试软件限制

软件限制规则

参考:https://learn.microsoft.com/zh-cn/windows-server/identity/software-restriction-policies/work-with-software-restriction-policies-rules

路径规则

路径规则只能限制在某个具体路径下的程序,如果域用户将记事本的程序文件复制到别的位置(比如桌面),那么这个限制便不起作用了。

哈希规则

哈希规则是指将所要限制的程序文件生成一个唯一的哈希值,这样无论这个程序文件被放在什么路径下,只要哈希值相符,那么它便会被禁用。

但是使用这种方法需要有一个前提,即在制定限制策略时所选择的生成哈希值的文件与所要限制的文件必须是一摸一样,也就是要求这两个程序文件的版本要一致。

使用组策略集中管理计算机和用户

管理计算机(计算机配置)和管理用户(用户配置)是两回事。计算机、用户分别对应计算机配置、用户配置,并在其对应的组织单元有相应的计算机名、用户名,组策略才会生效。

管理计算机(以软件限制作为测试)

使用域控将计算机添加到域的组织单元。

软件策略采用哈希规则对 notepad 进行限制。

管理域用户(以注册表限制作为测试)

创建组织单元用户

在【用户配置】->【管理模板】->【系统】中,找到“阻止访问注册表编辑工具”。

之后,在一台非域计算机上进行加域,加域重启后打开注册表。

使用组策略部署软件

.exe 需要打包成 .msi 格式才能自动安装,使用【计算机配置】安装,将不能采用【在登录时安装此程序】的选项。

组织单元中还有一层子组织单元(为了方便叙述,将其表述为父级、子级目录),如果组策略在父目录,将不生效于子目录,子目录的组策略也不会影响父目录。

组策略提供的软件安装属于一次性的安装策略,之后卸载再登录也不会安装了,除非注销登录到一台新机器上。

安装软件

适合安装钉钉、飞书、企业微信、WPS2019大小及以下的软件,不太适合Office、Autodesk等上GB的大型软件,越大的软件安装时间越长,开机等待时间越久。

以两个不同版本的 nodejs.msi 做为测试,以及共享软件文件夹 Everyone 的【共享】、【安全】只保留读取,还有相关测试组织单元及用户,如图。

在【组策略对象】创建组策略,把相应组策略拖入要应用的组织单元,右击【编辑】,进入到【用户配置】-> 【策略】-> 【软件安装】,右击其【属性】,添加网络共享的软件目录。(图片可放大查看,稍有不周,对此以后留心。)

右击【软件安装】,选择【数据包】,添加相应安装软件,选择【已分配】;之后在安装软件的【属性】中选择【在登录时安装此应用程序】。

然后在域控命令行中输入 gpupdate,并查看其中组织单元中的域用户登录情况。

升级软件

不少软件是需要删除旧版软件才能安装新版,稳妥起见可选替换。

不同电脑登录组织单元的同一域账户,需要在以前的主机注销该账户,才能保证登录下一台组策略生效。

同上,右击【软件安装】,选择【数据包】,添加相应安装软件,并在新版本的【属性】中选择 【在登录时安装此应用程序】。

勾选 【现有程序包所需的升级】(不勾选,易不生效)

查看结果

参考资料

添加备份域控制器实现容错

原理

在设置IP地址的【高级】选项中,可以设置三个以上备用的DNS。BTW,顺便留意此类问题 — 解决win10(1809)加域后,域管理员无权限设置

增加一至两台的备份DC,需要备用 DNS,当主DC出现问题,可以通过备用DNS连接到备用DC。

添加备份

安装一台Server加入到域,并用 administrator 登录到域,然后在【仪表板】->【管理】->【添加角色和功能向导】选择【DNS服务器】、【Active Directory 域服务】。

将此服务器提升为域控制器,并添加到现有域

选择需要备份的主DC

测试效果

AD、组策略、MMC检查

打开【Active Driectory 用户和计算机】、【DNS 管理器】、【组策略管理器】查看内容是否备份过来。

【运行】-> MMC ->【文件】->【添加/删除管理单元】,加入两个【Active Driectory 用户和计算机】,并其中一个域中创建账户,刷新测试效果。

主域断网测试连续性

主域 DC 禁用网卡,断网

配置备份域的DNS

测新注册的域用户登录

通过运行Repadmin /showrepl命令,可以查看域控服务器之间的复制状态,以确定主备域控服务器的角色。

参考资料

将域控制器迁移到新买的服务器

达到效果:替换域控,让域用户无感。新增一台虚拟机 new dc 做为域控迁移换新演示。

旧的 DC 降级,新的保持和旧的 DC 计算机名、IP 地址保持一致。

旧 DC 降级

做好旧 DC 的 IP 地址记录。

选择 【启用删除角色和功能向导】,然后反向勾选【Active Diretory域服务】

不用选【强制】,然后【继续删除】

在【查看选项】处点击【降级】,等待降级完成。

降级验证,可以看到 DCSERVER 从主 DC 降级成普通计算机了。

新主机升级成 DC

旧 DC 降级完后,在备域里将组里的旧 DC 的计算机删掉。

新设备改成旧 DC 计算机名、IP地址(如果保持旧 DC 在线,新主机改成旧 DC 计算机名会报错),并暂时将首选 DNS 调整成备 DC。

选择【DNS服务器】、【Active Directory 域服务】,下一步直到安装。

将此服务器提升为域控制器,将域控制器添加到现有域。

按照相应默认站点,DNS委派,直接下一步,并选择复制服务器。

点安装,等待完成

此时,【本地策略】-【安全选项】-【用户账户控制:用于内置管理员账户的管理员批准模式】,已启用,重启,然后将IP及DNS设置改为旧的 DC。

在 MMC 控制台添加两个活动目录,并在其中一个域控创建用户,以此查看相关同步,验证升级是否成功。

通过运行Repadmin /showrepl命令,可以查看域控服务器之间的复制状态,以确定主备域控服务器的角色。

做完此步升级工作已完成。

排错汇总

降级失败排错

指定域不存在或无法联系

在正常降级期间,Active Directory 域控制器 (DC) 必须联系另一个 DC,以告知正在进行降级。这允许从复制拓扑中删除降级的 DC,以便其合作伙伴不再尝试联系它进行复制。但是,在某些情况下,DC 可能无法再联系域中的另一个 DC。如果无法解决此情况,则可以执行强制降级以降级受影响的 DC,而无需联系另一个 DC。 —— DELL - 如何将 Active Directory 域控制器强制降级

通过上面这段描述,还有可能是另外一个备份域没开机,联系不上所以降级不成功,相关警示以及报错提示图,如下。

即便网络连通、ping 通,但也需要等待一段时间,五至十分钟左右再操作。

目录服务没有必需的配置信息,并且不能决定新的浮动单主机操作角色的所有权

这个问题创建一个组策略再降级,然后参考 learn.microsoft|error-run-adprep-rodcprep-command,注意主备 DC 都需执行脚本命令。

升级所遇到的问题

域管理员权限和普通用户没有区别,不能改ip等等

【本地策略】-【安全选项】-【用户账户控制:用于内置管理员账户的管理员批准模式】,已启用,重启生效。

无法连接域的域控制器,请确保提供的DNS域名正确

现象:配置的IP都在一个网段,DNS也是对应的上的。

使用 ping 也会出现传输失败或无法连接目标主机。

排查结果为遗漏了网卡NAT和仅主机的网络的设置,将要升级的 DC 和备域,网络不在同一区域的局域网。

参考资料

使用站点控制活动目录

站点的作用及工作过程

域控站点主要是为了高效同步AD域控的更新数据而设的。员工分散在北上广不同的地域,那么就需要在域控设置站点,分别就近管理,依据相对应子网找寻对应地区域控登录,降低带宽负担,跨地域登录域延迟。站点与域之间的关系:一个域中可以有多个站点、一个站点中可以有多个域。

若两台DC之间使用低速的链路带宽,那么它们之间的复制就会占用相当大的网络带宽,从而加 重链路带宽的负载。

在部署了多台域控制器的环境中,当其中一台域控制器中修改了活动目录的数据时,这些修改会被同步到其他的域控制器中(默认15秒),但对于重要的数据,如账户锁定、域密码策略的改变等,它并不会等待15秒,而是立刻同步给其他域控制器。

详细

【仪表板】->【工具】->【Active Driectory 站点和服务】

对默认站点重命名,并将对应域控移至相应站点,并在【IP】处创建两个地域之间的连接。

最后加入不同地域的域控子网

参考资料

Windows Server 磁盘管理

简单卷、条带卷、镜像卷、跨区卷

简单卷

在一个磁盘上创建的分区就是简单卷。

条带卷/带区卷(RAID-0)

基础要求:磁盘空间大小一致。

空间来自多块盘存储,空间上增大,两个独立电机转动,IO读写也会提高,但一个盘坏了,就数据丢了,不容错。

镜像卷(RAID-1)

基础要求:磁盘空间大小一致。

完全复制另一块数据盘,一半的空间是一模一样的数据,可以容错。空间不变,性能不变,读文件相对较快,磁盘浪费50%。

RAID-5

基础要求:磁盘空间大小一致。

RAID-5最少需要是三块盘,把三块盘设置动态磁盘,设置RAID-5,RAID-5估算两块盘空间值作为数据备份存储,备份存储的是总容量1/3,比方说三块150G的硬盘,有两块存数据,有效存储就是300G,浪费了1/3,可以接受。

RAID-5最多六块盘,不管几块盘,RAID5只能同时坏一块盘,坏了一块盘性能就慢了,写的时候由于需要算值,性能没有多少提高。

跨区卷

整合多块盘的零散空间组成一个大的分区,读写性能也没什么变化。

创建 RAID-5

除原始系统盘外,至少三块磁盘。原始系统盘并不需要设置成动态。

模拟新增三块硬盘

菜单找到【Windows管理工具】,或者搜索【管理工具】选择磁盘管理。

脱机的硬盘需要将磁盘联机,新硬盘通常需要初始化。

新建 RAID-5 并把三块磁盘全都选上。

等待同步完成即可看见效果。

模拟硬盘损坏,并复原

  1. 用虚拟机删除一块硬盘,然后新增一块。
  2. 将磁盘联机、初始化
  3. 在 RAID-5 上磁盘上点击【修复卷】

等待完成,并测试效果。

R430服务器两块硬盘组硬件 RAID

基础知识

RAID-1

基础要求:磁盘空间大小一致。

至少两块盘,完全复制另一块数据盘,一半的空间是一模一样的数据,可以容错。空间不变,性能不变,读文件相对较快,磁盘浪费50%。

RAID-5

基础要求:磁盘空间大小一致。

RAID-5最少需要是三块盘,把三块盘设置动态磁盘,设置RAID-5,RAID-5估算两块盘空间值作为数据备份存储,备份存储的是总容量1/3,比方说三块150G的硬盘,有两块存数据,有效存储就是300G,浪费了1/3,可以接受。

RAID-5最多六块盘,不管几块盘,RAID5只能同时坏一块盘,坏了一块盘性能就慢了,写的时候由于需要算值,性能没有多少提高。

从零开始组 RAID

设置 RAID

将两块硬盘插入服务器,安装硬盘需带有硬盘架子,如图。

F2 进入 BIOS 设置,设置成 RAID 模式,保存。

进入 virtual disk management 设置 raid 1。

选择两块磁盘点应用。

进行 RAID 模式启用状态排查,分别查看 physical disk management、virtual disk management,发现 RAID 并未生效

安装 RAID 驱动

R430 参数如下

根据如图标识,选择 PERC S130,进入官网下载驱动。

做一个启动U盘,将驱动 exe 解压放入启动盘,并用启动盘安装系统

选择 one-shot,选择启动U盘

在浏览处选择【加载驱动程序】。

选择之前解压驱动所放入的启动盘,接着就会识别到驱动配置,点安装。

此时已经可以发现硬盘了。

安装完系统在【设备管理器】查看驱动详细

  • 磁盘驱动器、存储控制器,关键字:S130
  • 其他设备,关键字:RAID。

没装 RAID 驱动的比照图

硬 raid 不像软 raid 能够一眼看出,硬 RAID 效果如图

对比之前没装过 RAID驱动,软 raid 实现是需要三块硬盘组 raid 1的。

online 与 unknown。

BIOS固件更新与驱动安装

BIOS固件更新

将网线把电脑和服务器连接起来,配置好IP,在这里可以设置IP。

这里不是装驱动,这里是 iDRAC 远程控制 web 界面刷新、更新那个BIOS固件,固件和驱动不是一回事,别乱刷把主板刷疯掉。操作可参考:丁辉博客 - DELL服务器使用iDRAC升级BIOS等固件版本

组RAID完成后,安装系统驱动

按照默认提示的server系统版本安装:芯片组、网卡、显卡等。

参考资料

安装 wsus

wsus安装流程

首先要保证主机能联网,接着开始安装 wsus。

默认就行

选择一个新创建的空文件夹

继续默认,直至安装完成。

启动后安装任务

在【管理工具】打开【Windows Server更新服务】

是上游就选“从微软更新同步”,下游就选从其他。

如果 wsus 不联网这需要选择代理服务器。

选择开始连接,完成的时间取决于网速。

选择中文就好

一般是取决于公司用的哪些系统,这里是:Server 2019、Windows 10。

默认就行,驱动别选,不同机器适配驱动不一样,易造成蓝屏。

选择手动同步

也可进入到【Windows server服务】控制台进行初始同步,建议勾选,然后下一步。

执行同步

遇到的问题

WSUS连接错误需要重置服务器

将虚拟机内存大小调高一些

IIS中 wsus pool 的专用内存限制从1.2G 设置成 3G

IE浏览器老是弹出信任网站

【本地服务器】-> 【IE增强的安全配置】将启用改成关闭

microsoft system clr types for sql server 2012 资源查找

MicrosoftReportViewer2012可由分发组件,请关闭控制台,然后再安装此程序包。但需要 microsoft system clr types for sql server 2012。

见文:https://community.spiceworks.com/t/microsoft-system-clr-types-for-sql-server-2012/789626/6 ,原理是通过 SQL server 的功能包下载。

找到 SQLSysClrTypes.msi 下载

下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=56041

参考资料

FSMO 准备资料

基本概述

FSMO是灵活单主机操作(Flexible ingle Master Operation)的缩写,是被设置为担任提供特定角色信息的网域控制站,在活动目录中有五种FSMO角色,并且分为两大类:

Forest林级别,在整个林中只能有一台DC拥有访主机角色

  • 架构主机(Schema Master):作用是修改活动目录的源数据。
  • 域命令主机(Domain Naming Master):它的主要作用是管理森林中域的添加或者删除。

Domain域级别,在域中只有一台DC拥有该角色

  • PDC模拟器(PDC Emulator):Windows 2000域开始,不再区分PDC还是BDC,但实际上有些操作则必须要由PDC来完成,那就由PDC Emulator来完成。
  • RID主(RID Master):分配可用RID池给域内的DC和防止安全主体的SID重复。
  • 基础架构主机(Infrastructure Master):它的主要作用就是用来更新组的成员列表,因为在活动目录中很有可能有一些用户从一个域转移到另外一个域。

在FSMO的规划时的原则

  1. 占有 Domain Naming Master 角色的域控制器必须同时也是GC;
  2. 不能把 Infrastructure Master 和GC放在同一台DC上;
  3. 建议将 Schema Master 和 Domain Naming Master 放在森林根域的GC服务器上;
  4. 建议将 Schema Master和 Domain Naming Master 放在同一台域控制器上;
  5. 建议将 PDC Emulator、RID Master及 Infrastructure Master 放在同一台性能较好的域控制器上;
  6. 尽量不要把 PDC Emulator、RID Master及 Infrastructure Master 放置在GC服务器上;

Brock Bingham - What are FSMO roles?

全局编录(global Catalog,GC)

全局编录包含了各个活动目录中每一个对象的最重要的属性,是域林中所有对象的集合。在域林中,同一域林中的域控制器共享同一个活动目录,这个活动目录是分散存放在各个域的域控制器中的,每个域中的域控制器保存着该域的对象的信息(用户账号及目录数据库等)。

如果一个域中的用户要访问另一个域中的资源,则要先找到另一个域中的资源。为了让用户快速的查找到另一个域内的对象,微软设计了全局编录(global Catalog,GC)。全局编录包含了各个活动目录中每一个对象的最重要的属性(即部分属性),这样,即使用户或应用程序不知道对象位于哪个域,也可以迅速找到被访问的对象。

参考资料

域用户统一桌面壁纸

参考资料

需求

需求:职场办公电脑必须统一管理桌面壁纸,不允许个人随意更改、变动桌面壁纸。

设置

组策略常用软件下发

实际案例

由于质检组搬迁到其他楼层,而新楼层的主机尚未安装WPS软件,因此需要下发WPS软件。此前,生产团队已统一升级WPS版本,并通过组策略脚本卸载旧版WPS。但部分电脑因空置未使用,仍保留了旧版WPS。

在将质检组成员调整至适用WPS的组策略时,发现部分成员的WPS版本不一致。调整回原组策略后,旧版WPS因策略影响被卸载,导致部分成员无法使用WPS。

解决方案:在全组进行楼层搬迁时,应安排成员加班,逐一检查他们所登录的主机软件环境,再根据实际情况调整组策略。这样可确保WPS版本一致,避免使用中断。

以脚本的下发方式

使用 net share 即可查看 netlogon 位置。

NETLOGON  C:\Windows\SYSVOL\sysvol\域名\SCRIPTS

将文件复制到

在【组策略管理】中的【组策略对象】,创建“wps下发”GPO。

【组策略管理编辑器】->【用户配置】->【Windows设置】->【脚本(登录/注销)】,点击【登录】属性进行编辑。

在活动目录中创建“常用软件下发”的子组织单元“wps下发”。这种方法还是要管理员账户和密码才能安装。

以共享文件夹的方式

创建一个相关部门、组专属的文件夹存放WPS,并通知他们,让他们自行安装。

机房巡检工作与UPS应急演练

巡检

做好《机房巡检表》、《人员出入机房登记表》的登记。记录好机柜上、门禁进门的靠墙边上的检测仪器上的温湿度。

机房温湿度查看位置

UPS应急演练

UPS切换前

打开电闸使用的是市电,UPS状态正常。

摄像头监控网正常

生产网正常

外网正常

UPS切换后

拉闸市电,使用UPS电池的电量。

生产网正常,外网正常 (操作同上)

UPS演练测试完成,正常回切

将市电电闸拉上去,UPS状态正常(使用的是市电)

生产网正常,外网正常(操作同上)

交换机配置备份

备份要求:所有的内外网接入、汇聚、核心交换机。

使用 IPOP 软件,开启ftp服务,设置存放文件位置

# 填写我们要导出配置到主机的地址
ftp 192.168.185.58

# 以默认的二进制传输
binary

# 导出
put vrpcfg.zip

更简单的方式 dis cu 将显示的配置全部复制进记事本保存。

单个备份

设计思路(五个关键):

  1. 连接 ssh 登录到交换机
  2. 通过 dis cu (display current-configuration)显示交换机配置
  3. 利用标识符“ops”、“return”作为读取的结尾。
  4. 读取内容到指定文本文件。
  5. 通过ftp导出vrpcfg.cfg文件进行对比,利用正则剔除dis cu 之前的以上所有信息,保留 dis cu 输出的以下所有信息。

其他(todo & think):能够写出这些,以后剩下的的配置之类的,也差不多。

  • 打算写一份基于 ftp 导出的(所以命名有“导出”改成了“备份”)

  • 有时间再写 display logbuffer 日志导出的

源码如下及地址:

  • https://github.com/hoochanlon/scripts/tree/main/d-python-datacom
    • 单个交换机配置备份模板.py
import paramiko
import time
import os
from datetime import datetime
import re

# 配置交换机的信息
hostname = "192.168.1.250"  # 交换机的IP地址
username = "yonghuming"  # SSH 登录用户名
password = "Mima12345@"  # SSH 登录密码

# 动态生成备份文件名,包含日期时间
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")  # 格式化时间
current_date = datetime.now().strftime("%Y%m%d")  # 当天日期
backup_filename = f"switch_backup_{timestamp}.cfg"  # 配置备份文件名

# 获取当前用户桌面路径
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")
date_folder_path = os.path.join(desktop_path, current_date)  # 当天日期的文件夹路径
backup_filepath = os.path.join(date_folder_path, backup_filename)  # 文件完整路径

# 如果日期文件夹不存在,则创建
if not os.path.exists(date_folder_path):
    os.makedirs(date_folder_path)

# 创建 SSH 客户端
client = paramiko.SSHClient()

# 自动接受未知的主机密钥
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

try:
    # 连接到交换机
    client.connect(hostname, username=username, password=password)
    # client.connect(hostname, username=username, password=password, port=2399)

    # 打开交互式 shell
    shell = client.invoke_shell()

    # 禁用分页
    shell.send("screen-length 0 temporary\n")
    time.sleep(1)

    # 执行备份命令
    shell.send("display current-configuration\n")
    time.sleep(2)  # 等待命令执行

    output = ""
    found_ops = False  # 初始化标志位,标记是否已找到 "ops"

    while True:
        # 增加接收缓冲区大小
        part = shell.recv(8848).decode('utf-8')

        # 将输出追加到结果中
        output += part

        # 判断是否遇到 "return"
        if 'return' in part:
            found_ops = True

        # 如果找到了 "ops",继续读取直到出现 "return"
        if found_ops and 'return' in part:
            break  # 找到 "return",停止读取

    # 先将原始输出写入文件
    with open(backup_filepath, "w") as backup_file:
        backup_file.write(output)

    # 重新读取文件内容,应用正则清理
    with open(backup_filepath, "r") as backup_file:
        raw_content = backup_file.read()

    # 使用正则删除 dis cu 以上所有信息,保证格式与 vrpcfg.cfg 等同
    cleaned_output = re.sub(
        r"(?s).*?display current-configuration\n", 
        "", 
        raw_content
    )

    # 将清理后的内容写回文件
    with open(backup_filepath, "w") as backup_file:
        backup_file.write(cleaned_output)

    print(f"备份已完成,配置已保存到 {backup_filepath}")

except Exception as e:
    print(f"连接或备份过程中发生错误: {e}")

finally:
    # 关闭 SSH 连接
    client.close()

单个备份效果

批量备份

设计思路:

  • 在单个备份的基础上,通过读取 CSV,根据CSV的相关信息达到动态连接的目的。

    • 这样还有个好处,也能统一批量修改文件名。(简单实验后想到)
  • 由于文件较多,所以在桌面生成一个当天日期文件夹来存放,后来也把这思路放在了单个备份脚本上了。

SSH内容如下

附源码地址:

  • https://github.com/hoochanlon/scripts/tree/main/d-python-datacom
    • 批量交换机配置备份.py
import paramiko
import time
import os
import csv
from datetime import datetime
import re

# 获取当前用户桌面路径
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")

# 动态生成当天日期的文件夹
current_date = datetime.now().strftime("%Y%m%d")  # 当天日期
date_folder_path = os.path.join(desktop_path, current_date)  # 日期文件夹路径

# 如果日期文件夹不存在,则创建
if not os.path.exists(date_folder_path):
    os.makedirs(date_folder_path)

# 读取 CSV 文件并逐行处理
csv_file_path = os.path.join(desktop_path, "SSH登记表.csv")  # 假设 CSV 文件在桌面
try:
    with open(csv_file_path, "r", encoding="utf-8") as csv_file:
        csv_reader = csv.reader(csv_file)

        for row in csv_reader:
            # 解析每一行数据
            if len(row) < 5:
                print(f"跳过格式不正确的行: {row}")
                continue

            device_name, hostname, username, password, port = row
            port = int(port)  # 将端口号转换为整数
            backup_filename = f"{device_name}.txt"  # 备份文件名
            backup_filepath = os.path.join(date_folder_path, backup_filename)  # 文件完整路径

            # 创建 SSH 客户端
            client = paramiko.SSHClient()

            # 自动接受未知的主机密钥
            client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

            try:
                # 连接到交换机,使用动态端口
                print(f"正在连接到 {hostname} ({device_name}),端口 {port}...")
                client.connect(hostname, username=username, password=password, port=port)

                # 打开交互式 shell
                shell = client.invoke_shell()

                # 禁用分页
                shell.send("screen-length 0 temporary\n")
                time.sleep(1)

                # 执行备份命令
                shell.send("display current-configuration\n")
                time.sleep(2)  # 等待命令执行

                output = ""
                found_ops = False  # 初始化标志位,标记是否已找到 "ops"

                while True:
                    # 增加接收缓冲区大小
                    part = shell.recv(8848).decode('utf-8')

                    # 将输出追加到结果中
                    output += part

                    # 判断是否遇到 "return"
                    if 'return' in part:
                        found_ops = True

                    # 如果找到了 "ops",继续读取直到出现 "return"
                    if found_ops and 'return' in part:
                        break  # 找到 "return",停止读取

                # 先将原始输出写入文件
                with open(backup_filepath, "w", encoding="utf-8") as backup_file:
                    backup_file.write(output)

                # 重新读取文件内容,应用正则清理
                with open(backup_filepath, "r", encoding="utf-8") as backup_file:
                    raw_content = backup_file.read()

                # 使用正则删除 dis cu 以上所有信息,保证格式与 vrpcfg.cfg 等同
                cleaned_output = re.sub(
                    r"(?s).*?display current-configuration\n", 
                    "", 
                    raw_content
                )

                # 将清理后的内容写回文件
                with open(backup_filepath, "w", encoding="utf-8") as backup_file:
                    backup_file.write(cleaned_output)

                print(f"{device_name} ({hostname}) 备份完成,保存到 {backup_filepath}")

            except Exception as e:
                print(f"备份 {device_name} ({hostname}) 失败: {e}")

            finally:
                # 关闭 SSH 连接
                client.close()

except FileNotFoundError:
    print(f"CSV 文件未找到,请确认路径是否正确: {csv_file_path}")
except Exception as e:
    print(f"处理 CSV 文件时发生错误: {e}")

单个备份与批量备份的效果一览

批量上传交换机配置到本地FTP

设计思路:通过本地电脑开启FTP作为服务器,然后登上交换机,交换机再通过FTP传到本地电脑去。

后续过程:在调试过程中注意到在交换机中 put 指令不支持中文名上传。先使用拼音,再改名,csv文件再新增一列拼音,方便后续从拼音替换为中文。

所需软件:IPOP,或其他FTP软件。

  • https://www.52pojie.cn/thread-1127110-1-1.html (IPOP)

地址及源码:

  • https://github.com/hoochanlon/scripts/tree/main/d-python-datacom

    • 批量上传交换机配置到本地FTP.py
import paramiko
import time
import os
import csv

# 获取当前用户桌面路径
desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")

# 读取 CSV 文件并逐行处理
csv_file_path = os.path.join(desktop_path, "SSH登记表.csv")  # 假设 CSV 文件在桌面
# ftp_server_ip = "192.168.1.58"  # 本机的 FTP 服务 IP 地址
ftp_server_ip = "172.16.1.55" 
ftp_username = "admin"  # FTP 用户名
ftp_password = "123"  # FTP 密码

try:
    with open(csv_file_path, "r", encoding="utf-8") as csv_file:
        csv_reader = csv.reader(csv_file)
        
        for row in csv_reader:
            # 解析每一行数据
            if len(row) < 6:  # 如果行的列数不足,跳过
                print(f"跳过格式不正确的行: {row}")
                continue

            device_name, alias_name, hostname, username, password, port = row
            port = int(port)

            print(f"正在连接到 {hostname} ({device_name}),端口 {port}...")

            # FTP 文件名(初始为 alias_name)
            ftp_filename = f"{alias_name}_backup.zip"

            # 创建 SSH 客户端
            client = paramiko.SSHClient()
            client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

            try:
                # 连接到交换机
                client.connect(hostname, port=port, username=username, password=password)

                # 打开交互式 shell
                shell = client.invoke_shell()
                time.sleep(1)

                # 启动 FTP 服务上传文件
                shell.send(f"ftp {ftp_server_ip}\n")
                time.sleep(2)
                shell.send(f"{ftp_username}\n")  # 输入 FTP 用户名
                time.sleep(1)
                shell.send(f"{ftp_password}\n")  # 输入 FTP 密码
                time.sleep(1)

                # 上传配置文件
                print(f"开始上传配置文件到 FTP 服务器,文件名: {ftp_filename}")
                shell.send("binary\n")  # 切换到二进制模式
                shell.send(f"put vrpcfg.zip {ftp_filename}\n")  # 上传文件
                time.sleep(5)  # 等待上传完成

                # 退出 FTP
                shell.send("quit\n")
                time.sleep(1)

                # 重命名为 device_name
                new_filename = f"{device_name}_backup.zip"
                local_path = os.path.join(desktop_path,"本机开启FTP交换机上传文件到此目录", ftp_filename) # 拼接 FTP服务器保存的指定目录
                renamed_path = os.path.join(desktop_path,"本机开启FTP交换机上传文件到此目录", new_filename)

                if os.path.exists(local_path):  # 如果文件存在,重命名为中文名
                    os.rename(local_path, renamed_path)
                    print(f"文件已重命名为: {renamed_path}")
                else:
                    print(f"文件上传后未找到: {local_path}")

            except Exception as e:
                print(f"处理设备 {device_name} ({hostname}) 时出错: {e}")

            finally:
                client.close()

except FileNotFoundError:
    print(f"CSV 文件未找到,请确认路径是否正确: {csv_file_path}")
except Exception as e:
    print(f"处理 CSV 文件时发生错误: {e}")

效果

月度防火墙备份

备份要求:外网,内网主备。每月备份一次防火墙配置,文件夹命名方式: \20241005\生产内网防火墙-备

额外进行防火墙一周流量统计

在面板的【接口流量统计】,点击设置按钮,选择流入或流出,每日登记按开始上班的时间的当天60分钟,统计高峰值。或者一周24小时或按30天来统计。

上行流入,下行流出,按此登记。

防火墙日志导出

配置允许规则

ftp server enable

ftp <server ip>
binary
cd log
get xxxx.zip

还有种方式就是进入【监控】->【诊断中心】->【信息采集】,进行采集与导出工作。

上网许可与加域

图片字体太小,右击在【新标签页中打开图片】

上网许可

上网准入

上网准入使用华三inode软件,在inode的控制台添加账户,根据相应格式批量加入。

在接入用户管理界面,注销账户

可以在桌面创建记事本,然后将需要加入inode的成员复制进记事本,然后编写程序生成批量导入的格式。

# 设置输入和输出文件路径
$inputFile = "C:\Users\Administrator\Desktop\添加用户.txt"
$outputFile = "C:\Users\Administrator\Desktop\inode_exportAccount.txt"

# 如果输出文件已经存在,先清空内容
if (Test-Path $outputFile) {
    Clear-Content $outputFile
}

# 读取输入文件的每一行并处理
Get-Content $inputFile -Encoding UTF8 | ForEach-Object {
    $name = $_.Trim()  # 去除前后的空格或换行符
    if ($name -ne "") {  # 确保行不为空
        $formattedName = "$name $name 消费业务 Mima12345 $name 生产专用(最终版)"
        # 将格式化后的字符串写入输出文件
        Add-Content -Path $outputFile -Value $formattedName
    }
}

Write-Host "名字处理完成,结果已写入到 $outputFile"

准入移除

批量操作 -> 进入批量账户维护 -> 选择相关文件,选择 注销账号 下一步。

不被允许注销的用户可以单个处理,点击相关姓名进行强制注销。

域成员管理

域账号开通:在“用户和组”的控制台,并在对应的部门添加域账户。

域账户解锁:解锁输入密码错误次数过多的用户。找到对应组织单元,点击查找,选中对应查找到的账户,点击属性,找到【账户】,勾选解锁账户,确认后可解锁。

开通文件夹权限:访问权限,在【共享】和【安全】仅勾选只读;读写权限,则在默认权限基础上勾选修改、写入。

访问只读

注意共享文件夹内的文件夹,为了安全隔离,需要删除 Everyone 的读取权限。

在【共享】属性界面中,点击【高级共享】,【权限】,输入名字,点击检查名称,然后勾选对应权限,确定。

在【安全】属性界面中,点击【编辑】,输入名字,点击检查名称,然后勾选对应权限,确定。

读写权限

共享基础权限,勾选【更改】

安全选择以下五项:修改、读取和执行、列出文件夹内容、读取、写入。

遇到的问题

  1. win10提示不允许使用你正在尝试的登录方式。请联系你的网络管理员了解详细信息。其实是普通用户是不能登录主备DC的。

  2. 服务器上的安全数据库没有此工作站信任关系的计算机帐户。原因:换新升级 DC,容易导致计算机脱域,需要重新退域,再加域。

批量添加、删除域用户及导出

批量添加域用户

缘起

由于每个消费业务的同事都需要登录域用户上机操作的,分配不同的组长,因此有着不同组长共享文件夹访问权限,以及通用的质检文件夹访问权限,这就需要根据人事已提供的 ”域控权限申请登记表“,繁复的进行对人员的域账户添加及相关文件授权。

批量添加域用户

一、以添加新用户到组织单元【生产团队】里的子级【售后】单元为例

二、域名以 CSYLQ 为例

三、初始密码固定,登录需要更改初始密码,域用户都在其业务的组织单元内。

# 导入Active Directory模块
Import-Module ActiveDirectory

# 测试一行命令
# New-ADUser -Name "王光光" -SamAccountName "王光光" -UserPrincipalName "王光光@CSYLQ.com" `
#            -Path "OU=消费业务,OU=生产团队,DC=CSYLQ,DC=com" -GivenName "光光" -Surname "王" `
#            -AccountPassword (ConvertTo-SecureString "Mima12345" -AsPlainText -Force) `
#            -Enabled $true -ChangePasswordAtLogon $true

<# 参考资料:https://learn.microsoft.com/en-us/powershell/module/activedirectory/new-aduser?view=windowsserver2022-ps #>


# 导入Active Directory模块
Import-Module ActiveDirectory

# 读取txt文件中的用户列表
$filePath = "C:\Users\Administrator\Desktop\添加用户.txt"  # 替换为实际的文件路径
$userList = Get-Content -Path $filePath  # -Encoding UTF8

# 固定密码
$password = "Mima12345"

# 循环处理用户列表
foreach ($userName in $userList) {
    # 尝试创建用户
    try {
        New-ADUser -Name $userName -SamAccountName $userName -UserPrincipalName "$userName@csylq.com" `
                   -Path "OU=售后,OU=生产团队,DC=CSYLQ,DC=com" `
                   -AccountPassword (ConvertTo-SecureString $password -AsPlainText -Force) `
                   -Enabled $true -ChangePasswordAtLogon $true

        Write-Host "用户 $userName 已成功创建。"
    } catch {
        Write-Host "创建用户 $userName 时发生错误: $_"
    }
}

# 暂停脚本
Read-Host "按 Enter 键继续..."

批量删除域用户

# 导入Active Directory模块
Import-Module ActiveDirectory

# 读取txt文件中的用户列表
$filePath = "C:\Users\Administrator\Desktop\删除用户.txt"  # 替换为实际的文件路径
$userList = Get-Content -Path $filePath # -Encoding UTF8

# 循环删除用户
foreach ($user in $userList) {
    try {
        Remove-ADUser -Identity $user -Confirm:$false -ErrorAction Stop
        Write-Host "已删除用户: $user"
    } catch {
        Write-Host "用户 $user 不存在,已忽略错误。"
    }
}

# 暂停脚本
Read-Host "按 Enter 键继续..."

导出域用户说明

每月需要导出域用户与人事核对离职人数,核对完成发送信安主管,抄送给IT部门总负责人。以下原因:

  1. 确保账户安全: 离职员工的账户一旦未及时禁用或删除,可能会带来潜在的安全隐患,尤其是如果这些账户还具有访问公司敏感数据或系统的权限。对比人事数据可以确保所有离职员工的账户都已按时处理。
  2. 防止数据泄露: 人事部门确认员工已经离职后,IT部门和信息安全部门需要确保他们不再拥有公司系统的访问权,以防止敏感信息的泄露或被误用。
  3. 合规性要求: 许多行业和公司都要求遵守信息安全和数据隐私的相关法规。定期对比和清理离职人员账户是满足这些法规要求的一部分,避免因管理不善而受到法律或金融处罚。
  4. 内部控制和审计要求: IT 和信安部门领导收到该报告可以确保流程的透明性和可审计性。它还为内部控制提供了基础,证明公司在信息系统的安全管理方面有一个清晰和严格的流程。

通过每月定期导出和核对数据,可以确保离职员工的账户不被遗漏。将这些信息汇报给信安主管并抄送给 IT 领导,既有助于管理层的知情,也能够提升整个流程的严谨性和效率。

导出域用户操作

导出域用户,执行相关脚本

# 导出文件路径
$outputFile = "C:\Users\Administrator.CSXZX\Desktop\域用户清单.txt"

# 清空或创建导出文件
Out-File -FilePath $outputFile # -Encoding UTF8 -Force

# 导入 Active Directory 模块
Import-Module ActiveDirectory

# 设置组织单元的 DistinguishedName
$ous = @(
    "OU=生产团队,DC=CSXZX,DC=com",
    "OU=培训,DC=CSXZX,DC=com",
    "OU=临时保存权限,DC=CSXZX,DC=com"
)

foreach ($ou in $ous) {
    # 获取组织单元中的所有用户
    $users = Get-ADUser -Filter * -SearchBase $ou -Properties Name

    # 将用户名字写入文件
    if ($users) {
        $ouName = (Get-ADOrganizationalUnit -Identity $ou).Name  # 获取 OU 名称
        Add-Content -Path $outputFile -Value "组织单元:$ouName"
        foreach ($user in $users) {
            Add-Content -Path $outputFile -Value $user.Name  # 只保留用户名称
        }
        Add-Content -Path $outputFile -Value "`r`n"  # 添加换行分隔符
    } else {
        Write-Host "未找到任何用户在组织单元 $ouName 中。"
    }
}

Write-Host "已导出所有指定组织单元中的用户名字到 $outputFile"

# 暂停 5 秒
Start-Sleep -Seconds 5


再打开 vscode 使用正则表达式

  • 匹配 所有 组织单元 及后续字符所有的行:^.*组织单元.*$
  • 匹配 所有 生产 及后续字符所有的行:^.*生产.*$
  • 匹配 所有 测试 及后续字符所有的行:^.*测试.*$
  • 删除所有空白行:^\s*\n

去除不必要的域控测试账户,以及相关公共账户,删除后再删除空白行即可。

批量对人员进行文件夹授权

  1. 操作文件夹均以开启共享,以及域名方面,根据实际环境修改对应域名。
  2. edge浏览器,右击图片,在新标签页中打开图像,或放大图像。

缘起

由于每个消费业务的同事都需要登录域用户上机操作的,分配不同的组长,因此有着不同组长共享文件夹访问权限,以及通用的质检文件夹访问权限,这就需要根据人事已提供的 ”域控权限申请登记表“,繁复的进行对人员的域账户添加及相关文件授权。

相关要求:

  • 读取权限说明:共享权限:读取;安全权限(NTFS权限)读取。
  • 编辑、读写权限说明:共享权限:读取、更改;安全权限:读取、读取和执行、列出文件内容、修改、写入。

质检文件夹权限是通用的,所以可以做成规模化的脚本执行。组员不同所属组长的文件夹权限,可以用简单的命令形式执行。

单个文件夹批量授权

起手

从最简单的起手,单个用户设置文件夹权限

更多模板:suv789 - 当使用 PowerShell 管理 Active Directory(AD)域用户时,以下是一些初级的示例和操作:PowerShell 在进行 AD 域用户管理时的强大功能和灵活性。PowerShell 在自动化和管理 Active Directory 域用户方面的强大能力,能够高效处理复杂的管理任务和安全操作

<#安全权限#>

# 安全权限设置为只读。
icacls "C:\共享文件夹\谢多意组" /grant "csylq\王诗语:(OI)(CI)(R)" /t # /t 表示递归

# 安全权限设置为编辑
icacls "C:\共享文件夹\樊小华" /grant "csylq\王诗语:(OI)(CI)(M)" /t

# 安全权限设置为读取、读取和执行、列出文件内容
icacls "C:\共享文件夹\谢多意组" /grant "csylq\王诗语:(OI)(CI)(RX)" /t

# 删除用户文件夹权限
icacls "C:\共享文件夹\谢多意组" /remove "csylq\王诗语" /t


<#共享权限#>

# 读写权限
Grant-SmbShareAccess -Name "樊小华组" -AccountName "csylq\王诗语" -AccessRight Change -Force


# 只读权限
Grant-SmbShareAccess -Name "谢多意组" -AccountName "csylq\王诗语" -AccessRight Read -Force

# 完全控制
Grant-SmbShareAccess -Name "朱爱梅组" -AccountName "csylq\王诗语" -AccessRight Full -Force

# 删除权限
Revoke-SmbShareAccess -Name "谢多意组" -AccountName "csylq\王诗语" -Force

<#
同一用户不能同时使用 -ReadAccess 和 -ChangeAccess,因为这会产生冲突。
你需要选择一种权限方式,要么是读取,要么是修改(Change 权限已经包含了读取权限)。
所以在这种情况下,给用户直接赋予 Change 权限就足够了,因为它包括读取和写入权限。
之所以精准定位是因为共享名称唯一,共享文件夹改名变成独立的非共享文件夹。
#>

成型

以批量授权用户质检文件夹访问权限只读为例

# 定义共享名称和文件夹路径
$shareName = "质检"  # 共享名称
$folderPath = "C:\共享文件夹\质检"  # 共享文件夹的实际路径
$domainUsersFile = "C:\Users\Administrator\Desktop\质检名单.txt"  # 包含用户的txt文件路径(不带域名)

# 定义域名
$domain = "CSYLQ"

# 读取txt文件,假设每行是一个用户名(不带域名)
$domainUsers = Get-Content -Path $domainUsersFile

foreach ($user in $domainUsers) {
    # 为每个用户加上域名前缀
    $fullUserName = "$domain\$user"

    Write-Host "正在为用户 $fullUserName 添加权限..."

    # 1. 添加共享权限(只读)
    try {
        Grant-SmbShareAccess -Name $shareName -AccountName $fullUserName -AccessRight Read -Force
        Write-Host "共享权限:用户 $fullUserName 已被授予只读访问权限。"
    } catch {
        Write-Host "共享权限:无法为用户 $fullUserName 添加访问权限,可能该用户已存在或发生其他错误。"
    }

    # 2. 添加NTFS权限(只读)
    try {
        # 使用icacls命令授予用户只读权限
        # 显式 vs 继承权限:普通权限界面显示的是显式设置的权限,而“高级”选项中还会显示从父文件夹或其他权限继承而来的权限。
        # $icaclsCommand = "icacls `"$folderPath`" /grant `"${fullUserName}:(R)`" /t" # 隐示权限
        #(OI) 是“对象继承”,表示权限将应用到文件夹内的文件。
        #(CI) 是“容器继承”,表示权限将应用到文件夹内的子文件夹。
        $icaclsCommand = "icacls `"$folderPath`" /grant `"${fullUserName}:(OI)(CI)R`" /t" # 显示权限
        # 将字符串转换为命令
        Invoke-Expression $icaclsCommand
        Write-Host "NTFS权限:用户 $fullUserName 已被授予只读访问权限。"
    } catch {
        Write-Host "NTFS权限:无法为用户 $fullUserName 添加访问权限,可能发生错误。"
    }
}

优化 (灵活加权限)

根据相关人员姓名,添加其对应权限。

# 读取用户输入
$userInput = Read-Host "请输入用户名(支持以空格、中文逗号、英文逗号、顿号分隔多个用户批量添加)"

# 定义域名
$domain = "CSXZX"

# 读取共享名称的关键字(支持模糊匹配)
$shareNameKeyword = Read-Host "请搜索共享文件名称(支持模糊匹配)"

# 查找所有共享文件夹并进行模糊匹配
$allShares = Get-SmbShare | Where-Object { $_.Name -like "*$shareNameKeyword*" }

if ($allShares.Count -eq 0) {
    Write-Host "没有找到匹配的共享名称。请检查关键字后再试。"
    Start-Sleep -Seconds 5
    exit
}

# 输出匹配到的共享文件夹名,并给出选择提示
Write-Host "匹配到以下共享文件夹,请选择一个共享文件夹进行权限设置:"
$allShares | ForEach-Object { Write-Host "$($_.Name)" }

# 获取用户选择的共享文件夹
$shareNameSelection = Read-Host "请输入要选择的共享文件夹名称"

# 验证选择的共享文件夹是否在匹配结果中
$selectedShare = $allShares | Where-Object { $_.Name -eq $shareNameSelection }

if (-not $selectedShare) {
    Write-Host "无效的选择,退出脚本。"
    Start-Sleep -Seconds 5
    exit
}

# 读取权限设置
$permissionsInput = Read-Host "请输入权限设置(只读/读取、编辑/读写)"

# 将权限映射为对应的共享权限和NTFS权限
$sharePermission = ""
$ntfsPermission = ""

switch ($permissionsInput) {
    "只读" {
        $sharePermission = "(OI)(CI)(R)"
        $ntfsPermission = "Read"
        break
    }
    "读取" {
        $sharePermission = "(OI)(CI)(R)"
        $ntfsPermission = "Read"
        break
    }
    "编辑" {
        $sharePermission = "(OI)(CI)(M)"
        $ntfsPermission = "Change"
        break
    }
    "保存" {
        $sharePermission = "(OI)(CI)(M)"
        $ntfsPermission = "Change"
        break
    }
    "读写" {
        $sharePermission = "(OI)(CI)(M)"
        $ntfsPermission = "Change"
        break
    }
    default {
        Write-Host "无效的权限输入。"
        exit
    }
}

# 分割用户输入,支持空格、中文逗号、英文逗号、顿号作为分隔符
$usernames = $userInput -split '[ ,,、]'

# 循环为每个用户设置共享和安全权限
foreach ($username in $usernames) {
    # 去除首尾空格
    $username = $username.Trim()

    # 检查用户名是否为空
    if ($username) {
        # 共享权限设置
        Grant-SmbShareAccess -Name "$($selectedShare.Name)" -AccountName "$domain\$username" -AccessRight $ntfsPermission -Force

        # NTFS权限设置
        icacls "C:\共享文件夹\$($selectedShare.Name)" /grant "$domain\${username}:$sharePermission" /t

        Write-Host "已为用户 '$username' 设置权限:共享权限 '$sharePermission',NTFS权限 '$ntfsPermission',共享文件夹:$($selectedShare.Name)。"
    }
}

# 暂停5秒
Start-Sleep -Seconds 5

# 退出脚本
exit

效果如图:

多个文件夹批量授权

多个文件夹批量读写

对 生产作业1、生产作业2 授权读写的批量操作。

# 定义共享名称和文件夹路径
$shares = @(
    # 定义了一个包含两个共享的数组 $shares。在循环中,我们为每个用户和每个共享依次添加权限。
    # 这样,用户将同时获得对“生产作业1”和“生产作业2”两个文件夹的相关定义权限。
    @{ Name = "生产作业1"; Path = "C:\共享文件夹\生产作业1" },
    @{ Name = "生产作业2"; Path = "C:\共享文件夹\生产作业2" }
)

$domainUsersFile = "C:\Users\Administrator\Desktop\生产作业名单.txt"  # 包含用户的txt文件路径(不带域名)

# 定义域名
$domain = "CSYLQ"

# 读取txt文件,假设每行是一个用户名(不带域名)
$domainUsers = Get-Content -Path $domainUsersFile

foreach ($user in $domainUsers) {
    # 为每个用户加上域名前缀
    $fullUserName = "$domain\$user"

    foreach ($share in $shares) {
        Write-Host "正在为用户 $fullUserName 添加权限到共享 $($share.Name)..."

        # 1. 添加共享权限(读写)
        try {
            Grant-SmbShareAccess -Name $share.Name -AccountName $fullUserName -AccessRight Change -Force
            Write-Host "共享权限:用户 $fullUserName 已被授予 $($share.Name) 的读写访问权限。"
        } catch {
            Write-Host "共享权限:无法为用户 $fullUserName 添加访问权限到 $($share.Name),可能该用户已存在或发生其他错误。"
        }

        # 2. 添加NTFS权限(读写)
        try {
            $icaclsCommand = "icacls `"$($share.Path)`" /grant `"${fullUserName}:(OI)(CI)(M)`" /t" # 显示权限
            # 将字符串转换为命令
            Invoke-Expression $icaclsCommand
            Write-Host "NTFS权限:用户 $fullUserName 已被授予 $($share.Name) 的读写权限。"
        } catch {
            Write-Host "NTFS权限:无法为用户 $fullUserName 添加访问权限到 $($share.Name),可能发生错误。"
        }
    }
}

效果:

两个不同文件夹分别进行读取和写入授权

对 生产作业1 读取、生产作业2 读写的批量操作。

# 定义域名
$domain = "CSXZX"

# 定义共享名称和文件夹路径
$shareName1 = "生产作业1"  # 共享名称
$folderPath1 = "C:\共享文件夹\生产作业1"  # 共享文件夹的实际路径

$shareName2 = "生产作业2"  # 共享名称
$folderPath2 = "C:\共享文件夹\生产作业2"  # 共享文件夹的实际路径

$domainUsersFile = "C:\Users\Administrator\Desktop\生产作业名单.txt"  # 包含用户的txt文件路径(不带域名)


# 读取txt文件,假设每行是一个用户名(不带域名)
$domainUsers = Get-Content -Path $domainUsersFile

foreach ($user in $domainUsers) {
    # 为每个用户加上域名前缀
    $fullUserName = "$domain\$user"

    Write-Host "正在为用户 $fullUserName 添加权限..."

    # 1. 添加共享权限
    try {
        Grant-SmbShareAccess -Name $shareName1 -AccountName $fullUserName -AccessRight Read -Force
        Write-Host "共享权限:用户 $fullUserName 已被授予  $shareName2 访问权限。"

        Grant-SmbShareAccess -Name $shareName2 -AccountName $fullUserName -AccessRight Change -Force
        Write-Host "共享权限:用户 $fullUserName 已被授予 $shareName2 读写权限。"

    } catch {
        Write-Host "共享权限:无法为用户 $fullUserName 添加访问权限,可能该用户已存在或发生其他错误。"
    }

    # 2. 添加NTFS权限(只读)
    try {
        $icaclsCommand1 = "icacls `"$folderPath1`" /grant `"${fullUserName}:(OI)(CI)R`" /t" # 显示权限
        $icaclsCommand2 = "icacls `"$folderPath2`" /grant `"${fullUserName}:(OI)(CI)M`" /t" # 显示权限
        # 将字符串转换为命令
        Invoke-Expression $icaclsCommand1
        Invoke-Expression $icaclsCommand2
        Write-Host "NTFS权限:用户 $fullUserName 已被授予 $folderPath1 只读访问权限。"
         Write-Host "NTFS权限:用户 $fullUserName 已被授予 $folderPath2 读写权限。"
    } catch {
        Write-Host "NTFS权限:无法为用户 $fullUserName 添加访问权限,可能发生错误。"
    }
}

效果

批量特定授权

如图,我们既要对相关文件夹(比如:共享文件夹名是“徐冬冬组”,但也有可能是“徐冬冬”)进行授权,也要对固定文件夹“质检”进行授权。

出现这种情况就的编程思路:

  • 以txt模板的形式,根据txt内容行列对称来逐个添加相关权限
  • 检索文件夹名,如果没检索到就在文件夹名末尾添加“组”字,达到效果
  • 以关键字内容匹配,如“访问”,则为名单人员添加相关文件夹读取权限(没有读写需求,已剔除)
  • 针对固定文件夹,另写新代码文件,测试好后,直接放入上述功能代码末尾,完成所有功能实现
Write-Host "授权组员访问组长文件夹权限"

# 定义文件路径
$membersFile = "C:\Users\administrator\Desktop\授权名单.txt"   # 存放组员名字的文件,每行一个
$foldersFile = "C:\Users\administrator\Desktop\权限模板.txt"   # 存放文件夹描述的文件,每行一个

# 读取文件内容
$members = Get-Content -Path $membersFile | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne "" }
$folderEntries = Get-Content -Path $foldersFile | ForEach-Object { $_.Trim() } | Where-Object { $_ -ne "" }

# 获取组员数量和文件夹数量
$memberCount = $members.Count
$folderCount = $folderEntries.Count

# 确保组员和文件夹数量相同
if ($memberCount -ne $folderCount) {
    Write-Host "组员数量 ($memberCount) 和文件夹数量 ($folderCount) 不匹配,无法继续。"
    exit
}

# 遍历每个文件夹,为对应的组员赋予读取访问权限
for ($i = 0; $i -lt $memberCount; $i++) {
    $member = $members[$i]
    $folderEntry = $folderEntries[$i]

    # 提取文件夹名称并忽略描述部分
    $folderName = ($folderEntry -split "[,、]")[0].Trim()

    # 去除“组”字后缀以实现模糊匹配
    $normalizedFolderName = $folderName -replace "组$", ""
    
    # 定义共享文件夹路径,并尝试匹配
    $folderPathWithGroup = "C:\共享文件夹\" + $folderName  # 带“组”字的路径
    $folderPathWithoutGroup = "C:\共享文件夹\" + $normalizedFolderName  # 去掉“组”字的路径
    
    # 检查文件夹路径是否存在,以决定使用带“组”或不带“组”的文件夹路径
    if (Test-Path $folderPathWithGroup) {
        $folderPath = $folderPathWithGroup
        $shareName = $folderName
    } elseif (Test-Path $folderPathWithoutGroup) {
        $folderPath = $folderPathWithoutGroup
        $shareName = $normalizedFolderName
    } else {
        Write-Host "文件夹 $folderName 或 $normalizedFolderName 不存在,跳过此项。"
        continue
    }

    # 统一分配读取权限
    $smbAccessRight = "Read"
    $fileSystemRight = "(OI)(CI)R"  # 读取权限

    # 添加SMB共享权限
    Grant-SmbShareAccess -Name $shareName -AccountName $member -AccessRight "${smbAccessRight}" -Force
    Write-Host "已为 $member 添加 $shareName 共享的读取权限"

    # 添加文件系统访问权限
    icacls "$folderPath" /grant "${member}:${fileSystemRight}"
    Write-Host "已为 $member 添加 $folderPath 文件夹的读取权限"
}

<# 质检TO项目公共目录 #>
Write-Host "质检文件夹批量授权"

# 定义共享名称和文件夹路径
$shareName = "质检"  # 共享名称
$folderPath = "C:\共享文件夹\质检"  # 共享文件夹的实际路径
$domainUsersFile = "C:\Users\administrator\Desktop\授权名单.txt"  # 包含用户的txt文件路径(不带域名)

# 定义域名
$domain = "CSXZX"

# 读取txt文件,假设每行是一个用户名(不带域名)
$domainUsers = Get-Content -Path $domainUsersFile

foreach ($user in $domainUsers) {
    # 为每个用户加上域名前缀
    $fullUserName = "$domain\$user"

    Write-Host "正在为用户 $fullUserName 添加权限..."

    # 1. 添加共享权限(只读)
    try {
        Grant-SmbShareAccess -Name $shareName -AccountName $fullUserName -AccessRight Read -Force
        Write-Host "共享权限:用户 $fullUserName 已被授予只读访问权限。"
    } catch {
        Write-Host "共享权限:无法为用户 $fullUserName 添加访问权限,可能该用户已存在或发生其他错误。"
    }

    # 2. 添加NTFS权限(只读)
    try {
        # 使用icacls命令授予用户只读权限
        # 显式 vs 继承权限:普通权限界面显示的是显式设置的权限,而“高级”选项中还会显示从父文件夹或其他权限继承而来的权限。
        # $icaclsCommand = "icacls `"$folderPath`" /grant `"${fullUserName}:(R)`" /t" # 隐示权限
        #(OI) 是“对象继承”,表示权限将应用到文件夹内的文件。
        #(CI) 是“容器继承”,表示权限将应用到文件夹内的子文件夹。
        $icaclsCommand = "icacls `"$folderPath`" /grant `"${fullUserName}:(OI)(CI)R`" /t" # 显示权限
        # 将字符串转换为命令
        Invoke-Expression $icaclsCommand
        Write-Host "NTFS权限:用户 $fullUserName 已被授予只读访问权限。"
    } catch {
        Write-Host "NTFS权限:无法为用户 $fullUserName 添加访问权限,可能发生错误。"
    }
}

效果如下:

根据文本内容批量添加相关权限

需求:根据文本内容批量添加相关权限,相关共享文件夹实际名称与文本提供的名称存在部分差异,但需要根据此类文本批量加入相关权限。

首先是如下图的excel表格

然后复制这些内容到文本

根据文本内容批量添加相关权限。

实现方式:对文本内容进行切片,以空格、顿号、逗号、制表符的方式进行划分。然后以匹配关键字的方式如“访问”、“编辑”,进行不同的权限划分。

# 定义主目录路径
$baseFolderPath = "C:\共享文件夹"  # 基础路径
$userFile = "C:\Users\Administrator\Desktop\权限分配列表.txt"  # 替换为实际的 TXT 文件路径

# 读取用户文件的每一行
Get-Content $userFile | ForEach-Object {
    # 按空格分隔每一行的内容
    # $parts = $_ -split '\s+'
    $parts = $_ -split '[\s,\t、]+'  # 正则表达式包含空格、制表符、逗号和顿号
    if ($parts.Length -ge 8) {
        $username = $parts[0]
        $folder2 = $parts[5]  # 组文件夹
        $folder3 = $parts[6]  # 公共目录文件夹
        $permissionType = $parts[7]

        # 设置 NTFS 权限类型
        $ntfsPermission = if ($permissionType -like "*访问*") { 
            "(OI)(CI)(R)"  # 只读权限
        } elseif ($permissionType -like "*编辑*" -or $permissionType -like "*读写*" -or $permissionType -like "*保存*") { 
            "(OI)(CI)(M)"  # 修改权限
        } else { 
            "(OI)(CI)(R)"  # 默认读权限
        }

        # 设置共享权限类型
        $sharePermission = if ($permissionType -like "*访问*") { 
            "Read"  # 共享只读权限
        } elseif ($permissionType -like "*编辑*" -or $permissionType -like "*读写*" -or $permissionType -like "*保存*") { 
            "Change"  # 共享更改权限
        } else { 
            "Read"  # 默认共享只读权限
        }

        # 处理 folder2(组文件夹)路径,去掉“组”字
        $folder2WithoutGroup = if ($folder2 -like "*组") {
            $folder2 -replace "组$", ""  # 去掉“组”字(结尾)
        } else {
            $folder2  # 如果没有“组”字,保持原样
        }

        # 构建完整的文件夹路径
        $fullPath1 = Join-Path -Path $baseFolderPath -ChildPath $folder2  # 原始组文件夹路径
        $fullPath2 = Join-Path -Path $baseFolderPath -ChildPath $folder3  # 公共目录文件夹路径
        $fullPath3 = Join-Path -Path $baseFolderPath -ChildPath $folder2WithoutGroup  # 去掉“组”字后的文件夹路径

        # 为每个文件夹路径分配权限
        $folders = @($fullPath1, $fullPath2, $fullPath3)
        
        foreach ($folderPath in $folders) {
            # 检查文件夹路径是否存在
            if (-Not (Test-Path $folderPath)) {
                Write-Output "路径 $folderPath 不存在,跳过该路径。"
                continue
            }

            # 使用 icacls 设置 NTFS 权限
            icacls "$folderPath" /grant ${username}:$ntfsPermission /t
            Write-Host "已为用户 $username 在文件夹 $folderPath 分配 NTFS $ntfsPermission 权限。" -ForegroundColor Yellow
            
            # 检查共享是否存在
            $netShareName = (Get-Item $folderPath).Name  # 使用文件夹名称作为共享名称

            if (Get-SmbShare -Name $netShareName -ErrorAction SilentlyContinue) {
                # 如果共享存在,添加共享权限
                Grant-SmbShareAccess -Name $netShareName -AccountName "$username" -AccessRight $sharePermission -Force
                Write-Host "已为用户 $username 在共享 $netShareName 分配共享 $sharePermission 权限。" -ForegroundColor Yellow
            } else {
                Write-Output "共享 $netShareName 不存在,跳过共享权限分配。"
            }
        }
    }
    else {
        Write-Output "行格式不匹配,跳过:$_"
    }
}

Write-Output "所有用户权限已成功添加。"

删除用户共享文件夹权限

查看用户有哪些文件夹的共享权限和安全权限

当钉钉流程提出变更权限的需求时,有时会因为无法清楚了解之前成员在各个文件夹中的权限而感到困扰。这时,可以通过脚本自动查看并列出用户在共享文件夹和安全权限方面的具体信息,避免依赖联系用户或相关人员。这样不仅提高了效率,也确保了权限变更的准确性和及时性。

# 配置域名
$domain = "CSXZX"
$userName = Read-Host "请输入目标用户名(用户名)"  # 输入用户名
$userName = "$domain\$userName"  # 构造完整用户名

# 获取用户的共享权限
Write-Host "检查 $userName 的共享权限:"
Get-SmbShare | ForEach-Object {
    $shareName = $_.Name
    $access = Get-SmbShareAccess -Name $shareName | Where-Object { $_.AccountName -eq $userName }
    if ($access) {
        $access | ForEach-Object {
            Write-Host "$userName 在共享文件夹 '$shareName' 中的权限:$($_.AccessControlType) $($_.AccessRight)"
        }
    }
}

# 获取用户的NTFS权限
Write-Host "`n检查 $userName 的 NTFS 权限:"
Get-SmbShare | ForEach-Object {
    $folderPath = $_.Path
    if ($folderPath -and (Test-Path $folderPath)) {  # 检查路径是否为空且存在
        $acl = Get-Acl -Path $folderPath
        $userAccess = $acl.Access | Where-Object { $_.IdentityReference -eq $userName }
        if ($userAccess) {
            $userAccess | ForEach-Object {
                Write-Host "$userName 在 '$folderPath' 中的 NTFS 权限:$($_.AccessControlType) $($_.FileSystemRights)"
            }
        }
    }
}

Write-Host "`n检查完成。"

删除用户相关文件夹的共享及安全权限

在变更权限时,通常需要先移除用户原有的共享文件夹权限,然后根据新的需求赋予相应的共享文件夹权限。通过这种方式,确保权限变更过程既清晰又准确,避免不必要的权限冲突或遗漏,从而提升管理效率。

# 配置域名
$domain = "CSXZX"  

# 提示用户输入用户名和共享文件夹名称
$userName = Read-Host "请输入目标用户名(用户名)"  # 仅输入用户名
$shareName = Read-Host "请输入共享文件夹名称"  # 输入共享文件夹名称

# 构造完整的用户名
$userName = "$domain\$userName"

# 获取共享文件夹路径
$folderPath = (Get-SmbShare -Name $shareName).Path

# 移除 NTFS 权限
$acl = Get-Acl -Path $folderPath
$acl.Access | Where-Object { $_.IdentityReference -eq $userName } | ForEach-Object {
    $acl.RemoveAccessRule($_)
}
Set-Acl -Path $folderPath -AclObject $acl
Write-Host "已成功移除 $userName 的 NTFS 权限"

# 移除共享权限
Revoke-SmbShareAccess -Name $shareName -AccountName $userName -Force
Write-Host "已成功移除 $userName 的共享权限"

移除用户所有涉及到的共享文件夹权限

通过 Get-SmbShare 获取所有共享文件夹,排除一些系统级共享文件夹,进行遍历移除该用户涉及到的所有文件夹权限。此外还能进行手动例外的文件夹列表进行排除,以防不必要多余的权限移除。

# 配置域名
$domain = "CSXZX" 
$userName = Read-Host "请输入目标用户名(用户名)"  # 输入用户名
$excludeShares = Read-Host "请输入排除的共享文件夹(用逗号或顿号分隔,不输入则默认移除所有共享文件夹)"

# 默认排除的共享文件夹
$defaultExcludeShares = @("ADMIN$", "C$", "IPC$", "NETLOGON", "SYSVOL")

# 构造完整的用户名
$userName = "$domain\$userName"

# 获取所有共享文件夹
$shares = Get-SmbShare

# 过滤需要排除的共享文件夹
if ($excludeShares) {
    $excludeSharesList = ($excludeShares -replace "、", ",").Split(",")
    $excludeSharesList += $defaultExcludeShares  # 合并默认排除共享文件夹
    $shares = $shares | Where-Object { $excludeSharesList -notcontains $_.Name }
} else {
    # 如果没有输入排除的共享文件夹,则使用默认排除列表
    $shares = $shares | Where-Object { $defaultExcludeShares -notcontains $_.Name }
}

# 遍历所有共享文件夹,移除用户权限
foreach ($share in $shares) {
    # 检查用户是否有共享权限
    $access = Get-SmbShareAccess -Name $share.Name | Where-Object { $_.AccountName -eq $userName }
    if ($access) {
        # 移除共享权限
        Revoke-SmbShareAccess -Name $share.Name -AccountName $userName -Force
        Write-Host -ForegroundColor Green "已移除 $userName 在共享文件夹 '$($share.Name)' 的共享权限"
    } else {
        Write-Host "$userName 在共享文件夹 '$($share.Name)' 中没有共享权限,无需移除"
    }

    # 获取文件夹路径并移除 NTFS 权限
    $folderPath = $share.Path
    $acl = Get-Acl -Path $folderPath
    $userAccess = $acl.Access | Where-Object { $_.IdentityReference -eq $userName }
    
    if ($userAccess) {
        # 移除用户的 NTFS 权限
        $userAccess | ForEach-Object {
            $acl.RemoveAccessRule($_)
        }
        Set-Acl -Path $folderPath -AclObject $acl
        Write-Host -ForegroundColor Green "已移除 $userName 在 '$folderPath' 的 NTFS 权限"
    } else {
        Write-Host "$userName 在 '$folderPath' 中没有 NTFS 权限,无需移除"
    }
}

Write-Host "权限移除完毕"

批量删除未知用户的文件夹权限残留

如果用户此前在相关文件夹有对应的共享、安全权限,常规直接删除用户会留下残留,如图。

删除安全权限

删除文件夹未知用户的安全权限

# 定义共享文件夹路径
$folderPath = "C:\共享文件夹\生产作业2"

# 获取文件及文件夹的现有权限
$acl = Get-Acl -Path $folderPath

# 查找并删除所有未知用户(使用 SID 表示的权限)
$acl.Access | Where-Object { $_.IdentityReference -match "^S-1-" } | ForEach-Object {
    $acl.RemoveAccessRule($_)
}

# 应用更改后的 ACL
Set-Acl -Path $folderPath -AclObject $acl

Write-Output "已成功删除文件夹 $folderPath 中的未知用户权限"

删除根目录中所有文件夹中包含未知用户的安全权限

# 定义根文件夹路径
$folderPath = "C:\共享文件夹"  # 替换为实际路径

# 递归遍历指定文件夹及其子文件夹
Get-ChildItem -Path $folderPath -Recurse | ForEach-Object {
    # 获取当前文件或文件夹的 ACL
    $acl = Get-Acl -Path $_.FullName

    # 查找所有未知用户(SID 格式且没有解析为用户名的账户)
    $unknownSIDs = $acl.Access | Where-Object { $_.IdentityReference -match "^S-1-" }

    # 删除每个未知用户的权限
    foreach ($rule in $unknownSIDs) {
        $acl.RemoveAccessRule($rule)
        Write-Output "已删除文件/文件夹 $($_.FullName) 中的未知用户权限: $($rule.IdentityReference.Value)"
    }

    # 将更改后的 ACL 应用到文件或文件夹
    Set-Acl -Path $_.FullName -AclObject $acl
}

Write-Output "已成功删除文件夹 $folderPath 中所有未知用户的安全权限"

删除共享权限

删除未知用户共享权限

# 定义共享名称
$shareName = "生产作业2"  # 替换为实际共享名称

# 获取共享的访问权限
$accessRules = Get-SmbShareAccess -Name $shareName

# 筛选未知用户(匹配 AccountName 包含 SID 的条目)
$unknownSIDs = $accessRules | Where-Object { $_.AccountName -match "S-1-" }

# 遍历并删除每个未知用户的共享权限
foreach ($rule in $unknownSIDs) {
    $unknownSID = $rule.AccountName
    Write-Output "正在删除共享 '$shareName' 中的未知用户权限: $unknownSID"
    Revoke-SmbShareAccess -Name $shareName -AccountName $unknownSID -Force
}

Write-Output "已成功删除共享 '$shareName' 中所有未知用户的权限"

删除所有共享文件夹中的未知用户权限

# 获取所有共享
$shares = Get-SmbShare

# 遍历每个共享
foreach ($share in $shares) {
    $shareName = $share.Name
    Write-Output "正在处理共享文件夹: $shareName"
    
    # 获取当前共享的访问权限
    $accessRules = Get-SmbShareAccess -Name $shareName

    # 筛选未知用户(匹配 SID 格式的账户)
    $unknownSIDs = $accessRules | Where-Object { $_.AccountName -match "S-1-" }

    # 删除每个未知用户的共享权限
    foreach ($rule in $unknownSIDs) {
        $unknownSID = $rule.AccountName
        Write-Output "  删除共享 '$shareName' 中的未知用户权限: $unknownSID"
        Revoke-SmbShareAccess -Name $shareName -AccountName $unknownSID -Force
    }
}

Write-Output "已成功删除所有共享文件夹中的未知用户权限"

文件夹安全权限转换对应的共享权限

需求:公司域控及共享服务器硬件升级,由普通的台式主机更换成专业的服务器。这就需要搭建备域控,并对共享文件进行完整的迁移。

使用 robocopy 工具(以管理员权限运行CMD)

参考:Jack_孟 - robocopy命令简介,ROBOCOPY source destination [file [file]...] [options]

复制文件夹全部内容及保留所有文件信息,同时保留用户相关 NTFS 权限。如果不在一个域中,就会出现未知用户。

ROBOCOPY \\Cs-dc2\张三组 E:\张三组 /E /COPYALL

编写脚本实现安全权限转换对应的共享权限

首先打开共享设置

共享文件夹的名称往往与文件夹的实际名称相同,一来是系统默认便是如此,二来方便管理。

# 接收用户输入的文件夹路径
$folderPath = Read-Host -Prompt "请输入文件夹路径(例如:C:\共享文件夹\质检)"

# 接收用户输入的共享名称
$shareName = Read-Host -Prompt "请输入共享名称(例如:质检)"

try {
    # 获取文件夹的 NTFS 安全权限
    $acl = Get-Acl -Path $folderPath

    # 禁用文件夹的权限继承,并将现有的继承权限转换为显式权限
    $acl.SetAccessRuleProtection($true, $false)
    Set-Acl -Path $folderPath -AclObject $acl
    Write-Output "已禁用权限继承并设置显式权限。"
} catch {
    Write-Output "获取文件夹权限或禁用继承时出错: $_"
    exit
}

# 建立有效的 NTFS 用户权限列表
$ntfsUsers = @{ }

foreach ($access in $acl.Access) {
    $user = $access.IdentityReference.Value
    $permissions = $access.FileSystemRights.ToString()

    if ($permissions.Contains("FullControl")) {
        $ntfsUsers[$user] = "Full"
    }
    elseif ($permissions.Contains("Modify")) {
        $ntfsUsers[$user] = "Change"
    }
    elseif ($permissions.Contains("ReadAndExecute") -or $permissions.Contains("Read")) {
        $ntfsUsers[$user] = "Read"
    }
    else {
        Write-Output "未匹配权限类型:$permissions,跳过用户 $user 的共享权限设置"
    }
}

# 定义例外列表,仅适用于 NTFS 权限(不加入共享权限)
$exceptionList = @(
    "CREATOR OWNER", 
    "SYSTEM", 
    "Users", 
    "Administrators", 
    "BUILTIN\Administrators", 
    "NT AUTHORITY\SYSTEM", 
    "NT AUTHORITY\Authenticated Users"
)

try {
    # 清除现有的共享权限,确保只为 NTFS 权限中非例外用户添加共享权限
    Get-SmbShareAccess -Name $shareName | ForEach-Object {
        Revoke-SmbShareAccess -Name $shareName -AccountName $_.AccountName -Force
    }
    Write-Output "已清除现有共享权限。"

    # 设置共享权限为 NTFS 权限中非例外用户的权限
    foreach ($user in $ntfsUsers.Keys) {
        if (-not $exceptionList.Contains($user)) {
            try {
                # 检查用户是否为SID格式(避免没有账户名的错误)
                if ($user -match "^S-\d-\d+-(\d+-){1,14}\d+$") {
                    Write-Output "跳过SID格式用户 $user 的共享权限设置。"
                } else {
                    Grant-SmbShareAccess -Name $shareName -AccountName $user -AccessRight $ntfsUsers[$user] -Force
                    Write-Output "已为用户 $user 设置共享权限:$ntfsUsers[$user]"
                }
            } catch {
                Write-Output "为用户 $user 设置共享权限时出错(账户名与安全标识无映射): $_"
            }
        }
    }
} catch {
    Write-Output "清除共享权限时出错: $_"
}

try {
    # 移除非 NTFS 列表中的用户,并为例外用户添加自定义 NTFS 权限
    foreach ($access in $acl.Access) {
        $user = $access.IdentityReference.Value
        if (-not $ntfsUsers.ContainsKey($user) -and -not $exceptionList.Contains($user)) {
            $acl.RemoveAccessRule($access)
            Write-Output "已移除用户 $user 的NTFS权限"
        }
    }

    # 删除 Everyone 的共享和 NTFS 权限
    Revoke-SmbShareAccess -Name $shareName -AccountName "Everyone" -Force
    $acl.Access | Where-Object { $_.IdentityReference -eq "Everyone" } | ForEach-Object { $acl.RemoveAccessRule($_) }
    Write-Output "已删除 Everyone 的共享和 NTFS 权限。"

    # 添加例外列表中的系统账户权限
    $usersRule = New-Object System.Security.AccessControl.FileSystemAccessRule("Users", "ReadAndExecute, ListDirectory, Read", "ContainerInherit, ObjectInherit", "None", "Allow")
    $adminsRule = New-Object System.Security.AccessControl.FileSystemAccessRule("BUILTIN\Administrators", "FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
    $systemRule = New-Object System.Security.AccessControl.FileSystemAccessRule("NT AUTHORITY\SYSTEM", "FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
    $creatorOwnerRule = New-Object System.Security.AccessControl.FileSystemAccessRule("CREATOR OWNER", "FullControl", "ContainerInherit, ObjectInherit", "InheritOnly", "Allow")

    # 将新的规则添加到 ACL 中
    $acl.AddAccessRule($usersRule)
    $acl.AddAccessRule($adminsRule)
    $acl.AddAccessRule($systemRule)
    $acl.AddAccessRule($creatorOwnerRule)

    # 将更改后的 ACL 应用到文件夹
    Set-Acl -Path $folderPath -AclObject $acl
    Write-Output "共享和 NTFS 权限设置已完成,保留了系统级用户,并已删除多余的成员。"
} catch {
    Write-Output "设置或更新 NTFS 权限时出错: $_"
}

后话

文件迁移工具实测后对比

FMST

看了 虎头 - 利用FSMT进行文件服务器迁移及整合 提到的FSMT,光是找资源都费了老半天,在server2019上使用较为麻烦,需要额外安装 .net2.0,以及界面老旧,看英文也挺不方便。安装上了,但操作有报错提示,于是不再深究,直接换方案了。

Windows迁移工具

老收藏家 - 浅谈NTFS权限迁移与共享权限迁移(上) 提到安装 ,也就是Windows迁移工具。

当时安装完,使用时一直处于以下状态,于是也放弃了。

  • 正在打开连接。请在目标服务器上运行 Receive-SmigServerData。
  • 正在打开连接。请在源服务器上运行 Send-SmigServerData。
  • Send-SmigServerData : 开始连接的传输失败。 此 cmdlet 无法连接到目标服务器。有关详细信息,请转到 Windows Server 2016 TechCenter,参阅《文件服务迁移指南》中“疑难解答”部分的“数据迁移连接”。

其他方法

老收藏家 - 浅谈NTFS权限迁移与共享权限迁移(下) 提到的 Permcopy 使用效果不理想,以及相关搜索到的注册表导入的方式,也行不通。

组织单元人员迁移

需求:由于质检组成员需要搬迁到其他楼层,逐一安装软件显然效率较低。为了提高工作效率,决定将质检组内的成员统一转移到"WPS下发"组织单元应用组策略,以便集中部署WPS软件。

  1. 首先,让质检主管统计一份需要安装WPS的人员名单。
  2. 然后依据名单,执行脚本,进行批量迁移

# 定义目标 OU 路径
# $targetOU = "OU=wps下发,OU=常用软件下发,DC=CSXZX,DC=com"
$targetOU = "OU=质检,OU=生产团队,DC=CSXZX,DC=com"

# 读取用户名名单文件
$userListPath = "C:\Users\Administrator\Desktop\需开通WPS权限的质检人员.txt"
$userNames = Get-Content -Path $userListPath

# 遍历名单并移动用户
foreach ($userName in $userNames) {
    # 获取用户的完整 DistinguishedName
    $user = Get-ADUser -Filter {SamAccountName -eq $userName}
    
    if ($user) {
        # 移动用户到目标OU
        Move-ADObject -Identity $user.DistinguishedName -TargetPath $targetOU
        Write-Host "用户 $userName 已移动到 $targetOU"
    } else {
        Write-Host "未找到用户 $userName"
    }
}

组织单元与域用户还原(应急储备)

组织单元还原

删除组织单元

support.huawei.com - AD上删除OU失败,提示没有权限删除

你没有足够的权限删除,或者该对象受保护,以防止意外删除。

在“Active Directory用户和计算机”窗口中,点击菜单栏上的“查看”,然后选择“高级功能”。这一步是为了显示更多高级选项,包括组织单元的属性设置。

或者右键【查看】选择【高级功能】

在【属性】里反向勾选【防止对象意外删除】

记得转移用户,否则连在组内的用户也会一并删除。

恢复组织单元

有时过滤器条件过于具体,导致无法匹配到对象。例如,如果使用了特定的 samAccountName 或 Name 值,但在AD中不存在这个精确的值,那么搜索将返回空结果。可以尝试 ObjectClass 过滤器,以确保返回所有被删除的OU,而不是基于名称的特定过滤器。

一、查询被删除的组织单元

Get-ADObject -Filter { ObjectClass -eq "organizationalUnit" } -IncludeDeletedObjects -SearchBase (Get-ADDomain).DeletedObjectsContainer

二、找到相关GUID

Restore-ADObject -Identity "e419292d-bbf3-4d9d-9b09-34cac1676367"

域用户还原

恢复域用户以前在文件夹的共享权限及安全权限都会复原,从未知用户变回来的。

恢复域用户

小k2023 - 恢复AD用户误删,给你3种方案!

张三没有删除前 Deleted 后面是空值,同时也可查出一些同名的被删除。

Get-ADObject -Filter {samaccountname -eq " 张三"} -IncludeDeletedObjects

第一种方式

https://learn.microsoft.com/zh-tw/powershell/module/activedirectory/restore-adobject?view=windowsserver2022-ps

Restore-ADObject -Identity fc9ef534-e4b4-4bda-b894-4e91797d233e"" -NewName "张三1" -TargetPath "OU=生产团队,DC=CSYLQ,DC=COM"

第二种方式

https://www.manageengine.cn/ad-recovery-manager/powershell-backup-active-directory-restore-cmdlets.html

(Get-ADObject -SearchBase (get-addomain).deletedobjectscontainer -IncludeDeletedObjects -filter "samaccountname -eq '王诗诗'") | Restore-ADObject -NewName "王诗诗"

恢复账户后,通常需要设置密码强度来启用账户

Set-ADAccountPassword -Identity "王诗诗" -NewPassword (ConvertTo-SecureString -AsPlainText "Mima123" -Force)

Enable-ADAccount -Identity "王诗诗"
  1. 如果操作对象的组织单元也没了,恢复则会报错:由于对象的父类不是未范例化就是被删除了,所以不能执行操作。
  2. 如果重名:试图给目录添加一个名称已在使用中的对象。

图形界面

【管理工具】选择 【active directory 管理中心】(DSAC)

启用回收站

注意:回收站一旦开启将无法禁用,效果还挺好。

实施方案撰写及排版说明

按这个顺序做方案:

  1. 实施背景
  2. 方案思路及操作步骤
  3. 可能出现的问题及影响和应对
  4. 计划实施时间

以及后续补充:

  • 已出现的难点和问题解决
  • 总结

封面及标题

封面部分字体及大小: 方正小标宋简体,小初

大标题=题目字体及大小: 方正小标宋简体,二号。

一级标题字体及大小: 黑体,三号。

一级标题指的是序号为【一、】的标题,也是最大的标题,是4号黑体,单独一行,也不加标点符号。

二级标题字体及大小: 楷体,三号。

二级标题指的是序号为【(一)】的标题,一般和正文字体大小一样,单独一行,也不加标点符号。

三级标题字体及大小: 三级标题指的是序号为【1. 】的标题,一般和正文字体大小一样,字体一样。

四级标题字体及大小: 四级标题用3号仿宋字体,用阿拉伯数字外加小括号“(1)”、“(2)”、“(3)”…标识。

  • 英文用 Times New Roman 字体,3号
  • 数字也可用 Times New Roman 字体,3号
  • 五级标题字体大小都是一样的, ①、②、③。公文的格式。

目录及分页

目录标题字体及大小: 黑体,小二,居中;目录标题与目录章节需要单独空格。

  • 目录内容字体及大小:视文章章节长度而定。

使用自动目录的方式:

页码的使用

封面不需要页码,但保留目录页码可参考此视频:https://www.bilibili.com/video/BV1aQ4y1u7Vr ,同时也可借鉴其排版。

页码要求及配置

目录在七八页以上建议换成非罗马数字,毕竟太小众也看不懂,影响阅览体验。

  • 封面 无页码
  • 目录 罗马数字
  • 正文 1,2,3常规数字

一般使用分节符(下一页)进行分页,注意:使用错了将不能断开链接。

点击“链接到前一节”断开链接后,就可以删除前一页的页码了。

罗马数字设置方法 【设置页码格式】

细节部分

像这种一级标题与一级标题之间的换行是不必要的,需要删除。

英文与中文之间字体自带间距不需要空格。这跟写网页文章还是有些不一样的。

面试TCP三次握手的学习理解

eNSP全套软件下载地址汇总-华为企业互动社区

OSI 各层作用

PixPin_2024-12-16_11-38-50

TCP/IP层

数据传输过程

TCP三次握手过程

syn:同步;seq:序号;ack:确认码。

PixPin_2024-12-16_11-07-53

理解方式,双方对话:1、我发送消息。2、你确认接收。3、我回复已读。

TCP三次握手应用

PixPin_2024-12-16_10-57-23

TCP四次挥手

四次挥手则是指终止TCP连接协议时,需要在客户端和服务器之间发送四个数据包。

PixPin_2024-12-16_11-18-09

理解方式,如双方会话:

  • 我想关闭。

  • 你已读,发送是否确认关闭。

  • 你发送关闭通知。

  • 我已读,回复确认消息。

网络设备分层设计

PixPin_2024-12-16_21-18-57

PixPin_2024-12-16_21-23-27

常用网络协议神图

网络协议神图

参考

IP路由基础

路由优先级比较

IP路由最长匹配原则:

PixPin_2024-12-16_19-37-01

当存在多个路由信息源时,具有较高优先级(取值较小)的路由协议发现的路由将成为最优路由。

常见的路由优先级:

  • 直连 0
  • OSPF 10
  • 静态 60
  • BGP 255

总结

  • 相同的前缀,且通过不同的协议获取,先比路由协议优先级,优先的条目装载进路由表,如果路由协议优先级相等,则比较度量值。
  • 在路由查找时采用最长匹配原则,匹配、转发;没有匹配项,则找缺省路由,如果也没有缺省路由,则丢弃数据包。
  • 路由表的行为是逐跳的,到目标网络的沿路径每个路由器都必须有关于目标的路由,否则就会造成丢包。
  • 数据是双向的,考虑流量的时候,要关注流量的往返。

PixPin_2024-12-16_20-32-04

路由转发原则

PixPin_2024-12-16_22-01-03

路由交换——数据转发的动作,将封装好的数据转发到下一个节点,当我们的数据封装到网络层之后,怎么转发给下一个节点。这时候就需要用到路由器(路由动作发给下一跳设备)和交换机(交换工作实现转发给下一跳)。

总结:数据传递的过程要么就是路由,要么就是交换。分别对应的网络层的寻址方式,链路层转发的方式。

路由转发:三层转发(网络层称为三层)

交换转发:二层转发(数据链路层称为二层,基于MAC地址转发)

交换转发原则

摘抄:松山湖开发者村综合服务平台

交换机转发依据 — MAC地址表:

  • 在以太网中有一个重要的机制—ARP(地址解析协议):知道了访问的ip地址,查询mac地址的过程。
    • ARP请求:根据ip寻找mac地址,这是一种广播的方式请求。
    • ARP应答:根据ip应答mac地址,这是一种单播的方式请求。

交换机收到ARP报文后,会进行两件事情:

  • 学习: 当数据帧进入到交换机的接口后,交换机实现将源mac和接口对应起来的动作就叫做学习,并存储MAC地址表中。

  • 转发:根据MAC地址,查询mac地址表转发,每一个硬件在厂家出厂的时候,都会给设备打上一个唯一的标识符,用于识别该设备。

进化:VLAN,虚拟局域网 — 减小广播域的范围,存在于交换机的概念。在同区域之间才会泛洪,不同区域之间不会泛洪,减少广播域的泛洪范围。

chatgpt 摘抄

ARP :它的主要作用是帮助网络设备通过IP地址查找对应的MAC地址。

Ethernet:是面向局域网的协议,通常用于多设备之间的通信。它通过交换机、路由器等设备将多个设备连接起来,支持广播和多播通信。主要定义了如何在物理网络介质(如电缆、光纤等)上进行帧的封装与传输。如何通过MAC地址在局域网内进行通信。

PPP:通常用于单一设备与远程服务器或ISP之间的通信,它还提供链路控制、错误检测、认证等功能。

路由知识扩展

路由迭代

PixPin_2024-12-16_20-43-18

必要条件:路由必须有直连的下一跳才能够指导转发。

实际情况:路由生成时下一跳可能不是直连的,因此需要计算出一个直连的下一跳和对应的出接口,这个过程就叫做路由递归。

口语表达:写错了路由,还可以插入目的地址对应的网段指向下一跳。

等价路由

等价路由用于负载均衡,负载均衡用于解决性能、单点故障(高可用)和扩展性(水平伸缩)等问题。

PixPin_2024-12-16_20-58-07

浮动路由

口头语:设置优先级的路由,用做备选路径的路由。

PixPin_2024-12-16_21-09-44

路由汇总

如图所示

PixPin_2024-12-16_21-13-53

参考资料

网络拓扑寻址与实验

上篇

上篇可以单独花一天时间理解。

三张表汇总

IP-MAC的映射表

PixPin_2024-12-17_15-09-11

路由表与转发表对比

路由表

RIB不是用来进行IP包转发的,也不会被宣告到网络中。

参考 静态路由详解

  • 只使用下一跳地址时,NextHop:下一跳 IP 地址,且 Flags 为 RD
  • 只使用出接口地址时,NextHop:出接口IP地址,且Flags 为 D
  • 同时使用下一跳,出接口时,NextHop:下一跳IP 地址,且Flags为D

转发表

  • 在路由表基础之上,生成转发表。
  • FIB 表,目的是为了加快数据包的查找速度,避免每次都需要访问完整的路由表。

IP路由表管理命令 - S1720, S2700, S5700, S6720 V200R011C10 命令参考 - 华为

PixPin_2024-12-18_12-25-42

数据包流出过程

+-------------------------------------------------------------+
|                         源主机 (Host A)                   |
| 1. 生成网络层数据包 (IP 数据包) --> 数据链路层封装 (Ethernet) |
|    - IP 层: 源 IP 地址 = 192.168.1.2, 目标 IP 地址 = 192.168.2.3 |
|    - Ethernet 层: 源 MAC 地址, 目标 MAC 地址是路由器的接口 MAC 地址 |
|    - VLAN 标签: VLAN ID = 10                                |
+-------------------------------------------------------------+
             |
             | 2. 数据包通过网络链路发送到交换机
             v
+-------------------------------------------------------------+
|                       交换机 (Switch)                     |
| 3. 交换机根据 VLAN 标签转发数据包                         |
|    - 交换机查看 VLAN 标签,决定将数据包转发到 VLAN 10 的端口 |
|    - 交换机根据 MAC 地址表和 VLAN 标签进行转发              |
+-------------------------------------------------------------+
             |
             | 4. 交换机将数据包转发到路由器或其他设备
             v
+-------------------------------------------------------------+
|                         路由器 (Router)                     |
| 5. 路由器接收到带有 VLAN 标签的数据包                    |
|    - 数据链路层解封装 (Ethernet Frame + VLAN 标签)          |
|    - 根据目标 IP 地址和路由表,决定将数据包转发到下一跳     |
|    - Ethernet 层: 目标 MAC 地址 = 下一跳路由器的 MAC 地址    |
|    - 通过 VLAN 接口转发数据包                               |
+-------------------------------------------------------------+
             |
             | 6. 数据包通过网络链路发送到目标路由器或目标主机
             v
+-------------------------------------------------------------+
|                      目标路由器 (Router)                   |
| 7. 数据链路层解封装 (Ethernet Frame + VLAN 标签) --> 网络层转发决策 |
|    - 目标 IP 地址是 192.168.2.3,目标主机 IP 地址           |
|    - 确定数据包最终转发到目标主机                           |
+-------------------------------------------------------------+
             |
             | 8. 数据包通过局域网发送到目标主机
             v
+-------------------------------------------------------------+
|                       目标主机 (Host B)                     |
| 9. 接收网络层数据包 (IP 数据包) --> 网络层解封装             |
|    - IP 层: 目标 IP 地址匹配,最终交付给目标应用层          |
+-------------------------------------------------------------+

板卡·具体机器内部的数据包转出

Z-lib 一个报文的路由器之旅

PixPin_2024-12-17_23-35-44

加上逻辑框架好对模块功能分类,这部分内容知识相当于修交换机硬件了。

27张图详解网络设备转发流程:路由器、交换机、防火墙是如何处理数据报文的?-腾讯云开发者社区-腾讯云

PixPin_2024-12-17_23-44-36

下篇

静态实验拓扑

静态拓扑参考:https://blog.csdn.net/qq_57340195/article/details/118095137

即使按照如图配置添加路由器接口网关、添加主机IP,PC1依旧无法 ping 通PC2。

PixPin_2024-12-18_11-38-02

两台路由设备加入对端静态路由条目才能ping通。

[R1]
ip route-static 192.168.20.0 24 192.168.1.2
[R2]
ip route-static 192.168.10.0 24 192.168.1.1

Error: The next-hop address is invalid. 一般是对端、需要转发的目的IP、转发方向没分清楚。

网关

  • 网关是指两个网络之间的连接点,如果两个网络采用不同的协议,那么网关就是实现协议转换的设备。
  • 网关的主要作用是将不同类型的网络互相连接,以便在它们之间进行数据交换。
  • 网关通常位于两个不同网络之间,常见的例子是路由器、交换机等。

下一跳

  • 下一跳只是一个用于数据包路由的参数,下一跳通常是由路由器动态计算得出,以便最终到达目的地。
  • 下一跳是在数据包传输的过程中动态计算得出的参数,它不确定的位置可能是在路由器、交换机或其他设备。

动态实验拓扑

DHCP原理参考:DHCP的原理与配置(结合案例分析) - 笑洋仟 - 博客园

可靠性方面,类似TCP/IP四次挥手,DHCP也是四步,类比招聘入职:

  1. Discover 客户端发送广播寻找DHCP服务器
  2. Offer,DHCP服务器回 offer 信息
  3. Request 客户端发送确认请求
  4. ACK,DHCP确认

拓扑及配置思路参考:DHCP中继原理和配置(含常见配置配置误区)-CSDN博客

PixPin_2024-12-19_19-43-07

配置步骤:

DHCP服务器

  • 启用DHCP
  • 配置地址池
  • 设置网段、网关、DNS等
  • 在出口上配置IP,选择DHCP全局模式
  • 静态路由指定下行口(中继)地址

DHCP中继

注意:因为常规在接口上配置IP只能是唯一的,因此使用vlan虚拟接口,将网关分别部署在各个不同接口。

  • 进入vlan虚拟接口
    • 配置DHCP地址池网关的IP地址
    • 开启DHCP中继模式
    • 中继设置成DHCP服务器的IP地址
  • 在接口上设置访问模式,并应用vlan
[R4]
dhcp enable
ip pool dhcp_test
	gateway-list 192.168.20.254 
	network 192.168.20.0 mask 255.255.255.0 
	dns-list 1.1.1.1 8.8.8.8 

interface GigabitEthernet0/0/0
	ip address 192.168.10.254 255.255.255.0 
	dhcp select global
 
[LSW1]
 vlan batch 10 20
 interface Vlanif10
	ip address 192.168.10.253 255.255.255.0
	dhcp select relay
	dhcp relay server-ip 192.168.10.254
 
interface Vlanif20
	ip address 192.168.20.254 255.255.255.0
	dhcp select relay
	dhcp relay server-ip 192.168.10.254

interface GigabitEthernet0/0/1
 	port link-type access
 	port default vlan 10
 
interface GigabitEthernet0/0/2
 	port link-type access
 	port default vlan 20

interface GigabitEthernet0/0/3
 	port link-type access
 	port default vlan 20

参考

详解一次完整的数据包传输过程 - kribee - 博客园

计算机网络学习笔记第四章(网络层)超详细整理_计算机网络第四章网络层知识点总结csdn-CSDN博客

源主机经过交换机或者路由到目的主机的过程详解_两台主机经过路由器的工作原理是什么-CSDN博客

通过wireshark抓包理解交换机、路由器工作原理_路由器交换机抓包-CSDN博客

路由表 (RIB) 与转发表 (FIB)_fib表-CSDN博客

Z-lib 一个报文的路由器之旅

网关和下一跳的区别 - 希赛考试网

27张图详解网络设备转发流程:路由器、交换机、防火墙是如何处理数据报文的?-腾讯云开发者社区-腾讯云

vlan基础(access、trunk、hybird)

access、trunk、hybird基本简介

参考:一文带你了解 VLAN 三种端口类型:Access、Trunk、Hybrid-阿里云开发者社区

vlan隔离大规模广播域,加快转发效率

  • access ,单车道,只允许一种类型vlan通信。
  • trunk ,多车道,多个vlan通信。
  • hybrid,可以在没有三层设备的情况下,实现跨vlan通信和访问控制。

PixPin_2024-12-19_21-17-24

一个物理端口只能拥有一个PVID,PVID必定等于其中的一个VID,而且在这个VID上,这个物理端口必定是Untagged Port。

  1. 普通的ACCESS端口PVID和VID只有一个是一致的;
  2. 如果是HYBRID或者TRUNK端口因为该端口能识别多个VLAN,而PVID也可以自己修改。

PVID基本简介

VLAN中PVID与VID的详解-百度开发者中心

Switch VLAN 設定教學 (V4.80) — Zyxel Community

  1. 简单来说,PVID就是一个端口的默认VLAN ID,每个端口都可以配置一个PVID,但只能有一个。
  2. 假设某端口的 PVID 为 10,当未标记的流量进入该端口时,交换机会将这些数据帧自动分配到 VLAN 10。
  3. 当端口设定Tag,封包离开时,将会持续带着标签;当端口设定 Untag,封包离开时,Switch会将 VLAN 标签移除。

将以下图示逆向理解。

PixPin_2024-12-19_23-33-51

  1. 计算机的端口添加一个属性,用来决定计算机发出的未标记的帧属于哪个VLAN,这个属性就是PVID。

  2. tag端口用来连接交换机的,untag端口是用来连接计算机。

hybird

拓扑图参考:华三 hybrid 配置命令_华三 linktype hybird-CSDN博客

PixPin_2024-12-20_11-14-45

实验效果:

  • PC1能够正常与PC2和PC3通信。

  • PC2和PC3之间不能互相通信:尝试Ping对方的IP地址时会失败。

这种配置适合同网段下的灵活管理,小组间需要共享资源但保持小组隔离的网络场景。

图解参考:华为-Hybrid原理及配置实验(附:心法口诀)_华为交换机配置口诀顺口溜-CSDN博客

配置步骤

  • 创建vlan
  • 上行口设置hybird模式(华为默认是hybird)
    • 设置上行口的 pvid vlan
    • 设置上行口的 vlan untag 放行标记(自己的vlan和下行口的vlan)
  • 下行口设置hybird模式(华为默认是hybird)
    • 设置下行口 pvid vlan
    • 设置上行口的 vlan untag 放行标记(自己的vlan和上行口的vlan)
[LSW1]
vlan batch 10 20 30
interface GigabitEthernet0/0/1
 port hybrid pvid vlan 10 # 给数据帧打上标签,送入交换机
 port hybrid untagged vlan 10 20 30 # 数据帧从这端口出去时,先查untag表,有对应的标签就脱标签再发送

interface GigabitEthernet0/0/2
 port hybrid pvid vlan 20
 port hybrid untagged vlan 10 20
 
interface GigabitEthernet0/0/3
 port hybrid pvid vlan 30
 port hybrid untagged vlan 10 30

进一步理解

tag端口用来连接交换机的,untag端口是用来连接计算机。

拓扑参考:华为Hybrid类型接口实现不同vlan之间通信_undo port hybrid vlan 1-CSDN博客

image-20241220140919478

配置步骤:

【第一台交换机】

  • 创建vlan
  • 下行口设置hybird模式(华为默认是hybird)
    • 设置下行口 pvid vlan
    • 设置上行口的 vlan untag 放行标记(自己的vlan和上行口的vlan)
  • 在级联口上打上tag标签

【第二台交换机】

  • 创建vlan
  • 在级联口上打上tag标签
  • 根据下行口去除对应标签(untagged)的 vlan
[LSW1]
vlan batch 10 20 30
interface GigabitEthernet0/0/1
	port hybrid tagged vlan 10 20 30

interface GigabitEthernet0/0/2
	port hybrid pvid vlan 10
	port hybrid untagged vlan 10 20 30

[LSW2]
vlan batch 10 20 30
interface GigabitEthernet0/0/1
	port hybrid tagged vlan 10 20 30

interface GigabitEthernet0/0/2
	port hybrid pvid vlan 20
	port hybrid untagged vlan 10 20

interface GigabitEthernet0/0/3
	port hybrid pvid vlan 30
	port hybrid untagged vlan 10 30

access

【VLAN】华为交换机接口模式详解:Access模式(接入模式)和Trunk模式(汇聚模式)(Access:主要用于连接终端设备,计算机、打印机、服务器等,Trunk模式:连接路由器、其他交换机等)-CSDN博客

access模式主要用于连接终端设备,如计算机、打印机、服务器等。由于这些设备通常只需要访问一个特定的VLAN,将交换机端口配置为Access模式是合适的。

拓扑参考:VLAN工作原理之ACCESS:接收到带VLAN的报文如何处理_网络知识_网络技术-简易百科

PixPin_2024-12-20_12-38-17

配置参考:同一VLAN能否配置多个网段? - S1720, S2700, S5700, S6720 V200R011C10 配置指南-以太网交换 - 华为

vlan batch 10 20 30
interface Vlanif10
 ip address 192.168.10.254 255.255.255.0
 ip address 192.168.20.254 255.255.255.0 sub

interface Vlanif30
 ip address 192.168.30.254 255.255.255.0
 
interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 10

interface GigabitEthernet0/0/2
 port link-type access
 port default vlan 10

interface GigabitEthernet0/0/3
 port link-type access
 port default vlan 30

trunk

Trunk模式则主要用于连接其他的网络设备,如路由器、其他交换机等。这些设备可能需要访问多个VLAN,因此,将交换机端口配置为Trunk模式是合适的。

拓扑参考:Vlan和Trunk实验(保姆级实验教程)_在sw1和sw2上创建vlan,配置trunk端口-CSDN博客

PixPin_2024-12-20_17-24-45

效果:通过交换机之间传递vlan,接入层下的主机,同一vlan的可以互通,不同vlan的无法互通。

配置步骤:

  • 首先做trunk的准备工作,先做access配置
  • 然后在级联口之间,配置trunk模式
  • 在trunk模式中,设置放行vlan
[LSW1]
vlan batch 10 20
interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 10

interface GigabitEthernet0/0/2
 port link-type access
 port default vlan 20
 
interface GigabitEthernet0/0/24
 port link-type trunk
 port trunk allow-pass vlan 10 20
 
[LSW2]
vlan batch 10 20
interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 10

interface GigabitEthernet0/0/2
 port link-type access
 port default vlan 20
 
interface GigabitEthernet0/0/24
 port link-type trunk
 port trunk allow-pass vlan 10 20
 

vlan高级技术(备忘)

super vlan

super vlan 产生背景

Super VLAN技术原理和配置_supervlan没有物理接口该怎么转发数据-CSDN博客

在大型局域网组网中,常采用接入层和核心层二层结构的组网方式,所有的网关都设在核心层设备上。由于每个VLAN都需要一个接口实现路由互通,这样问题就来了,如果因为特殊的需要,网络中划分了成百上千个VLAN,此时核心层设备就会出现VLAN接口数量不足的情况。那么,如果拥有一种技术,可以对VLAN进行聚合,就可以大幅度缩减实际需要的VLAN接口数量,交换机支持VLAN接口少的问题就可以得到解决。为了解决上面的问题,Super VLAN技术出现了。

super vlan 原理

Sub-VLAN之间属于不同的广播域,也没有属于自己的VLAN接口,因此需要在大集合Super Vlan下建立映射关系,将SuperVlan的虚拟接口作为网关来达到三层通信的效果。

原理图:四种Proxy ARP原理及区别 - 网管博客

二层通信方面,由于sub-vlan属于不同的vlan网络,因此需要arp代理,完成通信过程。对于不在同一物理网络但属于相同网段的主机,或者在同一物理网络属于相同网段但不能二层互通的主机,可以在其之间的交换机上部署ARP代理功能,以实现这些主机之间的通信。

交换机的ARP代理(交换机开启arp代理) - 路由器

PixPin_2024-12-21_10-58-23

简单来说,就是 “你 —— 秘书 —— 老板”的关系。

super vlan 配置

拓扑参考:Super Vlan理论讲解与实验配置-CSDN博客

PixPin_2024-12-21_12-58-37

配置参考:https://blog.csdn.net/m0_73931111/article/details/143814652

配置步骤:

  • 创建vlan
  • 进入vlan
    • 配置super vlan(aggregate-vlan)
    • 划分子vlan(access-vlan)
  • 在super vlan虚拟接口
    • 配置ip地址
    • 开启vlan间arp代理
  • 在各个接口应用sub-vlan
[LSW2]
vlan batch 10 20 30 40 100
vlan 40
 aggregate-vlan
 access-vlan 10 20 30
interface Vlanif40
 ip address 192.168.10.254 255.255.255.0
 arp-proxy inter-sub-vlan-proxy enable

interface Vlanif100
 ip address 192.168.100.2 255.255.255.0

interface MEth0/0/1

interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 10

interface GigabitEthernet0/0/2
 port link-type access
 port default vlan 20

interface GigabitEthernet0/0/3
 port link-type access
 port default vlan 30

MUX VLAN

blog.csdn.net/qq_46254436/article/details/105201426

MUX VLAN 主要是为大中型网络 进行设计的,一般在大中型企业内有很多职责不同的部门,各个部门之间要求相互独立,但是还有一部分部门之间有互相访问的的需求,如果是大型公司的话还会拥有很多商业来往的合作伙伴,合作伙伴人数众多且不固定,我们还需要构建网络使合作伙伴之间不可以互通也不能访问本公司其他部门,只可以访问本公司服务器。

MUX VLAN思路

拓扑参考:[VLAN]配置MUX-VLAN-CSDN博客

image-20241221154027696

配置步骤:

  • 创建vlan
  • 进入vlan
    • 设置主vlan(mux-vlan)
    • 设置隔离型(separate),或互通型从vlan(group)
  • 进入对应接口
    • 设置访问模式
    • 设置默认vlan
    • 启用 mux-vlan
[LSW1]
vlan batch 10 20 30

vlan 30
 mux-vlan
 subordinate separate 20
 subordinate group 10
interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 30
 port mux-vlan enable
 
interface GigabitEthernet0/0/23
 port link-type trunk
 port trunk allow-pass vlan 10 20 30

interface GigabitEthernet0/0/24
 port link-type trunk
 port trunk allow-pass vlan 10 20 30
 
 [LSW2]
 vlan batch 10 20 30
 
 vlan 30
 mux-vlan
 subordinate separate 20
 subordinate group 10
 
 interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 10
 port mux-vlan enable
 
interface GigabitEthernet0/0/2
 port link-type access
 port default vlan 10
 port mux-vlan enable
 
interface GigabitEthernet0/0/24
 port link-type trunk
 port trunk allow-pass vlan 10 20 30
 
 [LSW3]
 vlan batch 10 20 30
 
 vlan 30
 mux-vlan
 subordinate separate 20
 subordinate group 10
 
 interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 20
 port mux-vlan enable

interface GigabitEthernet0/0/2
 port link-type access
 port default vlan 20
 port mux-vlan enable
 
 interface GigabitEthernet0/0/24
 port link-type trunk
 port trunk allow-pass vlan 10 20 30

vlan间路由

vlan的通信方式

内容不超过大三层,用思维导图尚可。该方法比较适合内容较丰富的文章。

华为交换机-不同Vlan如何通信_华为交换机跨vlan通信-CSDN博客

7ed64eb07e7

网上相关文章总结过:

一篇掌握3种不同vlan之间互联的方式(单臂路由+Vlanif接口)_不同vlan之间如何通信-CSDN博客

初期VLAN间路由

PixPin_2024-12-22_19-19-10

优点:配置维护简单

缺点:

  • 成本太高,每增加一个vlan就需要一个端口和一条物理链路,浪费资源;
  • 可扩展性差,当vlan增加到一定数量后,路由器上可能没有那么多端口支撑;
  • 某些VLAN之间的主机可能不需要频繁进行通信,每个vlan占用一个端口会导致路由器的接口利用率很低。

配置子接口和802.1Q协议实现VLAN间通信(单臂路由)

PixPin_2024-12-22_19-29-20

优点:节省端口和物理链路,成本低,具有可扩展性,端口利用率高。 缺点:

  1. “单臂”为网络骨干链路,容易形成网络瓶颈
  2. 子接口依然依托于物理接口,应用不方便
  3. VLAN间转发需要查看路由表,严重浪费设备资源
    1. (由配置去使能VLANIF接口的ARP广播功能 - S300, S500, S2700, S5700, S6700 V200R023C00 配置指南-IP业务 - 华为开启arp转发内容,已证)

交换机虚拟接口配置vlan间路由

PixPin_2024-12-22_19-38-08

三层交换机vlan间路由配置示例

PixPin_2024-12-22_20-45-31

配置步骤:

【LSW2】和【LSW3】

  • 在对应接口配置相应vlan,access
  • 把应用在接口的vlan发送到上联口,trunk

【LSW1】

  • 下联口放行下游交换机传递过来的vlan
  • 在相关vlan虚拟接口上配置相关网关,并不需要应用相关接口

LSW2与LSW3

vlan batch 10 20
interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 10

interface GigabitEthernet0/0/2
 port link-type access
 port default vlan 20

interface GigabitEthernet0/0/24
 port link-type trunk
 port trunk allow-pass vlan 10 20

LSW1

vlan batch 10 20
interface Vlanif10
 ip address 192.168.10.254 255.255.255.0

interface Vlanif20
 ip address 192.168.20.254 255.255.255.0

interface GigabitEthernet0/0/23
 port link-type trunk
 port trunk allow-pass vlan 10 20

interface GigabitEthernet0/0/24
 port link-type trunk
 port trunk allow-pass vlan 10 20

单臂路由

什么是信道化子接口?信道化子接口与普通子接口有何不同? - 华为

dot1q termination vid - CX320 交换模块 V100R001 命令参考 11 - 华为

IEEE 802.1Q - 维基百科,自由的百科全书

原理表述参考:单臂路由详解

路由器重新封装MAC地址,转换VLAN标签 将路由器的G0/0/0接口进行逻辑划分:分为G0/0/0.1和G/0/0.2设置网关分别为主机对应IP地址网段。

在三层交换模块上通过三层以太网接口实现:

但是传统的三层以太网接口不支持VLAN报文,当收到VLAN报文时,会将VLAN报文当成非法报文而丢弃。为了实现VLAN间互通,在三层以太网接口上可创建以太网子接口,通过在子接口上部署终结子接口功能将VLAN报文中的Tag剥掉,从而实现VLAN间互通。

PixPin_2024-12-22_22-55-11

配置步骤:

交换机

  • 配置vlan,接口应用vlan
  • 上行口,传递vlan

路由器

  • 进入下行口子接口(如:int g0/0/0.10
    • 指定IP地址
    • 指定dot1q去掉单层VLAN ID
    • 启用报文广播转发(arp broadcast enable)

LSW1

vlan batch 10 20
interface GigabitEthernet0/0/1
 port link-type access
 port default vlan 10

interface GigabitEthernet0/0/2
 port link-type access
 port default vlan 20
 
interface GigabitEthernet0/0/24
 port link-type trunk
 port trunk allow-pass vlan 10 20
 

R1

interface GigabitEthernet0/0/0.10
 dot1q termination vid 10
 ip address 192.168.10.254 255.255.255.0 
 arp broadcast enable

interface GigabitEthernet0/0/0.20
 dot1q termination vid 20
 ip address 192.168.20.254 255.255.255.0 
 arp broadcast enable

针对华为交换机-不同Vlan如何通信_华为交换机跨vlan通信-CSDN博客子接口配置arp broadcast enable,的问题:AR1200内网配置子接口,完成上网配置后内网PC无法上网 - 华为已解释(ensp实验需要开启arp broadcast enable):

V2R5以前版本,子接口默认没有配置arp broadcast enable。而没有配置arp broadcast enable,系统会直接把该IP报文丢弃

  • 而且实际上丢弃的是arp reply报文,arp request报文可以正常转发,所以PC ping外网口地址可以看到会话
  • R5之后子接口是默认开启了arp broadcast enable

对于涉及到子接口的场景,首先确认是否有配置终结子接口,然后对于不同版本确认是否需要配置arp broadcast enable来实现子接口正常通信。

注:

如果终结子接口上没有配置arp broadcast enable命令,那么系统会直接把该IP报文丢弃。此时该终结子接口的路由可以看作是黑洞路由。 如果终结子接口上配置了arp broadcast enable命令,那么系统会构造带Tag的ARP广播报文,然后再从该终结子接口发出。

链路聚合知识点基本理解

eNSP全套软件下载地址汇总-华为企业互动社区

链路聚合目的

链路聚合(Eth-Trunk链路聚合)-CSDN博客

一言蔽之:把多条物理链路合并成一个逻辑链路。

  • 提高宽带:一个聚合口等于多个成员链路口带宽的总和
  • 提高可靠:当一个物理链路出现问题,可以通过其他的链路到达目的地、
  • 负载平衡:一个聚合口可以把流量分散到其他的成员口上.

链路聚合详解——Link Aggregation - 小王同学! - 博客园

采用链路聚合技术可以在不进行硬件升级的情况下,通过将多个物理接口捆绑为一个逻辑接口,来达到增加链路带宽的目的。

  • 链路聚合一般用在交换机,汇聚层、核心层。

链路聚合模式

  • 手动负载均衡:所有接口参与转发流量,进行负载分担。
  • LACP:部分链路参与转发,非活动链路作为备份链路。

PixPin_2024-12-23_15-35-45

Eth-Trunk(链路聚合)原理与配置_interface eth-trunk-CSDN博客

LACP抢占机制

两端设备会选取主动端,根据以下条件选举:

  • 设备系统优先级(LACP优先级):越小越优先,默认32768
  • 若系统优先级相同,则比较MAC地址:越小越优先

交换机接口会对接口进行排序,根据以下条件选举:

  • 接口优先级:越小越优先
  • 如果接口优先级相同,则比较接口ID(接口号):越小越优先

PixPin_2024-12-23_15-59-33

手动负载均衡配置

华为交换机配置链路聚合(手工模式链路聚合和lacp模式聚合)-CSDN博客

当需要在两个直连设备之间提供一个较大的链路带宽,而其中一端或两端设备都不支持LACP协议时,可以配置手工模式链路聚合。

PixPin_2024-12-23_19-48-34

配置步骤:

  • 创建链路聚合端口
  • 配置手动负载均衡(mode man load-balance)
  • 将相关端口加入链路聚合口(trunkport)
  • 设置trunk模式,放行相关vlan

LSW1与LSW2配置一致

[LSW1]
vlan batch 10 20
interface Eth-Trunk1
 mode man load-balance 
 port link-type trunk
 port trunk allow-pass vlan 10 20
 trunkport g 0/0/1 to 0/0/2
 
interface GigabitEthernet0/0/3
 port link-type access
 port default vlan 10

LACP模式配置

PixPin_2024-12-23_21-24-52

配置步骤:

  • 创建聚合口
    • 配置LACP静态模式(mode)
    • 将相关端口加入聚合口(trunkport)
    • 配置活动接口上限阈值(max)
  • 配置LACP优先级(各接口优先级保持一致,备份链路不用动)
interface Eth-Trunk1
 port link-type trunk
 port trunk allow-pass vlan 10 20
 mode lacp-static
 max active-linknumber2

interface GigabitEthernet0/0/1
 eth-trunk 1
 lacp priority 100

interface GigabitEthernet0/0/2
 eth-trunk 1
 lacp priority 100

interface GigabitEthernet0/0/3
 eth-trunk 1

interface GigabitEthernet0/0/4
 port link-type access
 port default vlan 10

测试

PixPin_2024-12-23_21-24-35

dis interface Eth-Trunk 1查看链路聚合1的详细信息和统计数据.借图 https://blog.csdn.net/2301_76613557/article/details/138841867

PixPin_2024-12-23_21-42-06

三层链路聚合

三层交换机如何实现链路聚合_三层交换机链路聚合-CSDN博客

  • 若接口性质为三层,那将不可以设置链路类型为trunk或access。
  • 用三层交换机做链路聚合不能进行vlan划分
    • 因为三层交换机本身就相当于一个路由器,用于不同网段网络之间的通信
  • 三层交换机要使用三层功能(路由转发+二层交换)必须手动开启 (undo portswitch)
  • 三层交换机的物理接口需要手动去开启与路由器一样(undo shutdown)
  • 因为三层功能是实现不同网段之间通信,所以要实现通信就必须用静态路由协议或者动态路由协议,才能使不同网段之间通信。

PixPin_2024-12-24_01-22-53

配置步骤:

  • 创建聚合端口组
    • 开启三层功能(un portswitch)
    • 配置IP地址(交换机之间的传输)
    • 进入相关接口
      • 开启物理接口(un shutdown)
      • 加入端口组(eth-trunk <编号>)
  • PC终端的接口,开启三层功能
    • 开启物理端口,并配置网关
  • 静态路由(ip route【目标网段IP地址】【子网掩码】【下一跳地址】,比作送信:【目标网段IP地址】【子网掩码】【对端入口地址】)

CloudEngine 12800系列交换机(本章简称CE12800),是华为公司面向数据中心和高端园区推出的新一代高性能核心交换机。这种级别的交换机才能在聚合口配置IP地址。有关配置生效问题:选择命令行配置生效模式(立即生效、两阶段生效) - CloudEngine 12800, 12800E V200R005C10 命令参考 - 华为 需要在系统视图上输入 commit 提交配置才生效。

[CE1]
interface Eth-Trunk1
 undo portswitch
 ip address 10.1.1.1 255.255.255.0

interface GE1/0/0
 undo shutdown
 eth-trunk 1

interface GE1/0/1
 undo shutdown
 eth-trunk 1

interface GE1/0/2
 undo shutdown
 eth-trunk 1

interface GE1/0/3
 undo portswitch
 undo shutdown
 ip address 192.168.2.254 255.255.255.0
 
ip route-static 192.168.2.0 255.255.255.0 10.1.1.2

[CE2]
interface Eth-Trunk1
 undo portswitch
 ip address 10.1.1.2 255.255.255.0

interface GE1/0/0
 undo shutdown
 eth-trunk 1
 
interface GE1/0/1
 undo shutdown
 eth-trunk 1

interface GE1/0/2
 undo shutdown
 eth-trunk 1

interface GE1/0/3
 undo portswitch
 undo shutdown
 ip address 192.168.2.254 255.255.255.0
 
ip route-static 192.168.2.0 255.255.255.0 10.1.1.1

堆叠入门基础

CSDN博客文章解锁:https://mark.cuckooing.cn

实机演示:https://www.bilibili.com/video/BV1W24y1v7Ep

命令查询工具:https://support.huawei.com/enterprise/zh/doc/EDOC1100075306/d13492c7

堆叠简介

什么是堆叠?为什么需要堆叠? - 华为

  1. 支持跨设备的链路聚合功能,也可以实现链路的冗余备份。

  2. 将成员交换机的多条物理链路配置成一个聚合组,提高交换机的上行带宽

  3. 网络中的多台设备组成堆叠,虚拟成单一的逻辑设备,简化组网(对比MSTP+VRRP)

堆叠示意图

PixPin_2024-12-24_13-53-15

堆叠系统中所有的单台交换机都称为成员交换机,按照功能不同,可以分为三种角色:

  • 主交换机(Master)

    • 主交换机负责管理整个堆叠。

    • 堆叠系统中只有一台主交换机。

  • 备交换机(Standby)

    • 备交换机是主交换机的备份交换机。

    • 堆叠系统中只有一台备交换机。

    • 当主交换机故障时,备交换机会接替原主交换机的所有业务。

  • 从交换机(Slave)

    • 从交换机用于业务转发,堆叠系统中可以有多台从交换机。

    • 从交换机数量越多,堆叠系统的转发带宽越大。

    • 当备交换机不可用时,从交换机承担备交换机的角色。

堆叠接线

https://support.huawei.com/hedex/hdx.do?docid=EDOC1100333028&id=ZH-CN_TASK_0177100940

S交换机堆叠最佳实践 - 华为

Info-Finder(在线工具)交换机堆叠助手

要保证本交换机的逻辑堆叠端口1必须连接邻交换机的逻辑堆叠端口2,否则堆叠组建不成功。

PixPin_2024-12-24_14-17-46

堆叠简易配置

https://support.huawei.com/hedex/hdx.do?docid=EDOC1100333028&id=ZH-CN_TASK_0000001754494753

CloudEngine数据中心交换机如何配置堆叠 - 华为

拓扑参考:iStack技术白皮书

PixPin_2024-12-25_10-25-23

配置步骤:

  • 进入堆叠视图

    • 配置堆叠域(stack domain)

    • 修改堆叠ID(stack renumber,重启生效)

    • 将端口改为堆叠模式(port mode)

  • 创建逻辑堆叠口(int stack-port)

    • 通过端口组的形式,将端口加入到该逻辑端口(port member-group)

SwitchBp配置相同(ID编号需更改)

<HUAWEI>system-view
[~HUAWEI]sysname SwitchA
[~HUAWEI]commit
[~SwitchA]stack
[~SwitchA-stack]stack domain 10
[~SwitchA-stack]stack renumber 1
[SwitchA-stack] port mode stack interface 10ge 1/0/1 to 1/0/4
[~SwitchA-stack] commit
[~SwitchA-stack] quit

[~SwitchA] interface stack-port 1/1
[~SwitchA-Stack-Portl/1] port member-group interface 10ge 1/0/1 to 1/0/4
[~SwitchA-Stack-Portl/l] commit

DAD

堆叠建立后,主交换机和备交换机之间定时发送心跳报文来维护主控板发生故障时或者其中一台交换机下电、重启都将导致两台交换机之间失去通信,导致堆叠系统分裂为两台独立的交换机,这种情况称为堆叠脑裂或者堆叠分裂。

双主检测DAD(Dual-Active Detect)是一种检测和处理堆叠分裂的协议,可以实现堆叠分裂的检测、冲突处理和故障恢复,降低堆叠分裂对业务的影响。

堆叠脑裂与DAD解决方案-CSDN博客

检查堆叠系统是否产生堆叠分裂 - 资料中心 1.0 专题排查指导 - 华为计算

CloudEngine 12800 V200R021C00 配置指南-虚拟化 - 华为(DAD配置的几种方式)

<SwitchA> system-view
[~SwitchA]interface eth-trunk 10
[~SwitchA-Eth-Trunk10] trunkport 10ge 1/0/5
[~SwitchA-Eth-Trunk10] trunkport 10ge 2/0/5
[~SwitchA-Eth-Trunkl0] dual-active detect mode relay
[~SwitchA-Eth-Trunkl0]commit

<HUAWEI> system-view
[HUAWEI] sysname SwitchC
[~HUAWEI]commit
[~SwitchC] interface eth-trunk 10
[~SwitchC-Eth-Trunk10] trunkport 10ge 1/0/1
[~SwitchC-Eth-Trunk10] trunkport 10ge 1/0/2
[~SwitchC-Eth-Trunk10] dual-active proxy
[~SwitchC-Eth-Trunk10]commit

PixPin_2024-12-25_10-25-23

ACL结合NAT实现EasyIP

ACL

ACL(访问控制列表)的应用原则:

  • 标准ACL,尽量用在靠近目的点
  • 扩展ACL,尽量用在靠近源的地方 (可以保护带宽和其他资源)
  • 方向:在应用时,一定要注意方向

ACL分类:

  • 基本
    • 2000~2999:可使用IPV4报文的源IP地址、分片标记和时间段信息来定义规则
  • 高级
    • 3000~3999:ICMP类型、TCP源端口/目的端口等来定义规则
  • 二层
    • 4000~4999:可根据源MAC目的MAC地址、以太帧协议类型等。
  • 自定义
    • 5000~5999:其他配置组合

ACL相关示例:华为交换机ACL的配置规则及实例_华为交换机acl配置实例-CSDN博客

Easy ip

ENSP配置cloud ping不通的问题,注意关闭防火墙

PixPin_2025-01-02_11-17-27

PixPin_2025-01-02_11-10-58

acl number 2000  
 rule 1 permit source 192.168.0.0 0.0.0.255 

interface GigabitEthernet0/0/0
 ip address 10.10.10.2 255.255.255.0 
 nat outbound 2000

interface GigabitEthernet0/0/1
 ip address 192.168.0.254 255.255.255.0 

ip route-static 0.0.0.0 0.0.0.0 10.10.10.1

从零开始学wlan

FAT AP + FIT AP

【NetWork】 Wlan基础以及配置-腾讯云开发者社区-腾讯云

无线控制器,或者说路由器(FAT AP)通过二层POE交换机连接多个AP,通过WiFi名称(SSID)传输到终端。

PixPin_2025-01-05_10-59-38

AC+AP组网所需的物理条件

  1. 无线AP---收发无线信号;
  2. 无线控制器(AC)---用来控制管理多个AP;
  3. PoE交换机--能给AP实现网络连接和供电的交换机;
  4. 授权:默认AC管理的AP数量有限,买授权才能管控更多AP。

以及 WLAN组网与转发详解-CSDN博客 组网方式的介绍。

配置示例

wlan配置——瘦AP配置【拓扑简单,代码详细,命令解释】_wlan配置瘦ap-CSDN博客

华为无线实验:利用AC管理AP,并且无线用户能够上网_无线实验ac控制ap-CSDN博客

国家区域也不是必须要设置的:中国范围内不能使用完整的WIFI 6E和WIFI 7,华为推出的WIFI 7路由器有什么用? - 知乎

AC创建AP WLAN组网流程

PixPin_2025-01-06_13-26-38

拓扑及配置

PixPin_2025-01-06_13-34-16

LSW1

vlan batch 10 30

dhcp enable
ip pool ap
gateway-list 192.168.1.254
network 192.168.1.0 mask 255.255.255.0
option 43 sub-option 2 ip-address 1.1.1.1

interface Vlanif10
 ip address 192.168.1.254 255.255.255.0
 dhcp select global

interface Vlanif30
 ip address 1.1.1.2 255.255.255.0
 
interface GigabitEthernet0/0/1
 port link-type trunk
 port trunk allow-pass vlan 10

interface GigabitEthernet0/0/2
 port link-type trunk
 port trunk allow-pass vlan all

LSW2

vlan batch 10

interface GigabitEthernet0/0/1
 port link-type trunk
 port trunk allow-pass vlan 10
 
 interface Ethernet0/0/2
 port link-type access
 port default vlan 10

interface Ethernet0/0/3
 port link-type access
 port default vlan 10

AC1

vlan batch 30
interface Vlanif30
 ip address 1.1.1.1 255.255.255.0

interface GigabitEthernet0/0/1
 port link-type trunk
 port trunk allow-pass vlan all

wlan
 security-profile name securityprofile
  security wpa-wpa2 psk pass-phrase 12345678 aes
 
 ssid-profile name ssid-cfg-1
  ssid wifi-test

vap-profile name vap-cfg-1
  ssid-profile ssid-cfg-1
  security-profile securityprofile
 
ap-group name ap-group1
 vap-profile vap-cfg-1 wlan 1 radio 0
 
ap auth-mode mac-auth
 ap-id 1 ap-mac 00e0-fc07-0840

cap wap source interface vlanif30

网络设备配置

光纤跳纤

输入命令 dis trans diag int XG 0/0/4

如图,范围值正常,小于-10就属于收光弱,大于2.5,收光强也没用,要用光衰,把光降到正常范围。

一般光收发问题,需要联系联通、电信业务弱电施工,进入弱电井进行光纤跳纤。把红光笔怼到光缆这头的光纤头子上,调节按钮为一直发光或者脉冲式发光,光缆另外一头安排个人盯着,看到光纤头子有光了,就通了。

红光笔如图示及相关视频操作

PixPin_2024-10-12_11-46-47.png

实际上施工师傅是从有问题的端口线路插到正常的端口线路就行了。以下视频,我们仅做了解,综合布线方向,需要专精。

监控摄像头掉线恢复

事件经过:公司某楼层的摄像头掉线,需要确定具体是哪个位置的摄像头,尝试不同方法解决掉线问题,给上级答复具体原因,后续提出整改方案报备给甲方。

有了经验后解决问题的过程

根据设备地址表及拓扑图找到物理位置

admin 进入监控 web 界面,查看掉线摄像头编号,通过掉线摄像头及附近的摄像头的编号,再打开施工方留下的监控点位图。

摄像头编号规则:SZ 深圳,XX 公司名,XS 销售,字母及数字;摄像头编号下面为 IP 地址。

确认摄像头IP,做后续进一步排查

再用摄像头登记信息表进行确认掉线具体楼层以及相关的摄像头 IP

插拔网线以及测线

水晶头如果压的不紧,那么在长期的使用/挪动中,就会发生接触不良的情况,而在插拔网线的时候,可能碰巧又把它们给贴合在一起了,因此就可以联网了。测线仪测线发现只有只有4芯 1236 灯亮,需要重新走线,确保8芯全亮。对于百兆PoE交换机:供电标准下网线只要1、2、3、6线芯连通即可,既走数据又供电;当然如果你想1236走数据,4578供电,那么必须要8芯网线,并且保证8芯全部连通。

寻线到具体交换机具体端口

通过网络拓扑图,根据具体楼层对应的监控接入交换机进行寻线查找,进入机房观察设备信息标识卡找到其所属交换机大概位置,用寻线仪扫荡该范围网线,从而确定具体位置。

观察范围内的交换机有多少端口闪烁,有多少端口熄灭,拔插跳线,看问题摄像头是否掉线或在线,将寻线仪探针怼进交换机端口确认信号。

布线

拉一箱网线,将网线放线于墙壁上的横梁上方,两边人手搭上梯子一人放线,一人拉线,沿着墙壁周长呈 L 角放线,线路延伸至穿过隔间,打开隔间相邻的天花板,甩线进入天花板,开始从隔间天花板拉线直至走到机房天花板,从机房天花板上将网线拉下来,解开挡板,将网线放入挡板,穿过地板走线到机柜背面一头,接模块或端口。

总结

POE交换机最好选千兆交换机,不易掉线;POE交换机上的摄像头,每个摄像头都有独立IP。

  1. 一会上一会掉线,大多数是IP地址冲突了,像反复上下线,多数都是他中间网络问题,可能存在网络风暴,或者交换机满载。
  2. 除非设备损坏,或水晶头与接口间松动,它会一直掉线不上线。

以及相关室外因素

  1. 室外的poe设备网口进水故障导致的网口烧了,不通电。
  2. poe传输距离过远,导致的poe供电能力不够。

结合以上,交换机物理端口没有问题,交换机ping摄像头没回包,说明:

  • 网线至摄像头接口接触问题,包括:松动、断开、4芯亮、接触不良。
  • 摄像头有问题,摄像头问题通常是直接坏了。
  • 整条链路中断,从工位到机房无法寻线找出具体端口,无任何信号音,交换机端口无亮灯。
  • 在摄像头画面输出正常,IP地址无误的情况下,但 ping 不通,说明子网掩码及网关配错了,可找相邻IP摄像头对照配置。

没经验尝试解决问题的经过

确认流量走向状态

确定掉线摄像头的 IP 后,可进行流量统计分析,是否长时间掉线未恢复,未回包。

检查交换机端口

查看监控交换机端口错包,通过 dis int g 0/0/x 相应的具体接口,看下 CRC。CRC没有错包则说明,自动协商或设定协商没有问题,以及交换机端口也没问题。

华为 - 交换机接口CRC错包故障的处理

  1. 如果错包计数持续增加,一般是线路侧受到干扰导致的,优先排除线质量问题。
  2. 保证两端接口自协商模式一致,两端均配置成强制模式或者均配置成自协商模式。如果配置了强制模式,速率和双工也要保持一致。
  3. 检查两端接口收发光功率,主要是收光功率和发光功率。如果发光功率和电流有问题,则更换光模块;如果收光功率有问题,则需要检查对端发光和链路衰减,可以按照下面的步骤检查。
  4. 检查光纤长度,光纤的长度在规定的范围之内:对接两端口使用模块波长一致,但是由于传输距离较长超出了规定的范围,也会出现光功率较低的告警。
  5. 检查链路对接质量,重新插拔光纤及光模块,看是否接触不良所致。同时查看一下光纤头是否被损坏或者污染,并进行清洁。
  6. 采用交叉测试定确定故障点,针对本端光模块、光纤链路(包括光纤、跳线架、熔纤点、分光器以及波分传输等中间设备)、对端光模块的问题。

Cisco - 请教关于交换机端口giants、input errors、CRC的问题

基础知识查询及储备

CRC

当始发 LAN 站或远端设备生成的 CRC 与根据接收的数据计算的校验和不匹配时,此 CRC 将递增。常见原因: 这通常表示 LAN 接口或 LAN 本身存在噪音或传输问题。大量 CRC 通常是冲突的结果,但也可能表示物理问题(例如布线、接口或 NIC 损坏)或双工不匹配。

Input errors

常见原因:这包括残帧、巨型帧、无缓冲区、CRC、帧、溢出和忽略计数。其他与输入相关的错误也可能导致输入错误计数增加,并且某些数据报可能有多个错误。

相关参考:华为 - FAQ-CE6850接口出现inerrors错包华为 - s系列交换机接口出现大量错误包导致用户网络访问异常缓慢

检查交换机运转

交换机满载现象

引用 huawei - S系列交换机CPU占用率高

查看交换机CPU

拆装与配置摄像头

电脑可直连摄像头,但需 12v 供电,电压太大易烧坏,双方配置同一网段即可访问,chrome 浏览器需要安装插件才能显示画面。

拆装摄像头视频

设置 IP 视频

接入网线,恢复正常

测试完摄像头正常工作,接入此前网线恢复正常。


有经验和没经验

区别

有经验的判断思路更系统、依赖于设备的具体信息和网络拓扑,能够迅速定位问题源头,进行有效的布线和配置。

而无经验者往往依赖于基础检查,可能缺乏对流量走向和设备状态的深入理解,解决问题的过程相对冗长,思路相对极大受限,想到什么是什么,缺乏方向而处处碰壁,没有自己的知识体系逻辑链条。

总的来说,有经验的人能更快地识别问题并采取针对性措施,而无经验者则可能在基础步骤中徘徊。

突破

在工作中观察其他人的操作,尽量理解他们的思路和方法。分析设备和系统的运作,尝试理解其背后的原理。针对问题,创建一个问题清单,逐个查找解决方案,并汇总。

思路

数据分析

  • 有经验:善于利用数据和监控工具,能够从多个维度分析问题,识别异常流量和状态。
  • 无经验:对数据分析的能力较弱,可能只关注表面现象,缺乏深入分析的技巧。

系统思维

  • 有经验:能从整体架构出发考虑问题,理解各个设备之间的相互关系,能够推测问题可能的根源。
  • 无经验:往往局限于个别设备或组件,难以建立全局视角,导致解决方案片面。

解决方案的制定

  • 有经验:能够迅速提出针对性的解决方案,并评估其可行性,常根据历史经验调整策略。
  • 无经验:可能缺乏针对性的解决方案,常常依赖试错法,效率较低。

总结与反思能力

  • 有经验:习惯于在解决问题后进行总结和反思,持续改进自己的方法和思路。
  • 无经验:可能缺乏这种进一层的反思意识,难以从记录经历中学习,改进思路。

监控网络管理终端损坏自救

在最初规划网络线路的时候,一般都会留有施工点位图,规划网络较好的公司,一般也会让IT运维登记相关的设备地址表,以便后来查询。

第一步: 在已知设备地址表中,找寻有关监控功能的交换机设备,并通过寻线仪定位到故障终端接入的具体接入交换机的端口。

第二步: 查看该端口的网络配置

如图找到了当前的端口定义的具体 vlan

通过 dis cu | in vianif100 这样相关的命令找到其配置的网关

第三步: 通过监控设备相关IP登记表,推测未使用的IP地址,并使用交换机进行 ping 验证,确定该地址是否已使用。

btw

监控设备IP登记表,表头一般遵循这样的规范:

  • 序号
  • 团队或公司
  • 职场(公司所在地址)
  • 摄像头名称(按命名规范命名:公司名缩写-公司所在地址-业务。没有相关业务则需另做说明)
  • 监控设备的IP地址
  • 所属NVR/CVR录像机IP
  • 业务类型
  • 备注(楼层)

Ping 传输失败,域控连不上

现象:网线正常,能连网,但自动获取不到IP,手动修改 IP 也 ping 不通域控,办公室其他相邻工位正常连接域控上网办公。

ping 域控IP失败。ping 失败两个问题:

  • 网络不在同一区域的局域网。
  • 网络在一个局域网,但交换机端口配置存在问题。

解决思路

  1. 将寻线仪两头接入网线,按钮调整到对线,灯全亮,说明网线没问题。
  2. 将网线插入模块,将寻线仪接入到网线另一头。
  3. 查看网络拓扑图,对应楼层是否有接入交换机。
  4. 进入对应楼层机房,查看交换机的标识卡,根据标识卡写的“接入”、“汇聚”、“监控”,“外网”等进行区分。
  5. 定位大概交换机位置,用寻线仪寻线,若是没有信号音则进行以下处理:
    • 记录好信号灯闪烁情况,接着回到位置将网线接入到电脑,回到机房查看是否有端口从之前的灯灭到灯亮,记录好该端口位置。
    • 将网线插入到寻线仪,去机房将记录的灯灭灯亮的端口跳线拔出,用寻线仪探针插入到端口里去,听是否有信号音。
  6. 定位到具体交换机和相应端口后,dis cu 查看该交换机配置,并将对端口进行相应设置。

得出结论

根据拓扑图可得知规划,为早期网络功能划分的遗留问题,如端口号记错输错、端口功能变更未修改配置保存。工位上终端对应的交换机端口配置是 trunk,而不是 access,将配置改为其他端口相同的 access 配置,即可。

网络正常但登录不上 inode

问题:网络网线线序正常、网络也能 ping 通域服务器、华三准入服务器。但始终连接不上 inode。

通过查看其身边同事 inode 接入明细,定位到具体交换机,再通过模块面板贴的标签,定位到具体交换机端口。通过查看其他同事端口配置,找到问题的端口进行配置对比,原来是少了 802.1X 认证配置。由于 inode 是 802.1X 认证。通过配置 dot1x enable ,inode 即可正常登录上了。

HUAWEI - 什么是802.1X?

通常在新建网络、用户集中或者信息安全要求严格的场景中使用802.1X认证。802.1X认证具有以下优点: 对接入设备的性能要求不高。802.1X协议为二层协议,不需要到达三层,可以有效降低建网成本。 在未授权状态下,不允许与客户端交互业务报文,因此保证了业务安全。 以企业网络为例。员工终端一般需要接入办公网络,安全要求较高,此时推荐使用802.1X认证。

但802.1X认证要求客户端必须安装802.1X客户端软件。在机场、商业中心等公共场所,用户流动性大,终端类型复杂,且安全要求不高,可以使用Portal认证。对于打印机、传真机等哑终端,可以使用MAC认证,以应对哑终端不支持安装802.1X客户端软件,或者不支持输入用户名和密码的情况。

如下图所示,802.1X认证系统为典型的Client/Server结构,包括三个组件:客户端、接入设备和认证服务器。

802.1X系统中的组件

  • 客户端通常是用户终端设备。客户端必须支持局域网上的可扩展认证协议(Extensible Authentication Protocol over LANs,EAPoL),并且安装802.1X客户端软件,从而使用户能够通过启动客户端软件发起802.1X认证。
  • 接入设备通常是支持802.1X协议的网络设备,例如交换机。它为客户端提供接入局域网的端口,该端口可以是物理端口,也可以是逻辑端口。
  • 认证服务器用于实现对用户进行认证、授权和计费,通常为RADIUS服务器。

HUAWEI - 什么是RADIUS?

RADIUS(Remote Authentication Dial In User Service,远程用户拨号认证)协议是一种分布式的、客户端/服务器结构的信息交互协议,能保护网络不受未授权访问的干扰,常应用在既要求较高安全性、又允许远程用户访问的各种网络环境中。RADIUS协议为标准协议,基本所有主流设备均支持,在实际网络中应用最多。RADIUS使用UDP(User Datagram Protocol,用户数据报协议)作为传输协议,具有良好的实时性;同时也支持重传机制和备用服务器机制,具有较好的可靠性;实现较为简单,适用于大用户量时服务器端的多线程结构。

IP地址上不了网

mac地址解除绑定后,配置了IP却上不了网

问题背景

我在交换两台电脑时,只对其中一台电脑的端口解绑了,而另一台电脑的端口没有解绑。这导致了网络访问问题。

解决方法

一般mac地址有5分钟的老化时间(sticky除外,它会一直保存),un shutdown 可以让端口学习新mac地址。

正确的操作步骤:先巡线定位两个互相换主机的接入交换机端口,然后进入两个端口进行mac地址解绑

  1. dis mac-address sticky | in 00e0-4b30-3672 查询这个mac是否和其他接口做了绑定
  2. undo port-security enable 关闭端口安全取消绑定
  3. undo port-security mac-address sticky

解决问题过久优化

解决问题过久的原因

在解决问题的过程中,出现了一个关键的误区:虽然解绑了一个端口,但误以为已经完成了全部解绑操作。这种片面的认知导致问题的解决思路被局限在了“清理MAC表并重新学习MAC地址”上。于是,反复清理同一个端口的MAC地址,却始终无法解决问题。这种“为什么我清除了MAC地址,还是上不了网”的困惑逐渐形成了一种思维定式,使得问题解决的思路陷入了死循环。理论与实际之间出现了偏差,让人摸不着头绪,难以找到问题的真正根源。

解决问题过久的优化措施

可以从以下几个方面入手,提升问题解决的效率和准确性,减少因思维定式或信息遗漏导致的困境:

全面检查和确认问题范围

在处理问题时,首先要全面检查和确认问题的范围,避免片面或遗漏关键信息。例如:

  1. 检查所有相关设备和配置:在交换电脑时,不仅要检查已知的端口,还要确认所有相关端口的配置是否一致。
  2. 验证所有可能的绑定关系:在解绑操作后,使用命令(如dis mac-address sticky)确认是否还有其他绑定关系未解除。

保持开放的思维方式

避免陷入单一的解决思路,尤其是在问题没有得到解决时:

  1. 多角度思考问题:当一种方法无法解决问题时,不要反复尝试同一种方法,而是尝试从其他角度分析问题。
  2. 避免思维定式:不要因为“理论上应该这样”而忽视实际情况。理论和实际之间可能存在差异,需要灵活调整思路。
  3. 逐步验证每个操作,在解决问题时,每一步操作都要进行验证,确保操作的效果符合预期:
  4. 分步操作:不要一次性进行过多操作,而是将问题解决过程分解为多个小步骤,每一步都进行验证。
  5. 记录操作和结果:详细记录每一步操作及其结果,便于在出现问题时回溯和分析。

借助工具和命令进行验证

在处理网络问题时,充分利用设备提供的工具和命令来验证问题:

  1. 使用命令行工具:例如dis mac-address sticky、dis port-security等命令,确认端口安全和MAC地址绑定的状态。
  2. 查看日志和告警:设备的日志和告警信息可能包含问题的线索,不要忽视这些信息。

多人协作和交流

  1. 在遇到复杂问题时,不要独自处理,可以寻求同事或团队的帮助:
  2. 与他人交流:将问题描述清楚,听取他人的意见和建议,可能会发现新的解决思路。
  3. 团队协作:不同的人可能有不同的经验和视角,团队协作可以更快地找到问题的根源。

总结经验教训

每次解决问题后,都要总结经验教训,避免类似问题再次发生:

  1. 记录问题和解决方法:将问题的背景、解决过程和最终的解决方法记录下来,形成知识库。
  2. 定期回顾和学习:定期回顾这些经验教训,不断总结和提升自己的问题解决能力。

网线电缆被拔出,恢复后获取不到IP地址

问题背景

1-8人的办公室,多台主机网络不稳定,网卡重启后,长时间显示“网络电缆被拔出”,等待许久才恢复。其中有一台主机两个小时后才获取到IP地址,跟环路了一样,其中一台主机网络很卡,不能正常上网。

  1. 使用寻线仪发现多个工位的网络线路8芯并非全通,CRC有错包增长。
  2. 更换跳线后,好过一段时间,马上又会多台主机问题又会复现。
  3. ping 失败,常见故障。
  4. 疑是IP冲突,但办公室的每台主机IP都不相同。

解决过程

一、 display trapbuffer 查看告警发现有ip地址冲突的记录 二、 display mac-address | in 3cc7-869f-9985 查看mac地址表,发现是从ge0/0/25学到的mac,然后dis lldp neighbor brief 查看设备邻居关系

 ARP detects IP conflict. (IP address=192.168.182.254, Local interface=Vlanif183//冲突的vlan, 
Local MAC=3cc7-8625-c644, Local vlan=0, Local CE vlan=0, Receive interface=GigabitEthernet0/0/25,
 Receive MAC=3cc7-869f-9985, Receive vlan=183, Receive CE vlan=0, IP conflict type=Local IP conflict).
P conflict //IP冲突
IP address=192.168.182.254//冲突的IP地址
Local interface=Vlanif183//冲突的vlan, 
Local MAC=3cc7-8625-c644//交换机本地mac地址
Receive interface=GigabitEthernet0/0/25 //接收端口
Receive MAC=3cc7-869f-9985//接收到的远端mac地址

三、dis lldp neighbor interface GigabitEthernet 0/0/25 查看25口的邻居关系

<21lou_waiwang_hexin>dis ll neighbor interface GigabitEthernet 0/0/25
GigabitEthernet0/0/25 has 1 neighbor(s):

Neighbor index :1
Chassis type   :MAC address 
Chassis ID     :3cc7-869f-9985 
Port ID type   :Interface name 
Port ID        :GigabitEthernet0/0/49
Port description    :to 21lou-bangong
System name         :20-waiwang-jieru
System description  :FutureMatrix Switch S5735-L48T4S-A1
FutureMatrix Versatile Routing Platform Software
VRP (R) software, Version 5.170 (S5735-L48T4S-A1 V200R021C00SPC100)
System capabilities supported   :bridge router 
System capabilities enabled     :bridge router 
Management address type  :ipv4
Management address value :192.168.180.249
OID  :0.6.16.43.6.1.4.1.56813.5.25.41.1.2.1.1.1.  
Expired time   :117s

Device 0 infomation:
  Device serial number :4E21B0101565
  Device model name    :S5735-L48T4S-A1

Port VLAN ID(PVID)  :1

找到,Management address value :192.168.180.249,stelnet 192.168.180.249 进行连接。删除冲突的vlan配置。

为什么想到IP冲突问题?

  1. 基于经验的直觉:在处理网络问题时,IP冲突是一个常见的故障点,尤其是在多设备的网络环境中。他的经验告诉他,这种现象很可能是IP冲突导致的。
  2. 告警信息的直接提示:告警信息中明确显示了IP冲突的记录,这为他的怀疑提供了直接的证据。
  3. 排除其他可能性:在更换跳线后问题复现的情况下,他意识到问题可能不仅仅是物理连接故障,而是网络层的配置问题。IP冲突是一个合理的怀疑方向。

网络故障排除思路

为什么网络故障排查思路是:确定单个还是批量,确定此前电脑是否正常,回想变更,排查变更点?

这个网络故障排查思路是基于逻辑推理和高效定位问题的原则,按照从范围缩小到具体分析的顺序进行。具体来说:

一、确定单个还是批量

这是排查的第一步,能快速缩小问题范围:

  • 单个设备故障:说明可能是该设备的网络配置、网线、网卡、驱动、权限等问题。
  • 批量设备故障:说明问题可能在网络设备(交换机、路由器、DHCP 服务器等)或某个共享资源(如 DNS、网关、策略配置)上。

通过这个判断,可以避免在无关的地方浪费时间。

确定此前电脑是否正常,这有助于区分是新问题还是长期问题:

  • 如果此前正常,说明问题是近期发生的,可能和环境变化有关(如配置变更、软件更新、设备损坏等)。
  • 如果一直不正常,可能是初始配置错误、网络策略不允许访问、或者该设备本身有问题。

回想变更

任何网络环境的变更都有可能导致问题,比如:

  • 网络设备(如路由器、交换机)更换或升级。
  • 服务器的 IP、DNS 配置变更。
  • 用户权限调整或策略变更(如 VLAN、ACL、组策略)。
  • 如果能回忆到近期的变更,往往可以更快找到问题源头。

排查变更点

变更点是最有可能导致故障的地方,所以需要重点检查:

  • 是否回滚变更后恢复正常?
  • 是否有日志、告警提示变更相关的错误?
  • 是否只有受影响的设备符合变更范围?

这个思路的核心逻辑:

缩小范围 → 确定新旧状态 → 查找变更点 → 验证变更影响

避免盲目测试和大范围修改,提高排查效率。这种方法广泛应用于运维、网络管理、服务器管理等领域,是高效排障的基础思维方式。

最后寄语

推荐视频

去一些学习网站找“韩立刚老师门徒级课程专题(WS+网络安全+数据库)”,之类的关键字视频课程。