Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->网络应用 ->正文

使用Linux L2TP/IPsec VPN 服务器

来源:linux.chinaunix.net 作者:QUSHIQIANG  时间:2007-04-22 点击: [收藏] [投稿]

22.1 发现并修理故障
很自然,VPN使维修工作更困难,VPN不想对假设潜在的攻击问题给出更多的信息,数据包被服务器默默地丢弃,发送到的客户端的错误信息大概没有多大帮助。所以说要对你的L2TP/IPsec连接可能出现的问题给出一些技巧。
使用ipsec verify命令。不是报告的每个错误是真实的问题,不过在某一种情况可能有帮助。例如,如果你不是用“随机加密” (Opportunistic Encryption),你应该忽略关于“丢失反向DNS记录” (missing reverse DNS entries)的错误信息。
一些IPsec数据包被封锁。例如,当在路由器上有一个限制过分的防火墙或者ISP总是阻碍VPN协议。用tcpdump验证IPsec数据包(UDP 500/4500和IP 50)真正到达你的Linux服务器,你也可以使用Openswan的ipsec ikeping命令,通过一层一层地跟踪数据包就可以把问题诊断出来。
tcpdump -n -i eth0 not port 22
tcpdump -n -i ipsec0 -s 1500
tcpdump -n -i ppp0 -s 1500
tcpdump -n -i eth1
(eth0是敌对网络也就是互联网,ipsec0是运行在敌对网上的IPsec连接,ppp0是通过IPsec隧道的L2TP/PPP连接,eth1是内网,如果你的设备命名不同,依照你的设备修改。)
在eth0接口上,你不应该看到任何未加密的数据包(比如出现“L2TP”),如果你看到未加密的数据包,这不是一个安全的VPN。有一个例外, 2.6内核自带的IPsec执行者(“26sec”)没有ipsec0接口,你在外部接口eth0上运行tcpdump,你可以在一个方向上看到未加密的数据包。在Mandrake 10上,tcpdump可能在对数据包解码时会出现错误,大概是校验和无效。最好的解决方案是在客户端和服务器之间用第三个系统检查,在这两者之间的通信上用tcpdump或Ethereal等嗅探,你将看到所有的数据包被加密。
使用ping测试数据包流程。
ping <external IP>; 
ping <internal IP >; 
ping <local ip in l2tpd.conf>; 
ping <any IP address on internal network>;
22.2 IPsec日志
Openswan的错误信息日志在/var/log/secure。如果你需要更详细的,你可以在ipsec.conf中添加 plutodebug=all启用Pluto(IKE守护进程)诊断功能,如果出现严重的问题,比如执行或协同工作的问题,你甚至可以添加 klipsdebug=all启用KLIPS(内核)诊断功能。这也将显示被内核默默地丢弃的数据包。激活这些设置需要重新启动Pluto。更多的信息请参考FreeS/WAN Troubleshooting Guide(http: //www.freeswan.org/freeswan_snaps/CURRENT-SNAP/doc/trouble.html)。不要在产品安装中使用这些设置,因为它们非常容易让坏家伙进行DOS(Denial Of Service)攻击。
如果你的IPsec能工作,但你仍不能登录,你也许需要看一下L2TP和PPP错误信息,它们保存在/var/log/messages。但不是所有的错误信息都记录在这里,Mandrake把详细诊断信息记录在/var/log/deamons/*。在RedHat上,你可以修改 /etc/syslogd.conf并且在包含/var/log/messages的这行增加“*.debug;”来增大诊断等级,然后输入 service syslog restart来重新启动系统日志服务(syslogd)。
22.3 网关不可到达
如果你使用KLIPS并且得到下面的错误:
route-host output: /usr/lib/ipsec/_updown: doroute `ip route add x.x.x.x/32 via x.x.x.x dev ipsec0 ' failed
(RTNETLINK answers: Network is unreachable)
这意味着数据包不能路由到适当的ipsecN接口,因此它们没有被KLIPS处理。你可以在Openswan的配置文件中增加额外的一行来解决这个问题。如:
conn L2TP-CERT
        authby=rsasig
        pfs=no
        left=123.123.123.123
        leftnexthop=<IP_address_of_your_gateway>;
        leftrsasigkey=%cert
        leftcert=/etc/ipsec.d/ssl/localCERT.pem
        etc.
如果你用26sec代替KLIPS的话就没有ipsecN接口,所以从理论上说“leftnexthop”参数不会工作,但我注意到,当Openswan服务器位于NAT后面时需要使用这个参数。 
22.4 战神攻击
如果tcpdump显示Linux服务器看起来没有对来自Windows/Mac客户端的数据包做出响应,那么可能没有禁用反向路径过滤(Reverse Path Filtering)。如果你在/var/log/messages里看到这样:
martian destination 127.0.0.1 from 192.168.0.222, dev ipsec0
martian source 192.168.0.200 from 192.168.0.222, on dev eth0
ll header: 00:00:00:00:00:00:00:40:33:2c:70:c8:08:00
那么你需要清空rp_filter。如果在/var/log/messages向回翻,你可以看到FreeS/WAN有这样的提示:
ipsec_setup: (/proc/sys/net/ipv4/conf/eth0/rp_filter = `1', should be 0)
如是eth0设备,使用echo 0 >; /proc/ss/net/ipv4/conf/eth0/rp_filter可以快速修复这个问题。作为选择,你可以在/etc/sysctl.conf中添加net.ipv4.conf.default.rp_filter=0。
22.5 Windows诊断
另外,你可以检查Windows客户端的日志,我对在Windows上的错误信息没有较好的印象,我发现Linux端的论断信息(Openswan、l2tpd、pppd)更加有用。下面有两篇微软的关于启用Windows 2000/XP的IPsec和PPP日志功能的文章:
启用对IKE商议详细过程日志(http://www.microsoft.com/technet/prodtechnol/windowsserver2003/proddocs/standard/sag_ipsec_tools.asp)。

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:让Linux NAT服务器支持UPnP   下一篇:利用IP 别名托管多个SSL 站点

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号