我目前使用的是网通线路,网通与电信之间的距离堪比天涯海角。正巧有一台H3C 路由器同时接了网通和电信的线路,所以打算在这个设备上配置VPN,
使我可以顺畅访问电信网络内部的资源。这台设备型号是H3C MSR 5006,支持L2TP/IPSEC VPN ,不支持PPTP.
我的笔记本跑的是CentOS 6.0, 在Linux上面的L2TP VPN客户端不是很多,GOOGLE了一下觉得xl2tpd + pppd + 密码验证 这个方法实现比较简单,
就朝这条路走下去吧,使用xl2tpd + pppd 做客户端连接 H3C MSR 5006 的 L2TP VPN。
路由器上的配置挺容易,与做Windows客户端连接L2TP VPN的方法一样,贴一段配置,如下:
<msr5006>dis cur
#
version 5.20, Release 2104P02
#
sysname msr5006
#
l2tp enable
#
firewall enable
#
domain default enable system
#
dns resolve
dns server 221.6.4.66
dns server 202.102.3.141
#
telnet server enable
#
ip ttl-expires enable
ip unreachables enable
#
dar p2p signature-file flash:/p2p_default.mtd
#
acl number 3001
rule 5 permit ip source 10.58.1.0 0.0.0.255
rule 100 deny ip
#
vlan 1
#
domain system
access-limit disable
state active
idle-cut disable
self-service-url disable
ip pool 1 10.58.1.2 10.58.1.254 #L2TP客户端地址范围
#
user-group system
#
local-user miaotian
password cipher -YSLT1^M6PGQ=^Q`MAF4<1!!
authorization-attribute level 3
service-type ssh telnet
service-type ppp
#
cwmp
undo cwmp enable
#
l2tp-group 1
undo tunnel authentication
mandatory-lcp
allow l2tp virtual-template 0
#
interface Virtual-Template0
ppp authentication-mode pap
remote address pool 1 #L2TP客户端地址使用地址池1
ip address 10.58.1.1 255.255.255.0 #L2TP虚接口地址
#
interface NULL0
#
interface GigabitEthernet0/0
port link-mode route
description link-wan
nat outbound 3001 #从网通网关NAT出
ip address 58.1.1.2 255.255.255.252
ipsec no-nat-process enable
#
interface GigabitEthernet0/1
port link-mode route
ip address 20.1.1.2 255.255.255.252
#
interface GigabitEthernet0/2
port link-mode route
nat outbound 3001 #从电信网关NAT出
ip address 10.218.1.254 255.255.255.0
#
ip route-static 0.0.0.0 0.0.0.0 10.218.1.1 #电信网关
ip route-static 58.0.0.0 255.0.0.0 58.1.1.1 #网通网关
ip route-static 10.0.0.0 255.0.0.0 20.1.1.1 #内部其他网络
#
dhcp enable
#
load xml-configuration
#
load tr069-configuration
#
user-interface con 0
user-interface aux 0
user-interface vty 0 4
authentication-mode scheme
#
return
<msr5006>
使用Windows 自带的客户端,在注册表里禁用IPSEC,重启系统后连接测试成功。正确获得客户端地址10.58.1.x。证明上述配置已经OK。
在笔记本上,用yum安装xl2tpd ,pppd 等做L2TP所必要的包。 CentOS 6上加入EPEL 的YUM源 (可以自己写repo文件,也可以从 http://fedoraproject.org/wiki/EPEL这里下载RPM包直接安装).
修改xl2tpd及pppd的配置文件,可以基本参考 http://nanjingabcdefg.is-programmer.com/posts/25458.html 这篇文章内容。根据实际环境写一个LAC段。
OK,编辑完以后 echo 'c utvpn' > /var/run/xl2tpd/l2tp-control 测试了一下。 VPN 可以正确连接, 虚拟网卡ppp0也出来了, 但是ppp0获得的地址并非
像windows那样正确获得从VPN 地址池里分配的地址,而是把笔记本的wlan0地址配进了ppp0.
tail /var/log/message 发现,pppd获得的remote ip 正确,为10.58.1.1。 local ip 为 wlan0 的 ip.
在笔记本上telnet 路由器的虚接口地址也可以登录。现在,仅是想实现网通进电信出已经实现了。而我还想访问内网资源。。。也就是10.0.0.0/8里面的内容
这就麻烦了,得每次在不同的地方上网以后根据当前wlan0获得的出口地址在20.1.1.1上加路由,要么就是得让我获得10.58.1.0/24这个子网的地址。
我的google功底还不够,没go到解决方法,不过go到了一些挺有用的资料---pppd的参数是由xl2tpd送的。 man 了一下xl2tpd.conf ,里面有一个关于local ip的描述:
local ip Use the following IP as xl2tpd’s own ip address.
如果给xl2ptd设置了local ip参数,让xl2tpd把这个送给pppd,那么pppd产生的ppp0地址就会变为我想要的地址了。
[root@TMiao ~]# cat /etc/xl2tpd/utvpn.options
[global]
access control = no
port = 1701
[lac utvpn]
name = tmiao
lns = 58.1.1.1
pppoptfile = /etc/ppp/peers/utvpn.xl2tpd
ppp debug = yes
require pap = yes
local ip = 10.58.1.2 #要的就是这个子网的地址~
remote ip = 10.58.1.1
保存上面的修改,重启xl2tpd服务。在echo 'c utvpn' > /var/............
现在在看看日志:
[root@TMiao ~]# tail /var/log/messages
Aug 25 22:27:24 TMiao xl2tpd[3953]: Calling on tunnel 48668
Aug 25 22:27:24 TMiao xl2tpd[3953]: Call established with 58.1.1.1, Local: 59409, Remote: 32453, Serial: 2 (ref=0/0)
Aug 25 22:27:24 TMiao pppd[4270]: pppd 2.4.5 started by tmiao, uid 0
Aug 25 22:27:24 TMiao pppd[4270]: Using interface ppp0
Aug 25 22:27:24 TMiao pppd[4270]: Connect: ppp0 <--> /dev/pts/1
Aug 25 22:27:27 TMiao pppd[4270]: Remote message: Welcome to use this device.
Aug 25 22:27:27 TMiao pppd[4270]: PAP authentication succeeded
Aug 25 22:27:27 TMiao pppd[4270]: Unsupported protocol 'OSI Network Layer Control Protocol' (0x8023) received
Aug 25 22:27:27 TMiao pppd[4270]: local IP address 10.58.1.2
Aug 25 22:27:27 TMiao pppd[4270]: remote IP address 10.58.1.1
[root@TMiao ~]# ifconfig ppp0
ppp0 Link encap:Point-to-Point Protocol
inet addr:10.58.1.2 P-t-P:10.58.1.1 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:205 (205.0 b) TX bytes:204 (204.0 b)
搞定收工!就这样凑合凑合吧。。好歹这个地址可以路由了。
差点忘了,把路由器上的地址池范围修改一下
domain system
access-limit disable
state active
idle-cut disable
self-service-url disable
ip pool 1 10.58.1.3 10.58.1.254 #L2TP客户端地址范围
这里我不清楚是否一定要把当前地址从地址池里抠掉,还是路由器会自动完成这件事情。安全第一,还是抠掉吧。
整理一下,最后的配置文件:
[root@TMiao ~]# cat /etc/xl2tpd/utvpn.options
[global]
access control = no
port = 1701
[lac utvpn]
name = tmiao
lns = 58.1.1.1
pppoptfile = /etc/ppp/peers/utvpn.xl2tpd
ppp debug = yes
require pap = yes
local ip = 10.58.1.2
remote ip = 10.58.1.1
[root@TMiao ~]# cat /etc/ppp/peers/utvpn.xl2tpd
ipcp-accept-local
ipcp-accept-remote
remotename utvpn
user "tmiao"
password "holdzhu"
unit 0
lock
nodeflate
nobsdcomp
noauth
persist
nopcomp
noaccomp
maxfail 5
debug
使用不同虚拟地接口可以解决客户获得特定ip