很久没发博客,今天我们谈下关于opep***的一些应用。

    公司用open***做所有流量的入口,简单点说就是让open***做一个堡垒机的作用,将所有后端应用都放在open***堡垒机之后,以规范运维记录。

    open***的搭建太简单了,这里就不重复造轮子了。直接贴https://blog.51cto.com/yasar/1891191, 不会的自己可以上去看下。

    刚到公司的时候,发现公司之前的pptp ***非常不稳定,经常掉线,简直垃圾,索性换成open***,因为还是比较熟悉的。想实现通过open***连接后端RDS数据库,具体的就是我在阿里云上找一台服务器,去连接后端RDS,RDS的白名单只添加该open***堡垒机的IP(我添加了该堡垒机的公网IP和私网IP以及tun网卡的IP地址段),因为当时并不知道open***客户端连接上服务器之后,到底是服务器的哪个网段去连接后端数据库。这里其实可以直接使用命令tcpdump抓个包看下,到底包是怎么走的。开两个终端,第一个终端敲:tcpdump -nn -s0 -c 20 tcp and dst port 3306 and dst host 101.x.x.x。第二个终端敲:mysql -u 用户名 -p -h 外网地址/内网地址。会发现是走的默认网关,即那个172的网段,我的路由表如下图:

RDS的ip地址是101.x.x.x。有点网络知识的都知道是走默认路由,但是我只是为了确认下。

     好了,结束前期的搭建工作。开始用windows客户端连接,我的客户端文件,大致是下面这样

        

后来,我去连上open***以后,发现还是不能访问RDS,而且提示不在白名单。我在windows中使用traceroute RDS的外网域名,发现流量走的并不是×××,这就很尴尬了。现在把问题定位到怎么将访问RDS的流量全部转发到10.8.0.1(是open***服务器的tun网卡IP)这个open***的虚拟网关上,再由虚拟网关转发流量到RDS,这样就能访问了吧。于是乎我开始在windows中加路由,发现都不好使。什么route add -net xxxx什么的,发现访问RDS的时候还是无法转发到10.8.0.1。好吧,再试试在配置文件中加入route 101.132.15.0  255.255.255.0 ***_gateway,指定去往101.132.15.0这个网段的流量全部走×××,与之相反的参数是net_gateway,举例route 101.132.15.0  255.255.255.0 net_gateway去往101网段的不走×××(这样做是为了加快访问速度哦,什么都走×××,服务器流量也不够用啊)。

好吧,就这么稳定的运行个把月,直到今天,因为昨晚更新了个漏洞,发现open***又不好使了,直接连不上后端数据库,这就要折腾了。看了下错误日志,发现都是这种,没发现任何异常,如下图:

好吧,我连上open***后在客户端机器上ping RDS的地址发现无法ping通,那是不是ping不通网关了,我再试试发现是可以ping通10.8.0.1的,好的,看了下网卡,没啥异常啊。有个猜想是不是虚拟网卡没有把数据流量转给内网卡。看了下sysctl.conf的"net.ipv4.forward =1",也没什么问题。因为RDS 位于open***堡垒机之后,既然客户端可以ping通open服务器端,而且看日志,下发路由都正常,就是ping不通RDS,所以可以断定可能是白名单或者防火墙设置有误。虚拟网卡流量没有转发给其他网卡。so,我们来看下防火墙

发现forward链果然有一条限制规则,这条规则的意思是禁止所有网卡之间转发。也不知道是谁加上的,好吧,我把它删除可以收工了。