Centos配置VPN多IP出口实现单用户单IP And 中转服务器与多服务器进行中转
本帖最后由 三笠·阿克曼 于 2017/3/25 17:05 编辑原先在弄VPN的时候就想过1台VPN服务器多IP出口,不过苦因度娘和谷歌娘查了大半个月,都找不到一篇有用的资料,然后问了下樱妹,他也说VPN没法实现多IP出口,就放弃了。工作室300多台的机器租了60多台的VPN服务器,30台韩国的,30台国内的用来做中转,钱包苦不堪言啊。。。
最近因工作室新增了100台机器,所以相应的也要增加VPN服务器,今天我在配置VPN服务器的时候,在添加iptables规则的时候,突然灵机一动,原来有时候真的是我们把东西想到太过复杂,它其实简单的可怕。
发出来既是为了共享,也是自己做一个记录。
Part1:多IP出口
原来iptables规则如下:
iptables -t nat -A POSTROUTING -s 10.1.0.0/24 -j SNAT --to-source "1.1.1.1"
10.1.0.0/24是内网IP段,1.1.1.1是VPN外网出口IP
在写到上面的规则的时候,我突然想到,如果在下面再加一条:
iptables -t nat -A POSTROUTING -s 10.2.0.0/24 -j SNAT --to-source "2.2.2.2"
是不是就能实现不同内网IP段走不同的外网IP出口了
接着我就马上在VPN的配置里多增加了一个内网IP段10.2.0.0/24,并新建一个用户,分配这个IP段的内网IP,然后在VPS的后台新增了一个IP,接着本地用2台机器测试
结果让我高兴的直接跳了起来,A机器走的是1.1.1.1的外网IP,B机器走的是2.2.2.2的外网IP
但是机智的我并没有被短暂的成功冲昏头脑,我想到,既然能为整个内网IP段指定对应的出口,那么为单个内网IP指定对应的出口应该也是可以的咯
接着又继续进行测试:
iptables -t nat -A POSTROUTING -s 10.1.0.2 -j SNAT --to-source "1.1.1.1"
iptables -t nat -A POSTROUTING -s 10.1.0.3 -j SNAT --to-source "2.2.2.2"
实验结果不出意外的成功了,掩住内心的喜悦,直接联系机房购买了1个C段的IP,内网的IP也是一个C段,正好用一个for循环添加到iptables里搞定
Part2:中转服务器与多服务器进行中转
上paypal取消了25台韩国VPS的自动续费,剩下5台升级了下内存和带宽,每台新增了1个C的IP
接着又把国内中转的25台服务器取消自动续费,想到每个月省下来的服务器费用,我高兴的像个100斤的瘦子(不高兴也是个100斤的瘦子{:119:} )
原来中转服务器是一对一的,比如CN1中转KR1,CN2中转KR2,CN3中转KR3这样
因为服务器实在太多了,搞的我都不知道哪台是对那台的,剩下的30台中转服务器,我找不到与剩下的5台韩国服务器对应的中转服务器是哪5台,干脆全部删了,重新部署算了,懒得一个个看
又是在部署到iptables转发规则的时候,我突然想到,既然VPN服务器能通过指定内网IP走指定的外网IP出口,那中转服务器能不能通过指定的内网IP走指定的中转出口呢?这样就能实现1对多中转了
原来iptables规则如下:
iptables -t nat -A PREROUTING -d 1.1.1.0 -p udp --dport 1701 -j DNAT --to-destination 1.1.1.1:1701
iptables -t nat -A PREROUTING -d 1.1.1.0 -p udp --dport 500 -j DNAT --to-destination 1.1.1.1:500
iptables -t nat -A PREROUTING -d 1.1.1.0 -p udp --dport 4500 -j DNAT --to-destination 1.1.1.1:4500
#设置去程
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp --dport 1701 -j SNAT --to-source 1.1.1.0
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp --dport 500 -j SNAT --to-source 1.1.1.0
iptables -t nat -A POSTROUTING -d 1.1.1.1 -p udp --dport 4500 -j SNAT --to-source 1.1.1.0
#设置回程
那么问题来了,这里只要是连接中转服务器1.1.1.0的VPN服务的1701端口的就全部被转到1.1.1.1去了,怎么根据内网IP段指定出口中转呢
在抽了半包烟之后,我想起了我刚开始弄时候的笨办法,不做端口转发,用VPN来进行转发
既:用户VPN连接---中转服务器,中转服务器VPN连接韩国VPN服务器,然后在中转服务器上加个路由指定流量走中转服务器---韩国服务器的VPN连接出口
方法如下:
1:用pptpclient设置5个VPN连接,然后拨号连上,分别得到5条VPN链路ppp0-ppp4
2:因为我现在工作室在4个不同地方的机房有机器,所以在中转服务器上设置4个不同的VPN内网IP段,不同地方的机器用不同用户组的方式实现分配不同的IP段拨入例如:10.0.1.0/24,10.0.2.0/24,10.0.3.0/24,10.0.4.0/24
3:开始实测,4台机器拨上VPN,得到4条VPN链路ppp5-ppp8
4:内网IP记得区分开,例如本例中,中转服务器与韩国服务器之间的内网IP段为:10.1.0.0/24。本地拨号机器与中转服务器之间的内网IP段为:10.0.1.0/24,10.0.2.0/24,10.0.3.0/24,10.0.4.0/24。(当然你爱怎么设置你是自己的事,我是为了区分的明显,用不同的B段,你要设置成不同的C段也可以,我没测试过,不知道会不会发生IP冲突之类的)
5:开始配置路由策略转发
iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o ppp0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.2.0/24 -o ppp1 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.3.0/24 -o ppp2 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.4.0/24 -o ppp3 -j MASQUERADE
#指定不同内网IP段走不同的ppp连接
ip rule add from 10.0.1.0/24 table 1
ip rule add from 10.0.2.0/24 table 2
ip rule add from 10.0.3.0/24 table 3
ip rule add from 10.0.4.0/24 table 4
#把10.0.*.0来源的路由,转到 table *上
ip route add 10.1.0.1 dev ppp0 table 1
ip route add 10.1.0.10 dev ppp1 table 2
ip route add 10.1.0.20 dev ppp2 table 3
ip route add 10.1.0.30 dev ppp3 table 4
#设置不同的table走不同的ppp网关
PS:当我设置到上面这一步的时候,我突然发现,中转服务器连接5个韩国服务器,既ppp0-ppp4的VPN网关都是10.1.0.1,为了防止出错,赶紧把5个韩国服务器设置了不同的VPN网关,例:10.1.0.1,10.1.0.2,10.1.0.3,10.1.0.4,10.1.0.5
设置完测试的时候,就发现问题了,ppp0的VPN网关为10.1.0.1,中转服务器拨号后得到的内网IP地址是10.1.0.2,但是ppp1的VPN网关又是10.1.0.2。。。。
赶紧又重新把韩国服务器的VPN网关修改成了:10.1.0.1,10.1.0.10,10.1.0.20,10.1.0.30,10.1.0.40,这样中转服务器拨号后得到的内网IP地址分别为:10.1.0.2,10.1.0.11,10.1.0.21,10.1.0.31,10.1.0.41
PPS:别问我为什么连了5条韩国VPN,只中转了4条,留1条是作为紧急时刻备用
最后,高兴的像个100斤的瘦子的我,用4个不同机房的机器连上测试后,发现悲剧了
估计可能有人发现问题所在了,不同机房的机器能连上了,也能根据不同的内网IP段转发到不同的韩国服务器了
使用端口转发的话,中转服务器完全就只是个中转,VPN验证和分配IP都是交给韩国服务器的,用户分配到的是韩国VPN服务器的内网IP段10.1.0.0/24,能根据我们前面的iptables策略
iptables -t nat -A POSTROUTING -s 10.1.0.2 -j SNAT --to-source "1.1.1.1"
iptables -t nat -A POSTROUTING -s 10.1.0.11 -j SNAT --to-source "2.2.2.2"
iptables -t nat -A POSTROUTING -s 10.1.0.* -j SNAT --to-source "*.*.*.*"
走不同的外网IP出口
但是
但是
但是使用VPN中转的话,所有用户的验证和分配IP是中转服务器完成的,都是通过中转服务器拨号韩国服务器得到的同一个内网IP连接,所以只有1个外网IP出口{:3110:}
最后因为工作室的游戏对独立IP的需要我还是放弃了这个方法,乖乖用5台中转服务器来中转了,等以后想到完美的解决办法了,再接着折腾,现在部署生产环境是第一要素
不过VPN中转的方法可以用来针对一些对独立IP要求不高的游戏做中转,例如一些单机类的平台游戏等,例如:origin,steam等平台上的游戏,正好这些游戏不同的区服也多,一台服务器中转多台,能节省不少的中转服务器的钱
国内这个服务器的费用,真心是贵的可怕。。。
大召唤术@小樱
我又来发心得了 恩恩,大佬巨强无比,话说可以实现均衡负载随机IP出口么 小樱 发表于 2017/3/25 20:28
恩恩,大佬巨强无比,话说可以实现均衡负载随机IP出口么
中转服务器使用ros的话可以做负载均衡
centos的话目前还不知道要怎么做 三笠·阿克曼 发表于 2017/3/28 09:10
中转服务器使用ros的话可以做负载均衡
centos的话目前还不知道要怎么做
嗯。。主要就是用出口IP用的,服务器/24 253个IP,做出口GET用 收藏一下,研究研究 @小樱@三笠·阿克曼
我用 ros 利用多播技术 拨了50播,也就是相当于50条adsl光纤,并且开启代理ip端口
然后使用squid做了下简单二级代理转发的负载均衡,
只要通过squid的代理端口,就达到了,随机ip出口。
适合爬虫,注册,貌似搞游戏的话,这样操作,用途不大。 hanbingtel 发表于 2017/5/18 03:31
@小樱@三笠·阿克曼
我用 ros 利用多播技术 拨了50播,也就是相当于50条adsl光纤,并且开启代理ip端口
...
貌似樱妹对这个比较感兴趣 hanbingtel 发表于 2017/5/18 03:31
@小樱@三笠·阿克曼
我用 ros 利用多播技术 拨了50播,也就是相当于50条adsl光纤,并且开启代理ip端口
...
wc,,,这么6的啊。还能50拨
页:
[1]