使用Linux L2TP/IPsec VPN 服务器简单点,我们假设你的Linux服务器外网接口是eth0,并且内网接口是eth1。PPP服务允许远程用户用一个内网的IP地址,一旦用户连接上,ppp0介面将会自动启动。l2tpd.conf中有一行“local ip”,用这个参数指定内网的一个固定IP地址供L2TP守护进程使用。 你看到的PPP选项文件示范那样(/etc/ppp/options.l2tpd),你也可以指定DNS和WINS服务器,当连接成功后,远程客户将会自动获得这些参数。一般情况下,你应该为远程客户指定的DNS/WINS就像直接连接的内网客户一样。可是,Windows 2000/XP自己的L2TP/IPsec客户端好象只支持获这些DNS/WINS服务器(当它的Internet连接配置为动态IP地址时)。 注:options.l2tpd包含proxyarp参数。这个参数将在内网接口(示例中的eth1)为远程用户打开一个代理ARP入口。如果这个关键字没有指定,Windows客户端发出的数据包将到达内网服务器,但这些服务器不知道向哪儿发出回应,因为没有人回答它的ARP请求。用 proxyarp参数,内网机器被到远程Windows客户到网关发送进来的数据包欺骗。网关让IP继续向前,因此它知道怎么样发送数据到Windows客户端。 16.2 MTU问题 你的VPN连接有断断续续的问题,它可能是一个MTU问题。你大概会看这样的问题:你可以ping内网的机器,并且你可以复制非常小的文件,但是你不能复制大文件,因为连接中断。试着在/etc/ppp/options.l2tp文件中增加以下几行减少MTU到1410(或许更低)。 mtu 1400 mru 1400 当你的连接通过VPN到用broken Path MTU Discovery站点时,这个问题可能特别明显。大概用PPTP或PPPoE的 ADSL连接同样有这样的问题。如果认证成功前连接失败,减少PPP数据包的大小是没有用的。试着使用更小的证书或不使用被NAT的连接。 FreeS/WAN的邮件列表中有一些讨论,FreeS/WAN小组写到:“可以在ipsec.conf的配置安装用一节用 overridemtu=参数改变MTU。”一般情况下,这个参数仅支持KLIPS,不支持26sec。其它的提有,减少你的证书大小(短姓名,更少的 X.509v3选项等),或用IPCOMP压缩。你也可以试着强制你的以太网接口使用一个更小的MTU:ifconfig ethx mtu 1400。 Cisco也有关于这一问题的一些文档。微软知识库中的Q314053解释了怎么样为一个指定的适配器设置MTU。 17 再次开始L2TP/IPsec连接 到这里,你已经配置好了IPsec、L2TP、PPP,在Windows或Mac客户端再次开始VPN连接,这个过程和上边的一样,但这一次 L2TP连接应该正常启动,如果成功了,祝贺你,你获得了一个成功的L2TP/IPsec配置。如果它不成功,检查你的设置,也可以看下面的“检查并修理故障”。 有两种比较好的检查办法: 1、在客户端和服务器之间放一台计算机,你可以用这台计算机靠tcpdump或Ethereal这样的网络监视程序来sniff客户端和服务器之间的通信。数据包必须被加密,如果你看到未被加密的数据包(举例来说,出现文本“L2TP”),说明你的设置有问题。 2、在客户端使用nmap或其它更好的端口扫描工具来扫描服务器上开放的端口(用法:nmap –sU 123.123.123.123),你不应该能看到L2TP守护进程(UDP 1701),打开的端口应该只有IKE(UDP 500)和随意的UDP端口,比如4500(NAT-T)。 18 对L2TP/IPsec的一些评论 在第一次测试期间,我忘了在Windows工作站的TCP/IP配置里输入默认网关和主机名,对于Linux服务器在本地网络来说真的不是一个问题,可是当我从Windows客户端向Linux服务器发起一个连接时,l2tpd在/var/log/message里提示一个有点模糊的错误信息 “Specify you hostname”,最初我想大概是l2tpd不能探测到正在运行的Linux服务器的主机名,我在Windows工作站里输入主机名后这个问题解决了,我只是简单地认为l2tpd不需要它。 19 NAT-Traversal 19.1 绪论 在客户端和IPsec服务器之间有时需要网络地址转换(NAT:Network Address Translation)。比如:当用户把他所有的计算机联网并通过一个NAT路由器共享上互联网。还有一种情况是VPN服务器自己位于NAT设备(UDP 500、4500传送到VPN服务器)之后。甚至在有些情况下客户端和服务器都位于NAT之后。有些ISP也使用在他们的路由器上使用NAT,我们看到许多GPRS服务商使用NAT,比如,他们给GPRS电话分配10.x.x.x或192.168.x.x地址。 NAT将在数据包穿过时改变它。问题是VPN会设法防止数据包改变。一些NAT设备支持“IPsec passthrough”,允许一次一个用户的IPsec通过,相同的NAT设备后的不允许多个连接的用户。 如果同L2TP/IPsec一起使用NAT-T,考虑到是实验性的并且不安全。Linux kernel 2.6包含的一个不同的IPsec执行者(“26sec”)也支持NAT-T。显然它也有与Openswan等的NAT-T补丁相同的安全问题。26sec执行者支持KAME用户态程序(多数发行版的ipsec-tools)也支持Openswan/Strongswan/FreeS/WAN 2.x。切换到ipsec-tools并不能改变安全问题。 19.2 局限性和需求 NAT-T支持26sec(推荐kernel 2.6.6及以上),最新的发行版如Fedora Core2+、 Debian unstable、Mandrake 10.0+、SuSE 9.1+使用了带26sec的内核,支持NAT-T。如果你在内核中使用 KLIPS代替26sec,你需要Mathieu Lafon的NAT-Traversal补丁(http://open- source.arkoon.net/)。注:根据Mathieu,NAT-T在传输模式(Transport Mode)可能不安全。微软、SSH、 SafeNet不支持NAT-T,但他大概会对非安全工作区拿出一个方案。老版的Red HAT、Mandrake、SuSE内核没有包含KLIPS的 NAT-T补丁,对于这些版,你将需要重新编译内核,因为NAT-T补丁涉及到了内核的TCP/IP部分。如果你用的是FreeS/WAN用户态工具,你还要打这个补丁。Openswan和Strongswan已经包含了这个补丁。打过补丁后的FreeS/WAN在Makefile明确启用了传送模式下 NAT-T。Openswan和Strongswan已经支持传送模式下NA-T。 Openswan的NAT-T支持对26sec和KLIPS都有效,在配置文件ipsec.conf中添加“nat_traversal=yes”即可,客户端不在NAT后面不受影响,客户端的任何程序都仍将正常工作。 KLIPS的NAT-T补丁目前不支持使用“预共享密钥”认证的连接。如果你在KILPS和NAT-T使用了“预共享密钥”,Openswan将不允许连接,因为发送者的端口不是500,并且NAT-T补丁不能支持它,这应该引起程序员的注意。“预共享密钥”有一些缺点,因此你应该使用证书。 26sec执行者支持“预共享密钥”,但你将不得不使用right=%any、leftid=和rightid=。如果你用right=a.b.c.d指定了一个IP地址,但没有left=和right=,Openswan会提示“no connection authorized”。 上一篇:让Linux NAT服务器支持UPnP 下一篇:利用IP 别名托管多个SSL 站点 更多相关文章
|
推荐文章
精彩文章
|