虚拟IP的应用

运维工作主打一个兵来将挡水来土掩

以前的网络架构非常简单粗暴

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
2
3
4
modprobe dummy
ip link add dummy0 type dummy
ip addr add $IP/32 dev dummy0
ip link set dummy0 up

你就说是不是这个IP吧

EOF