故事发生在很久以前,家里有老人的回家问问,可能有知道的,话说盘古开天时期,您可别问,没有赶上的!
好了 ,言归正传。事情是这样的,一个项目让我做下nginx代理,多大点儿事儿。先去喝了杯水,然后找同事聊儿天。看看表,还有不到半个小时下班了。开始做nginx代理相关事情。首先做域名解析,然后nginx配置,一切很顺利。在还有十分钟的时候完事儿,ping了下域名,ok!打开浏览器访问下域名,不通。。。有点不妙。到nginx服务器curl后端服务,还好也是不通。可能后端服务没有开启。不管他了,反馈了nginx配置完成,可以解析。收拾东西关电脑,准备闪人。。。
写到这样您要是认为这样就结束了,那就是打错特错了。反馈nginx配置完成后,研发和我说后端服务已经起来了。我打开电脑,用浏览器打开后端服务,可以的。五雷轰顶,没有天理,为这么点破事儿要加班么。再次登录到nginx服务器,telnet后端服务器端口,依旧不通。ping后端服务器的ip,也是不通。显然是网络问题。看了想两边的ip,nginx 172 网段,后端服务10网段。一种被玩耍的感觉。看下时间,刚下班,感觉给网络同事打电话,我加班都别想走。
故事先讲到这里,开始说正题。从安全角度考虑,我们的服务器分为两部分。10网段主要是数据库和中间件服务,这个网络完全的和外网隔离;172网段属于应用网段,通过跳转可以访问外部网络。但实际上两个网段是可以互通的,由于nginx服务器完全暴露在外网,所以将nginx逻辑上与10网段隔离。(之前两个网段逻辑隔离,在使用过程中各种开放端口和跳转,搞的都烦了,然后就这样了)。现在由于应用网段服务器有点紧,把应用部署到数据网段了。我们把眼神飘向了网络。网络看了我一眼,把nginx服务器放开不可能,即使领导同意,那也的走流程,估计下周,下个月,保不齐就明年了。那就更内网服务的ip好了。网络这边也不可行,改ip网线换交换机,进入机房也需要审批。估计要两三天的时间。我们开了一眼项目经理,他恶狠狠的瞪了我们,好吧。。。研发拿出了手机,开始订餐。。。
这问题难道无解了么,关键时刻还的靠我们运维。
故事讲完了 ,开始说技术。我们现在需要一台服务器充当路由的部分功能,将10网段端口转发到172这边来,使得nginx服务器可以访问到。
大概就这样的一个流程。我们的系统是centos 7 我们使用firewalld进行转发
#首先开启转发。在/etc/sysctl.conf添加一行
net.ipv4.ip_forward = 1
#生效配置
sysctl -p
#端口转发
firewall-cmd --add-forward-port=port=8081:proto=tcp:toaddr=10.120.20.196:toport=8081 --permanent
#开启伪装IP
firewall-cmd --add-masquerade --permanent
#添加开放端口
firewall-cmd --zone=public --add-port=8081/tcp --permanent
#重启firewall使生效
firewall-cmd --reload
#查看端口转发
firewall-cmd --list-forward
port=8081:proto=tcp:toport=8081:toaddr=10.120.20.196
#查看开放端口
firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens160
sources:
services: ssh dhcpv6-client
ports: 8081/tcp
protocols:
masquerade: yes
forward-ports:port=8081:proto=tcp:toport=8081:toaddr=10.120.20.196
source-ports:
icmp-blocks:
rich rules:
其实操作很简单,但是可以解决实际问题。需要注意点 netstat 看不到相关端口。由于这个问题折腾了快半个小时。不到一个小时解决问题,同情的看了一眼正在等餐的研发同事,果断的回家了。不相信哥们的能力,活该加班。。。