使用Linux L2TP/IPsec VPN 服务器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 站点 更多相关文章
|
推荐文章
精彩文章
|