我的情况是,我的公司生产一种产品,该产品(目前)要求用户在专用于我们产品的托管交换机上设置十几个 VLAN。
目前,其工作方式如下:用户将系统配置首选项输入到我们提供的专有(基于 Qt)GUI 中,完成后,GUI 会输出“VLAN 配置报告”,指出需要设置哪些 VLAN,以及哪些以太网端口应属于哪些 VLAN。然后,用户负责使用交换机的 Web 界面将这些设置手动输入到交换机中。
这种“有点”有效,但要求用户输入所有数据既繁琐又容易出错,所以我们想以某种方式自动化这个过程:也就是说,让我们的程序直接连接到管理型交换机并告诉交换机要设置哪些 VLAN 以及为它们分配哪些端口。
最好的方法是什么?可以使用简单网络管理协议?如果是,我应该从哪里开始实现这样的功能?(我对基本的 TCP/IP 编程相当有经验,但我不知道从哪里开始使用 SNMP。)
答案1
答案2
编辑:我回到这个问题是为了纠正一个糟糕的情况。对于未来的读者来说,一个系统的想法需求12 个 VLAN 是高度很可能是某些严重错误的征兆。此外,自动配置客户端网络设备以创建这些 VLAN 的想法更有可能是错误的。
感谢 Tom O'Connor 的侦查技巧,我们发现问题作者正在处理的产品可能比大多数人有更好的理由这样做。我强调形势的不确定性,因为无论情况如何,我认为总体概念仍然存在严重的根本缺陷。我愿意犯错。
我再次给未来的读者留下一条提示:如果你想这样做,就假设你正在做错事。向其他人寻求建议。可验证地比您更了解网络管理主题和您的场景。只有当您和其他几位专业人员(最好是那些在情感上或与项目没有直接职业关系的人员)都同意这是最好的做法时,才可以以编程方式创建十几个 VLAN。
话虽如此,我最初的回答针对的是帖子的作者,不应该那么不正式。对于我所造成的骚扰,我向 Jeremy Friesner 和整个 ServerFault 社区直接道歉,我承认自己的错误。这并没有给社区带来好的影响。
这篇文章的剩余部分就保留其卑微之处了。
我的情况是,我的公司生产一种产品,(目前)要求用户在管理型交换机上设置十几个 VLAN,然后才能使用该产品。
除了我刚刚有点吐了之外……
我的问题是,做到这一点的最佳方法是什么?
我认为您已经尽了最大的努力。您需要编写某种脚本,以便通过它们自己喜欢的方法与最常见的网络设备通信。例如:以某种方式编写一个脚本,通过 SSH 或串行电缆与 Cisco 设备通信并配置 VLAN,同时注意客户自己的配置和 VLAN 编号等。该脚本将是非常复杂的脚本,即便如此,可能仍需要向导驱动以确保选择了正确的选项。这意味着要考虑大量时间、大量精力和大量特殊情况。在我看来,您已经尽力为客户提供了配置方案。如何实施则由他们自己决定。
如果您的产品需要十几个 VLAN(疯狂!斯巴达!),那么您的客户就不必亲自动手完成所有工作。事实上,我认为他们会想以确保 VLAN 适合其自己的系统而不是通过脚本来定制。
答案3
现在我已经克服了最初的愤怒和困惑,想到你实际上要花钱购买的东西会创建“数十个 VLAN”,并且想要自动破坏我的交换机配置……
更为谨慎的做法是,根据客户提交的价值观和产品要求生成一些文档或网络图。这样,客户就可以评估需要进行哪些实际更改,并据此制定计划。
在生产环境中随意创建 VLAN 是一件非常糟糕的事情,因为第三方对环境没有深入的了解,因此很难实现自动化。
即使您的代码是万无一失的(并且有无数的版本、供应商和选项,我认为这是一项不可能完成的任务),如果用户缺乏经验或者低估了变化对网络的影响,您可能会无意中完全破坏某人的网络。
答案4
假设您正在使用 Cisco Catalyst 交换机(坦率地说,您应该使用)。那么我能想到两个选项。
1)使用 Net::Telnet::Cisco 告诉交换机将配置转储到 tftp 服务器,从那里获取它,用某些东西解析它(奥杰阿斯突然想到了这一点),然后使用 tftp 喷回一份新的副本。
2)这个文件似乎可以满足您的要求。“使用 SNMP 向 Cisco Catalyst 交换机添加 VLAN”
我不是说这是个好主意,但它确实当然可能的
如果我被要求使用基于 Web 的交换机做类似的事情,你可能会发现我Fiddler2查看 HTTP 请求,然后使用 Python 的 httplib 做一些肮脏的事情。