本文系统Centos6.0;这里的***服务以pptpd为例;其中底层涉及到pptpd+freeradius+mysql认证;

相关url:

本文出自 “” 博客,请务必保留此出处

膜拜的技术啊。转载过来,慢慢吸收。

本文系真实案例;leader需求大多是这样的,节约成本还要达到所需要的效果;没办法,总的做个效果出来;

需求,国内一台***机器(server1),多ip,如:10.10.10.1-5(5个ip);国外一台***机器(server2),多ip,如:20.20.20.1-5(5个ip);两台***服务器间要实现ip隧道跳转;这样可以实现缩小延迟;比如,你想使用国外的ip,你只需要拨入国内***服务器即可,我们已经做了ip隧道。对外ip已经是国外的了,并且延迟要比你直接连接国外的***的延迟要小。先看下图图吧;

如图所示;每种颜色代表不同的链路走向;其中红色就代表了跳转的链接,拨入国内Ip,其实是国外的ip;黑色代表了国内用户直连server1,使用国内ip,蓝色的代表了用户直连国外的机器,直接使用国外的ip,为什么要使用隧道呢,因为有的用户直连国外的服务器的话,延迟较大,隧道的话,可以减小延迟;

我想大家应该明白了吧,leader的意思就是国内机器既要对内服务,既要做跳转到外面,国外的机器既要做跳转的节点,又要做直连的服务器。具体走向,现在是根据拨入Ip实现控制,拨入Ip隧道对接Ip就跳转过去,其他的不实现跳转,减少成本啊

下面就开始部署步骤了;

1、部署两台机器的pptpd服务;五个ip监听各个ip,也就是五个进程;下面是配置文件;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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服务进程;

1
2
3
4
5
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:

1
2
3
4
5
6
7
8
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

1
2
3
4
5
6
7
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:

1
2
3
4
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:

1
2
3
4
5
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

本文出自 “” 博客,请务必保留此出处