我怎么知道我一个RD为什么要来研究这个,可能是因为身边的同学们都想把我当全栈培养吧……🤦‍♂️

背景

某台Nginx反代服务器(假定IP为10.10.1.2)在公司的某个新办公区网段(假定为172.16.0.0/16)怎么也访问不到,主机本身iptables没有限制,从该主机(10.10.1.2)ping不到172.16段的网关,traceroute时会跳到外网。经排查,172.16段到10.10.1.2的内网网关(假定为10.10.1.1)是通的,最终锁定到问题是因为10.10.1.2是双网卡的服务器,默认走的是外网网卡(假定为bind1,内网网卡是bind0)的网关(假定外网网关为123.123.123.1),到172.16.0.0/12段没有配置相应路由,所有需要在主机上单独配下。

查看路由表

修改路由之前还是先来看下当前我们的路由表是什么样子的吧

其中,第一列Destination是目的地址或目的网络;
第二列Gateway是网关地址,如果没有设置,这里是“*”;
第三列Genmask是目的网路的掩码,如果目的地址是主机时这里是“255.255.255.255”,默认路由这里是“0.0.0.0”;
第四列Flags路由标志:“U”表示该路由是启用状态,“G”表示使用网关……
第八列Iface是这条路由的数据包将发给的网卡。

所以这里可以看到默认是指到了外网网关123.123.123.1上,到10及192.168段的也有单独配指到内网网关10.10.1.1的路由,但是到172.16.0.0/12段的没有单独的路由,所以当traceroute 172.16.0.0/12段IP时会从外网网关进外网也就可以理解了。

添加路由

那么现在我们把去172.16.0.0/12段的下一跳指到内网的网关(10.10.1.1)上应该就可以了。

其中,“-net 172.16.0.0 netmask 255.240.0.0”表示目的网段;
“gw 10.10.1.1”指定了将使用10.10.1.1这个网关;
“dev bond0”指定了bond0这个网卡。

配完以后再检查一下路由表,已经有了刚才的配置,traceroute 172.16段的网关下一跳也到了内网网关,网路也通了。

删除路由

一个小插曲,刚才在添加路由时手滑把172.16.0.0/12的掩码写成了255.255.240.0所以导致加出了一跳错误的配置,这时可以通过route del 来删除路由:

最后

好了,问题解决了,其他上面没涉及细节以后遇到再来补吧~

最后再次感谢身边同学们对我的栽培……🤦‍♂️

 

点击数:289

发表评论

邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据