linux下设置VPN

Linux下常用的VPN服务有两个,一个是pptp,另一个则是openvpn。前者更简单一些,但是只有独立服务器和XENVPS可以搭建;后者则没有任何限制。前者搭建出来的VPN,不需要特殊的VPN客户端,直接在Windows下创建VPN拨号连接即可;而后者需要安装一个客户端来进行拨号。
  vpn的访问逻辑上存在3个网络:
    1、  欲访问的目标网络。通常在vpn服务器所在的内部网络(vpn服务器有2个网卡,一个是公网的,一个是私有网络的)
    2、  Vpn的公网网络。
    3、  Vpn连接后与客户端形成的虚拟网络。建议单独设置一个网络,这样就不会占用vpn后面的私有网络(目标网络)的ip资源/地址。




当然vpn隧道网络可以跟目标网络是同一个网段,不过不推荐这样。
一、检查服务器是否有必要的支持。
如果检查结果没有这些支持的话,是不能安装pptp的。
1.执行指令:#modprobe ppp-compress-18 && echo ok
这条执行执行后,显示“ok”则表明通过。
2.不过接下来还需要做另一个检查,输入指令:#cat /dev/net/tun
如果这条指令显示结果为下面的文本,则表明通过:
cat: /dev/net/tun: File descriptor in badstate
上述两条均通过,才能安装pptp。否则就只能考虑openvpn。
3.检查PPP是否支持MPPE ,linux内核版本在2.6.15以上,可以忽略下面检查
用以下命令检查PPP是否支持MPPE: 
#strings '/usr/sbin/pppd' |grep -i mppe |wc --lines 
如果以上命令输出为“0”则表示不支持;输出为“30”或更大的数字就表示支持,MPPE(Microsoft Point to Point Encryption,微软点对点加密)。
二、安装ppp和iptables。
默认情况下,是带有这两个组件的,但是精简版的系统可能没有。我们输入下面的命令来确认,如果没有则进行安装,有的话系统不会做任何动作:
#yum install -y ppp iptables
三、安装pptp
这个软件在yum源里是没有的,我们需要手动下载。我们先切换到tmp目录:
#cd /tmp
然后执行下面的命令来下载pptp安装包:
#wgethttp://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.i386.rpm (32位系统使用)
#wgethttp://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.x86_64.rpm (64位系统使用)
如果你的CentOS是32位的,则执行32位的那条指令;如果是64位的CentOS,则执行64位的那条指令。注意不要搞错了,搞错后面会报错客户端连接不上619或者800,并提示pptpd-logwtmp.so找不到。
接下来安装pptp,同样分32位和64位系统:
#rpm -ivh pptpd-1.3.4-1.rhel5.1.i386.rpm (32位系统使用)
#rpm -ivh pptpd-1.3.4-1.rhel5.1.x86_64.rpm (64位系统使用)
四、配置pptp。
首先我们要编辑/etc/pptpd.conf文件:
#vim /etc/pptpd.conf
找到“locapip”和“remoteip”这两个配置项,将前面的“#”注释符去掉,更改为你期望的IP段值。localip表示服务器的IP,remoteip表示分配给客户端的IP地址,可以设置为区间。这里我们使用pptp默认的配置:
localip  172.16.195.1
remoteip172.16.195.101-200
注意,这里的IP段设置,将直接影响后面的iptables规则添加命令。请注意匹配的正确性,如果你嫌麻烦,建议就用本文的配置,就可以一直复制命令和文本使用了。
接下来我们再编辑/etc/ppp/options.pptpd文件,需要设定分配给客户端的dns,因此仅需把ms-dns前的注释去掉,改成可用的dns如下:
#vim /etc/ppp/options.pptpd
ms-dns61.135.154.5
ms-dns159.226.240.66
五、设置pptp VPN账号密码。
我们需要编辑/etc/ppp/chap-secrets这个文件:
#vim /etc/ppp/chap-secrets
在这个文件里面,按照“用户名pptpd 密码*”的形式编写,一行一个账号和密码。比如添加用户名为test,密码为1234的用户,则编辑如下内容:
test pptpd 1234 *(指定分配给test用户的ip,* 表示由pptpd随机分配ip)
六、修改内核设置,使其支持转发。
编辑/etc/sysctl.conf文件:
#vim /etc/sysctl.conf
将“net.ipv4.ip_forward”改为1,变成下面的形式:
net.ipv4.ip_forward=1
保存退出,并执行下面的命令来生效它:
#sysctl -p
七、添加iptables转发规则
经过前面的6个步骤,我们的VPN已经可以拨号了,但是还不能访问任何网页。最后一步就是添加iptables转发规则了,输入下面的指令:
/sbin/iptables -t nat -APOSTROUTING -s 192.168.195.0/24 -o eth0 -j SNAT --to-source 61.135.251.50
/sbin/iptables -t nat -APOSTROUTING -s 172.16.195.0/24 -o eth1 -j SNAT --to-source 192.168.195.166
/sbin/iptables -t nat -APOSTROUTING -o eth0 -j MASQUERADE
需要注意的是,目标网络/vpn的内部网络为192.168.195.0/24,vpn服务器有2个网卡,其中一个连接公网(eth0),ip地址是61.135.251.51,另外一个网卡连私有网络,ip是192.168.195.166。这样就能正常地路由所涉及的网络了。
然后我们输入下面的指令让iptables保存我们刚才的转发规则,以便重启系统后不需要再次添加:
#/etc/init.d/iptables save
然后我们重启iptables:
#/etc/init.d/iptables restart
八、开启pptp服务。
输入下面的指令重启pptp:
#/etc/init.d/pptpd start
现在你已经可以连接自己的VPN并浏览网页了。不过我们还需要做最后的一步。 
九、设置开机自动运行服务。
我们最后一步是将pptp和iptables设置为开机自动运行,这样就不需要每次重启服务器后手动启动服务了。当然你不需要自动启动服务的话可以忽略这一步。输入指令:
#chkconfig pptpd on   
#chkconfig iptables on 


注:如果系统防火墙是打开的,那么需要将PPTP的端口号打开,PPTP协议使用 1723端口号

猜你喜欢

转载自blog.csdn.net/liansehai/article/details/8689153