CentOS安装L2TP/IPSEC 与简单故障处理
说实话,折腾L2TP/IPSEC是最难受的。不像PPTP有高人写好的一键安装包可以直接安装。而在过程会出现各种各样的状况,有的甚至涉及到内核。本文中提到的方法与步骤是我参阅许多教程和文档后亲自实践操作可行的。若读者在安装过程中出现问题,请留意文章最后的简单故障处理
开始:
服务器环境 :CentOS 5.5 64位
先更新软件源
32位
rpm -Uvh http://download.Fedora.RedHat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm
64位
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-3.noarch.rpm
一:安装OPENSWAN
1.这里是下载到机器上自己编译,而直接不用rpm包。可能有些教程建议用rpm包,但实际上还是亲自实验看看比较有把握。
yum install gmp-devel gawk flex bison wget lsof //安装编译用的包,同时也会把lsof安装上,用于最后端口检测 wget http://www.openswan.org/download/openswan-2.6.28.tar.gz //下载OPENSWAN tar zxvf openswan-2.6.28.tar.gz //解压 cd zxvf openswan-2.6.28.tar.gz make programs //编译 make install //安装
2.修改/etc/ipsec.conf文件
如果你觉得用命令行编辑比较麻烦,我建议用WinSCP 把文件下载下来,用Notepad++编辑后上传覆盖 ^_^
把ipsec.conf修改成这样
version 2.0 config setup nat_traversal=yes virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12 oe=off protostack=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=1.2.3.4 //你的服务器IP leftprotoport=17/1701 right=%any rightprotoport=17/%any
3.修改/etc/ipsec.secrets
把ipsec.secrets修改成这样
1.2.3.4 %any: PSK "YourSharedSecret"
其中1.2.3.4是你的服务器IP,YourSharedSecret是你自定义的一串字符,就是今后连接时用的密钥。
4.完成以上编辑以后, 运行以下命令:
for each in /proc/sys/net/ipv4/conf/* do echo 0 > $each/accept_redirects echo 0 > $each/send_redirects done
5. 重启OPENSWAN
service ipsec restart
然后检查一下OPENSWAN是否正常工作
ipsec verify
看看输出的结果是不是都是OK,除了最后一个是DISABLED。如果不是没关系,请留意文章最后的故障处理。
二:安装L2TP
yum install xl2tpd //如果出现找不到包就是没有更新软件源
2.安装完成后, 修改/etc/xl2tpd/xl2tpd.conf
把xl2tpd.conf, 修改成这样
[global] ipsec saref = yes [lns default] ip range = 10.1.2.2-10.1.2.255 //这里可以根据需要改成没被占用的IP段 local ip = 10.1.2.1 ;require chap = yes refuse chap = yes refuse pap = yes require authentication = yes ppp debug = yes pppoptfile = /etc/ppp/options.xl2tpd length bit = yes
3.安装pppd
yum install ppp
4.安装完毕, 在/etc/ppp下建立options.xl2tpd文件(如果已经有了可以直接修改)
把options.xl2tpd修改成这样
require-mschap-v2 ms-dns 8.8.8.8 //VPS使用的DNS服务器 ms-dns 8.8.4.4 //VPS使用的DNS服务器 asyncmap 0 auth crtscts lock hide-password modem debug name l2tpd proxyarp lcp-echo-interval 30 lcp-echo-failure 4
如果需要Radius支持,就在最后一行加上
plugin radius.so
并复制radius.so到该目录下。
5.给xl2tpd添加用户, 填在/etc/ppp/chap-secrets中
如:
# user server pass IP l2tpuser xl2tpd l2tppass *
格式为:
用户名 连接服务 密码 来源IP
来源IP为*时即允许所有来源。server下面写的是xl2tpd即为xl2tpd用户。
6. 重启xl2tpd,设置iptables转发
service xl2tpd restart iptables --table nat --append POSTROUTING --jump MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward
7.修改/ect/sysctl.conf
把sysctl.conf 修改成这样
net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 0 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 68719476736 kernel.shmall = 4294967296
8.让L2TP开机自启。
chkconfig xl2tpd on
9.最后在/etc/rc.local的exit 0前加入以下语句
iptables --table nat --append POSTROUTING --jump MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward for each in /proc/sys/net/ipv4/conf/* do echo 0 > $each/accept_redirects echo 0 > $each/send_redirects done /etc/init.d/ipsec restart
这样一个L2TP/IPSEC服务器就大功告成了!!!赶紧连接试试看吧 ^_^
三:简单故障处理。
许多人在执行ipsec verify的时候会出现错误,这里说两个我遇到最郁闷的状况。
1.如只有出现以下两行Failed,别的全部OK
Pluto listening for NAT-T on udp 4500 [Failed]
Two or more interfaces found, checking IP forwarding [Failed]
这个问题曾经困扰了我很久,最后在朋友和高手协助下修复了。
修改ipsec.conf。
在
left=1.2.3.4 //你的服务器IP leftprotoport=17/1701
中间加上一行:
leftid=1.2.3.4 //你的服务器IP
在
right=%any rightprotoport=17/%any
中间加上一行
rightid=%any
即可解决这个问题。
2.比上面的问题更郁闷的还有在ipsec verify的时候全部OK,却不能用没有密钥连接的情况。(不使用密钥可以正常连接。)
这个问题翻来覆去,和朋友检查了所有有关的配置文件和系统环境。还是没有结果,终于在看manpage中看到了相关内容。
简单解释下:系统的esp模块是需要加密。而默认的加密模块我的内核里没有,所以内核报错了。那么固定一种加密方式,就解决问题了。
是不是很纠结。但是解决起来却非常简单。(有用户报告32位系统无法解决,请大家自行测试)
在ipsec.conf中的
pfs=no auto=add
两行之间加上
esp=3des-sha1-96
这样就定义了加密模块!问题就解决了
同时还有
esp=3des-md5-96
esp=3des
可供选择
先解决这两个棘手的问题,如果有遇到别的情况可以Google一下或者查阅相关文档。
希望本文对大家有所帮助。