在DD-WRT上配置PPTP客户端的过程,记录一下,别问我为什么要干这个,我是为了跳过长城。该文章在小日本寄来的FC2免费路由器(对应型号:Buffalo WHR-G301N)上测试成功,刷的是2014.12.22号的DD-WRT版本。
建议将DD-WRT升级至最新版,本文基于DD-WRT v24-sp2 (12/22/14) std版本配置成功。先前找个一个2013.11.20号版本的DD-WRT,结果总是配置失败,于是将DD-WRT升级至最新版,竟然一次成功。
1,将DDW-RT的防火墙和DMZ功能关闭
点击”Security”-“Firewall”,将”SPI Firewall”设置为”Disable”;
点击”NAT/QoS”-“DMZ”,将”use DMZ”设置为”Disable”;
点击”Services”-“Services”,将”SSHd”、”SSH TCP Forwarding”、”Password Login”全都设置为”Enable”
2,配置PPTP客户端
点击”Services”-“VPN”,找到”PPTP Client”,对其进行如下设置:
其中,”MPPE Encryption”需要填写成”mppe required,no40,no56,stateless”,然后点击”Save”
3,配置开机自启动
点击”Administration”-“Commands”,将如下代码帖至”Commands”框内:
sleep 90
OLDGW=$(nvram get wan_gateway)
VPNSRV=$(nvram get pptpd_client_srvip)
VPNSRVSUB=$(nvram get pptpd_client_srvsub)
PPTPDEV=$(route -n | grep ^${VPNSRVSUB%.[0-9]*} | awk '{print $NF}' | head -n 1)
VPNGW=$(ifconfig $PPTPDEV | grep -Eo "P-t-P:([0-9.]+)" | cut -d: -f2)
route add -host $VPNSRV gw $OLDGW
route del default gw $OLDGW
route add default gw $VPNGW
ip route add 8.8.8.8 via $VPNGW
ip route add 8.8.4.4 via $VPNGW
然后点击下方的”Save Startup”
4,检测设置成功与否
在上一步的”Commands”页面,在下方的”Commands”框内输入reboot,然后点击下方的”Run Commands”,此时路由器会重启。
使用SSH连接上路由器,输入ps | grep pptp命令并回车,如果能看到如下进程,说明VPN已配置成功:
有的DD-WRT版本不太稳定,SSH如果连接不上,可以将本地的SSH客户端(例如Xshell等)的登陆协议改为Telnet就可以登陆了。
补充说明:
1,第一次设置完成后,我并没有重启,导致笔记本地连接无线的时候提示连接到网络的时间超过了正常的时间,手机上也显示“正在分配IP地址”,但一直无法连接上。于是我找到”Setup”-“Basic Setup”,将”Use DNSMasq for DHCP”、”Use DNSMasq for DNS”全部取消(不启用),重启以后发现笔记本、手机均可以正常连接了。
2,经测试,在设置PPTP客户端时,MTU和MRU无须作特殊修改,保持默认的1450依然可以正常连接。
===================================
2015.02.04补充:
又换了一个路由器,刷了很多个版本的DD-WRT,用此方法,均不能成功连接。由此可见,DD-WRT非常不稳定,不建议新手使用。新手们还是去折腾Open-Wrt吧。
解决某些DD-WRT版本PPTP客户端拔号不正常的办法
在WEB界面,打开JFFS支持(详细介绍可以参考这篇文章):
点击”Administration”-“Management”-“JFFS2 Support”,勾选下方的”JFFS2″,不要勾选“Clean JFFS2″。然后”Save”,并且”Apply Settings”(即一定要重启,否则路由器上的/jffs分区不可写);
然后再参考这篇文章。
补上一个DD-WRT永久修改MAC的方法:
nvram set wan_hwaddr=08:10:76:23:8B:1A
nvram set lan_hwaddr=08:10:76:23:8B:1C
nvram set et0macaddr=08:10:76:23:8B:1C
nvram set et0macaddr_safe=08:10:76:23:8B:1C
nvram commit #等待10秒再运行下一条
reboot