前言
本人参与的公司开发项目为采用Go-micro微服务框架所搭建的物流/车库管理系统(简称:MPS,后续所提及简称时均指该系统)。采用Docker容器进行末端部署,并使用docker-compose工具定义编排多个容器的创建及运行,最终的承载系统选择了CentOS Linux(因REHL对CentOS发布即将改变为滚动发布模式,不宜于稳定的服务器设备使用,故后续计划将从CentOS linux转至Rocky Linux)。
因平时习惯对发现的问题做一些记录,所以想着不如写博客上来吧,主要原因是自己的主力使用系统为Ubuntu,平常都在用有道做笔记,在Ubuntu中就只能用网页版编写,反正都是在网页编写,那不如直接写博客上了,这样说不定有遇到和我相同问题的朋友,也许还能提供一些帮助。
一、环境背景情况简介
因所在公司团队规模较小,作为开发人员也需要偶尔支援现场项目实施,并根据不同项目情况需要编写实际满足客户需求的业务逻辑实现脚本(此部分业务逻辑的实现方式采用了Lua内嵌Go系统的方式实现)。这次的问题就来源于本人前往支援的项目。
和以往不同的是,通常MPS不需要与外部网络相连接,只需与内网各硬件设备及下位机器人调度系统通讯即可。但此次项目方需要对进出车辆管理缴费,故需要MPS能够保证与内网正常通讯的同时也要能够与外网通讯。
二、解决方案
在每个项目中,为了保证后续维护便利,宿主机都会配备双网卡,保证可供远程桌面及传输文件。因本身宿主机具备双网卡,故决定采用的方式为在VMware虚拟机硬件配置中也追加一张虚拟网卡,使两张网卡分别作为内网通讯通道及外网通讯通道。
并将需要与内网通讯的虚拟网卡桥接至宿主机的内网网卡,另一张需要与外部通讯的网卡则采用NAT模式。
接下来就需要完成CentOS对应网卡的配置了,网上有很多教学,这里就不再赘述,当然NAT模式对应虚拟网卡采用了动态获取IP的配置,而与内网的链接则根据现场内网部署的需求采用了静态IP地址的配置。
一般到这里基本就对于MPS需要内网外网兼顾的问题就能解决了,但CentOS依旧不能访问外网,当却能与可访问外网的其它同网段设备互相通讯。
三、Linux路由配置
经查看,这是当添加双网卡配置后的路由配置
50网段为内网网卡eth0,可见其优先级高于外网网卡eth1,而linux中只读默认路由中优先级最高的。这导致与外网还是不能够正常的进行通讯。
解决办法则是将eth1对应的默认路由设置为更高的优先级,使系统能够选择此默认路由,在对应的网卡配置里增加了优先级。
到这里,虚拟机能够正常访问外网及其内网设备了。
但好巧不巧,因MPS系统中存在一个微服务是需要与现场某个硬件设备通讯的,而该硬件产商要求linux环境下只能与默认eth0的网卡进行通讯,所以导致该服务不能正常和现场设备互相通讯,当准备尝试更改网卡名称配置尝试时,发现了另一种方式来配置虚拟机双网卡环境,相对目前解决方案简单太多,随即开始尝试。
四、 宿主机Windos网络连接共享
打开对应宿主机的外网网卡配置,打开网络共享
内网网卡配置内网所需静态IP地址,并不添加默认网关,设置完成后,内网网卡将会出现网络共享后的137网段的地址,参考网卡信息如下(本地连接3为外网网卡)
此时,虚拟机内部也只需要一张虚拟网卡桥接至宿主机内网网卡即可实现CentOS Linux的内外网通讯
五、 总结
在尝试过双网卡,网络共享之后,若想实现虚拟机linux访问同时能够访问内外网的需求,建议采用宿主机共享网络的方式进行,双网卡需要配置及涉及修改内容较多,容易把自己绕进去,若对网络没有兴趣则不建议尝试双网卡方式。