linux之vpn服务器间ip隧道跳转多ip路由走向分流(系真实案例)
本文系统Centos6.0;这里的vpn服务以pptpd为例;其中底层涉及到pptpd+freeradius+mysql认证;
本文系真实案例;leader需求大多是这样的,节约成本还要达到所需要的效果;没办法,总的做个效果出来;
需求,国内一台vpn机器(server1),多ip,如:10.10.10.1-5(5个ip);国外一台vpn机器(server2),多ip,如:20.20.20.1-5(5个ip);两台vpn服务器间要实现ip隧道跳转;这样可以实现缩小延迟;比如,你想使用国外的ip,你只需要拨入国内vpn服务器即可,我们已经做了ip隧道。对外ip已经是国外的了,并且延迟要比你直接连接国外的vpn的延迟要小。先看下图图吧;
1、如图所示;每种颜色代表不同的链路走向;其中红色就代表了跳转的链接,拨入国内Ip,其实是国外的ip;黑色代表了国内用户直连server1,使用国内ip,蓝色的代表了用户直连国外的机器,直接使用国外的ip,为什么要使用隧道呢,因为有的用户直连国外的服务器的话,延迟较大,隧道的话,可以减小延迟;
我想大家应该明白了吧,leader的意思就是国内机器既要对内服务,既要做跳转到外面,国外的机器既要做跳转的节点,又要做直连的服务器。具体走向,现在是根据拨入Ip实现控制,拨入Ip隧道对接Ip就跳转过去,其他的不实现跳转,减少成本啊
下面就开始部署步骤了;
1、部署两台机器的pptpd服务;五个ip监听各个ip,也就是五个进程;下面是配置文件;
- cat /etc/pptpd.conf
- ppp /usr/sbin/pppd
- option /etc/ppp/pptpd-options
- logwtmp
- connections 1024
- listen 10.10.10.1
- localip 172.16.0.1
- remoteip 172.16.0.2-254
- cat /etc/pptpd2.conf
- ppp /usr/sbin/pppd
- option /etc/ppp/pptpd-options
- logwtmp
- connections 1024
- listen 10.10.10.2
- localip 172.16.1.1
- remoteip 172.16.1.2-254
- cat /etc/pptpd3.conf
- ppp /usr/sbin/pppd
- option /etc/ppp/pptpd-options
- logwtmp
- connections 1024
- listen 10.10.10.3
- localip 172.16.2.1
- remoteip 172.16.2.2-254
- cat /etc/pptpd4.conf
- ppp /usr/sbin/pppd
- option /etc/ppp/pptpd-options
- logwtmp
- connections 1024
- listen 10.10.10.4
- localip 172.16.3.1
- remoteip 172.16.3.2-254
- cat /etc/pptpd5.conf
- ppp /usr/sbin/pppd
- option /etc/ppp/pptpd-options
- logwtmp
- connections 1024
- listen 10.10.10.5
- localip 172.16.4.1
- remoteip 172.16.4.2-254
两台机器是配置是一样的,唯一差别就是监听地址不一样(listen);
下面是pptpd-options的配置
- cat /etc/ppp/pptpd-options |grep -v ^#
- name pptpd
- refuse-pap
- refuse-chap
- refuse-mschap
- require-mschap-v2
- require-mppe-128
- proxyarp
- lock
- nobsdcomp
- novj
- novjccomp
- nologfd
- ms-dns 8.8.8.8
- logfile /var/log/pptpd.log
- plugin /usr/lib/pppd/2.4.5/radius.so
- radius-config-file /etc/ppp/radius/etc/radiusclient.conf
启动pptpd服务进程;
- pptpd -c /etc/pptpd.conf
- pptpd -c /etc/pptpd2.conf
- pptpd -c /etc/pptpd3.conf
- pptpd -c /etc/pptpd4.conf
- pptpd -c /etc/pptpd5.conf
2、打通两台机器的隧道,测试
这里是10.10.10.1对接(跳转)到20.20.20.1
- Server1:
- ip tunnel del ethn
- ip tunnel add ethn mode ipip local 10.10.10.1 remote 20.20.20.1
- ifconfig ethn 172.0.0.1
- route add -host 172.0.0.2 dev ethn
- echo 1 > /proc/sys/net/ipv4/ip_forward
- ip rule add to 172.16.0.0/24 table ipip pref 1700
- #这要告诉他凡是pptpd,第一个Ip拨入用户分配的内网Ip0.0/24的走向ipip隧道,也就是跳转到外面
- ip route add default dev ethn table ipip
- server2
- ip tunnel del ethn
- ip tunnel add ethn mode ipip local 20.20.20.1 remote 10.10.10.1
- ifconfig ethn 172.0.0.2
- route add -host 172.0.0.1 dev ethn
- echo 1 > /proc/sys/net/ipv4/ip_forward
- ip rule add to 172.16.0.0/24 table ipip pref 1700
- ip route add default dev ethn table ipip
现在你会发现两块机器互ping 172.0.0.x的可以Ok的;确定下ipip模块是否加载哈;
3、实现不同ip的走向流向,对外ip显示不同。
现在你会发现拨入10.10.10.1这个Ip的话,会跳转到国外,如果你想10.10.10.2这个Ip的拨入用户也跳转到外面的话,添加
1
ip rule add to 172.16.1.0/24 table ipip pref 1700
两台机器分别;
- server1:
- iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 10.10.10.2
- iptables -t nat -A POSTROUTING -s 172.16.2.0/24 -o eth0 -j SNAT --to-source 10.10.10.3
- iptables -t nat -A POSTROUTING -s 172.16.3.0/24 -o eth0 -j SNAT --to-source 10.10.10.4
- iptables -t nat -A POSTROUTING -s 172.16.4.0/24 -o eth0 -j SNAT --to-source 10.10.10.5
- server2:
- iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth0 -j SNAT --to-source 20.20.20.1
- iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j SNAT --to-source 20.20.20.2
- iptables -t nat -A POSTROUTING -s 172.16.2.0/24 -o eth0 -j SNAT --to-source 20.20.20.3
- iptables -t nat -A POSTROUTING -s 172.16.3.0/24 -o eth0 -j SNAT --to-source 20.20.20.4
- iptables -t nat -A POSTROUTING -s 172.16.4.0/24 -o eth0 -j SNAT --to-source 20.20.20.5
Ps:这里实现根据入口不同分流,最好的是根据目标地址不同使用不同的路由表,ip rule真心很不错;
后续有时间会继续推出ip rule