CentOS 6.2 安装PPTP/L2TP 服务端程序

其实哥认为一个PPTP就够用了(据说有的地区电信运营商已经封掉了PPTP协议,哥这还没有),虽然说L2TP的安全性要高于PPTP,但实际你不仅要记账号密码,还要记住它的共享密钥,实在是很烦的啊;并且再开启一层NAT+端口转发后,PPTP可以直接连接,但是L2TP的Windows与Linux客户端是需要特殊设置,这非常的麻烦。

不过生命的意义在于折腾。


PPTP

PPTP(Point to Point Tunneling Protocol)是来自微软的Gurdeep Singh-Pall在1996年出的一个点对点隧道通信协议技术,用到了MPPE,不过在2005年Linux内核2.6.14的时候,就将MPPE合并到主分支了,因此CentOS 6是果断支持的。

然后检测VPS是否支持TUN和PPP,这个有的OpenVZ是不支持的。但哥的是KVM架构,果断支持。

先添加资源库,哥添加的是Fedora的资源库,Fedora的资源库非常多且新的应用包。

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm -O epel.rpm
rpm -ivh epel.rpm
yum update && yum install -y ppp iptables
# 先判断你的系统是32还是64位,使用命令 getconf LONG_BIT 即可查看,哥安装的是64位.
wget http://acelnmp.googlecode.com/files/pptpd-1.3.4-1.rhel5.1.i686.rpm -O pptpd.rpm && rpm -ivh pptpd.rpm

# 编辑pptpd的配置文件 先备份原件
cp /etc/ppp/pptpd.conf /etc/ppp/pptpd.conf.bak
# 设置服务端网关IP
echo "localip 10.8.0.1" >> /etc/pptpd.conf
# 设置连接过来的客户机IP段
echo "remoteip 10.8.0.10-100" >> /etc/pptpd.conf
# 并可以设定ms-dns值,自己指定DNS解析,默认是谷歌的8.8.8.8

# 接着添加用户,顺序是 用户名 服务 密码 允许请求的IP或IP段
echo "user1    pptpd    password1    *" >> /etc/ppp/chap-secrets

# 然后设置开启内核转发参数,并开启防止SYN握手攻击.
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_syncookies=1" >> /etc/sysctl.conf
# 生效
sysctl -p

# 添加iptables转发规则,其中eht0是公网的网卡设备,不同主机的网卡名称与序号可能不一样。
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
# 允许放行GRE协议
iptables -A INPUT -p gre -j ACCEPT
# 允许开发1723端口
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT
# 保存设置参数
service iptables save
# 设置开机启动
# chkconfig pptpd on
# chkconfig iptables on
# 最后重启pptpd,即可连接
service pptpd restart

L2TP

L2TP(Layer 2 Tunneling Protocol)是Network Working Group在2000年发布的一种工作在TCP/IP模型的第二层的点对点隧道通信协议技术,它结合了思科的L2Y和微软的MPPT技术,使用TCP进行握手,使用UDP封装传输数据,可以指定加密方式,并在2005年发布了L2TPv3,更加安全和稳定.

哥使用的是IPSEC+L2TP。

网上好多都是人都是自己下载OpenSwan进行编辑安装,其实fedora源中已经有这几个包了。

#xl2tpd需要用到ppp模块,但哥在装PPTP的时候已经装过了.
yum install -y openswan ppp xl2tpd
cp /etc/ipsec.conf /etc/ipsec.conf.bak

然后就配置ipsec文件,将protostack=auto的值改为netkey,并在最后加入以下:

conn L2TP-PSK-NAT
rightsubnet=vhost:%priv
also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
authby=secret
pfs=no
auto=add
keyingtries=3
rekey=no
ikelifetime=8h
keylife=1h
type=transport
left=x.x.x.x
leftprotoport=17/1701
right=%any
rightprotoport=17/%any

其中的x.x.x.x是服务端的公网IP或解析到服务端的域名,需要自己替换。
然后在/etc/ipsec.secrets中添加IPSec的密钥:

x.x.x.x %any: PSK “YourSharedSecret”

其中x.x.x.x是你的服务端公网IP或解析到服务端的域名,然后替换YourSharedSecret为自己的共享密钥.

设置内核转发:

net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.log_martians = 0
net.ipv4.conf.default.log_martians = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.icmp_ignore_bogus_error_responses = 1

编辑/etc/xl2tpd/xl2tpd.conf文件,加入以下:

[global]
;这里写内网IP。或者加;注释掉也问题不大。
listen-addr = x.x.x.x
;这里一般都让写yes,但如果你的的ipsec verify中,有报SAref kernel support[N/A]的话,这里就写no。
ipsec saref = yes

[lns default]
;网关同PPTP
local ip = 10.8.0.1
;与PPTP的错开
ip range = 10.8.0.110-10.8.0.200
require chap = yes
refuse pap = yes
require authentication = yes
name = xL2TPServer
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

添加/etc/ppp/options.xl2tpd文件

ipcp-accept-local
ipcp-accept-remote
ms-dns 8.8.8.8
ms-dns 8.8.4.4
noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000
logfile /var/log/xl2tpd.log

类似PPTP开放防火墙端口:

iptables -I INPUT -p tcp --dport 3306 -j ACCEPT
iptables -I INPUT -p udp --dport 1701 -j ACCEPT
service iptables save

重启xl2tpd和IPSec服务并设置为开机启动:

service xl2tpd restart
service iptables restart
chkconfig xl2tpd on
chkconfig ipsec on