本帖最后由 wxy 于 2022-2-11 09:33 编辑
实施记录 前言 本次替换涉及4台F5,都是以主备部署。通过4台AD进行替换。其中内网F5给内网提供虚拟服务,外网F5为外网提供虚拟服务以及负载均衡功能。两边没有任何关联。其中外网涉及到300+的dns映射规则以及350+虚拟服务。iRules有30+条件判断。 一、 F5配置的转换 获取F5相关配置,通过tftp进入F5后台。下载Config目录下的bigip.conf(从其中获取虚拟服务、节点池、iRules等相关信息)文件以及bigip_gtm.conf(从其中获取dns的相关信息) 利用转换工具的话,通过页面下载ucs文件按照文档进行转换即可。这边会转换虚拟服务和相关地址池。以及一些自定义的监视器。如果F5虚拟服务中使用的是默认监视器,那没办法进行转换。其中会出现转换失败的虚拟服务,因为该虚拟服务没有默认的节点池(我这边客户遇到的情况),此时需要查看该虚拟服务是否关联iRules进行节点池调度。这边节点池基本都是可以导入成功的。 二、 对于F5配置的数据梳理以及相关工具的使用 使用到的工具: Notepad++,Excel 通过notepad++,打开bigip.conf的配置文件。file:///C:/Users/**I~1/AppData/Local/Temp/msohtmlclip1/01/clip_image002.png 找到前缀为Itm virtual的标签的地方,对Itm virtual /Common 进行搜索标记,然后复制标记行。粘贴到Excel,通过Excel将数据进行分列处理。此时,可以拿到F5设备中所有的虚拟服务。 file:///C:/Users/**I~1/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg 前缀为Itm rule标签的地方为iRules;前缀为Itm pool为地址池;Itm monitor为监视器;ltm persistence为会话保持。 可以用相同的方式获取到该信息。标签内的内容,通过共同点也可以将内容取出。 对于条数较多的简单的iRules可以通过iPro进行替换(因为一个虚拟服务会调度到不同20多个节点池,个人比较懒就直接用ipro进行替换了) 根据host指调度到不同的节点.lua vhost2pool= { ["yezhang.nju.edu.cn"] ="219.219.122.23_80" , ["qoqi.nju.edu.cn"] = "219.219.122.23_80" , ["sgforum.nju.edu.cn"] = "219.219.122.23_80" } -- 将host值与节点池的对应关系以键值对的形式放入到数组当中。 -- 域名与单个服务器IP的对应表, 格式为["HOST域名"] = {"服务器IP","服务器端口"}, vhost2server = { ["yezhang.nju.edu.cn"] ={"219.219.122.23","80"}, }这边在该项目中并没有用到所以我就直接删除掉的。
-- 调试日志开关和 SYSLOG,记录相关日志。 localdebug = true localfunction log(msg) if debug then LOG.log(LOG.DEBUG, msg) end syslog.syslog("LOG_INFO",msg) end -- 发生request事件触发事件 eventHTTP_REQUEST { local rqst_uri = HTTP.uri() -- 获取请求的uri local rqst_hdr =HTTP.header("Host") --获取请求头中的host值
-- lua中数组的下标是从1开始的;这边进行非法判断 if table.getn(rqst_hdr) ~= 1 or rqst_uri ==nil then HTTP.close() return end --获取头部的值 rqst_hdr = rqst_hdr[1]
local pool_name = vhost2pool[rqst_hdr] --local server = vhost2server[rqst_hdr] --该项目没有使用进行了删除操作。 --由于该项目由跳转,这边先进行了一次跳转的判断,host匹配到后进行跳转。 if rqst_hdr == “” then HTTP.redirect(url) end if pool_name then log("[" .. HTTP.method() .. "] [" ..rqst_hdr.. HTTP.uri() .. "] [" .. pool_name .. "]" ) pool(pool_name)
--[elseif server then log("[" .. HTTP.method() .. "] [" .. rqst_hdr .. HTTP.uri() .. "] [" .. server[1] ..":" .. tostring(server[2]) .."]" ) node(server[1],server[2])该项目中没有使用进行了删除操作 --] else log("[" .. HTTP.method() .. "] [" .. rqst_hdr ..HTTP.uri() .. "] [defaultpool]" ) --可选参数,这边我直接在这里调用了默认的节点池或者直接关闭连接 pool() HTTP.close() end }
这边虚拟服务相关的大体替换就已经完成了。对于网络相关的信息,直接手动替换即可。 三、智能DNS配置 对于F5用作域名负载配置,需要手动将信息梳理出来,根据后台脚本进行配置(因为客户处300多条dns映射,表示个人很懒,手动配置需要很久,另辟蹊径,通过查看虚拟服务转换的文档发现,是可以通过后台的命令去配置的)。 四、梳理截图以及脚本截图 通过excel进行梳理 根据节点池调度的iPro脚本(从400获取的模板,自己改动的) 根据命令行手册编写的dns映射的脚本 将该脚本传入后台后 chmod +x 文件名 ---给文件增加可执行权限 sfcli -f 文件名 ---运行该文件 或者使用AD的命令行模式,将脚本复制获取即可
参考文档: 《Sangfor iPro.chm》--- 可以从AD控制台下载 《深信服AD命令行手册v7.0.8R1.pdf》---可以找400获取 |