前言
由于工作与云计算相关,因此实验环境下需要隔离各种子网段,并且实验机器需要不断切换不同网段来进入不同实验环境,这里我们使用了pptp的方式进入不同的实验网段。
现象
版本(抛开版本就是耍流氓~)
pptp版本应该不怎么重要吧,有的话评论区告知下哈~
按照yum推荐的版本来安装就行
现象
首先问题在我们的jenkins服务器上,jenkins在网段1,现在jenkins需要打包完成后通过ftp将包传输到网段2,但是jenkins服务器只有一个单网卡,没有网段2的ip,所以这边使用了pptp服务器(双网卡)做了vpn让jenkins能够打通网段2,如下图
然后jenkins使用ping命令可以ping通pptp服务器后,我们开始使用pptpsetup创建一个ppp0的网络连接到pptp,
这里小解释一下,pptp连接网段1,网段1的pptp服务分配一个网段2的地址给ppp1的虚拟网卡,之后让jenkins具备了网段2的访问能力
一切如此顺利,连接上之后我们ping一下网段2的ip,结果发现无法ping通,其实如果你的机器正常的话是可以ping通的,但是我的机器就是不行。。。
后来仔细发现pptp连接的时候报了一个错误
“error either to is duplicate or uid is a garbage ”
分析原因
1、如果你的路由器支持traceroute的话可以看下流量是怎么走的,可惜我这边看不到路由的路径所以没有用这个方式了
2、看下路由是否正常,ip route之后发现默认路由走的网段1的网关,有一条网段2的路由走的ppp0网络,但是就是ping不通
这个时候我ping了一下pptp的服务器发现无法ping通了????wtf?于是我断掉ppp0之后再次ping网段1中的pptp服务器发现又可以了。。。
什么怪事情。。。
冷静下来分析,pptp服务器的ip是网段1的IP地址,我ping的话走的应该是默认路由才对,但是现在似乎走了ppp0?那么我是不是可以直接显示声明一个路由强制让pptp服务器ip的流量走默认路由,这样网段2的流量会到pptp服务器的网段1的ip,然后走默认路由到pptp服务器网段1的ip地址?
解决方案
添加一条静态路由将pptp地址的路由直接路由到网段1的网关即可
ip route add pptp地址/32 via <网段1网关> dev xxx
思考感悟
其实很多机器不需要这么来,我也是从stackoverflow上面发现老外们这么来了一下就好了,所以如果深究的话可能需要tcpdump一下了~