运维工作主打一个兵来将挡水来土掩
以前的网络架构非常简单粗暴
Internet -> Server
没错,就是互联网专线直连服务器
当时在这台机器上部署了一套业务系统
按照厂商当时的说法,这系统是"直接绑定了公网IP"的,但我一直感觉不太像他们说的那么简单
后来网络架构进行了升级改造,变成了下面这样
Internet -> FW -> Server
架构变动后,服务器网卡上配置的IP自然就换成了内网IP
其实分析下来,这台服务器现在承载了两方面的流量
第一部分是外网到系统,外部流量打到防火墙,被DNAT转换成内网IP后进入服务器,这部分正常
第二部分是系统组件内部通信,问题就出在这里
这套系统的配置文件写死了,且不允许修改,内部组件之间通信时,依然会去请求原来的公网IP
在现有的架构下,内部发往公网的请求经过网络栈后,Dst IP会被DNAT成内网IP
但系统里的某个子进程是个"死脑筋",它的应用层逻辑强制要求内部通信时收到的Dst IP必须是原来的公网IP,否则直接宕机
既然非要这个公网IP,那就在本地骗一下
直接在服务器内核里挂载一个虚拟网卡(dummy),然后把原来的公网IP分配给它
这样一来,系统内部向该公网IP发起的请求,直接在本地就被这块虚拟网卡接管了,Dst IP完美保持为公网IP,宕机的问题迎刃而解
1 | modprobe dummy |
你就说是不是这个IP吧
EOF