终于完成了路由器(openwrt)上pptp客户端的设置


在路由器上设置pptp的初衷是为了解决类似3DS等不能设置VPN,所以必须同过带VPN的路由器或者代理等方式设置。如何使用代理设置以前有讲过,这里讲带VPN的路由器。

带VPN的路由器一般指的是用ddwrt或者openwrt刷过固件的路由器,我的路由器是tl-wr841n v7.1,ddwrt和openwrt都支持。

一开始我刷了ddwrt,虽然能够上网了,但是pptp死活连接不上。在放置了一段时间之后,看到还有openwrt,就想刷openwrt试试。

准备

之前我刷ddwrt的时候,比较简单,一台机器连接路由器。实际操作中发现出现的问题要查资料一台机器操作起来比较麻烦,所以这次改成两台机器,一台连接路由器,一台直接连接原先的网络。
这里有必要说明一下自己网络的部署。

top router(wireless disabled)
|                          |
|                          |
|                          |
tl-wr841n(vpn)             tl-wn851n(backup)

top router就是电信提供的那个路由器,无线功能被我关掉了,网关地址192.168.1.1。tl-wr841n就是本次要刷的路由器。tl-wn851n是我买了备用的,以防tl-wr841n被刷成砖。两个tp-link的路由器都支持无线。但是刷机的时候最好不要用无线,所以tl-wr841n通过网线和我操作用的笔记本连接,查资料用的台式机通过无线和tl-wn851n连接。
刷机时tl-wr841n的WAN口连接top router,LAN口连接我的笔记本。

top router
|
|
|
(WAN) 
tl-wr841n
(LAN)
|
|
|
laptop

从ddwrt刷openwrt固件

openwrt固件我是从这里下的,其他型号的可以从这里查一查。
因为我先前刷过ddwrt,所以和一般刷openwrt不同,是从ddwrt刷openwrt固件,所以参照了这篇文章。实际操作可能有点不同,我并没有用ssh登录ddwrt,而是用telnet,ssh我之前一直没成功过。telnet之后,执行以下命令:

cd /tmp
# download firmware for my router
wget 'http://downloads.openwrt.org/attitude_adjustment/12.09/ar71xx/generic/openwrt-ar71xx-generic-tl-wr841nd-v7-squashfs-factory.bin'
mtd erase nvram
mtd -r write openwrt-ar71xx-generic-tl-wr841nd-v7-squashfs-factory.bin linux 

刷好之后路由器会自动重启,openwrt的web界面入口是192.168.1.1,注意不要和top router的网关混淆。
顺便说一句,重启之后openwrt默认是不会开启wireless的,所以这也是为什么你不能通过无线连接openwrt的另外一个原因。个人认为这是一个很好的约定,防止别人在你配置过程中连上你的路由器。

配置二级路由器

我刷完openwrt的固件之后,通过openwrt的web界面192.168.1.1登录,设置好root密码(默认是admin,重置的话是空)之后,你就可以通过ssh root@192.168.1.1登录openwrt了。配置网络我并不是在web界面做的,而是直接修改配置文件的。

因为tl-wr841n是在top router后面,首先不是PPPoE的配置,那就有二级路由器,纯AP和类交换机配置,这里我选择二级路由器,因为tl-wn851n也是这么配的,如果有问题可以对比一下。
原先在ddwrt的web界面上配置网络的时候死活搞不明白,但是很神奇的是这一次看了openwrt的配置文件豁然开朗,实际只改/etc/config/network两行就行。

config interface 'lan'
        option ifname 'eth0'
        option type 'bridge'
        option proto 'static'
        option ipaddr '192.168.3.1'
        option netmask '255.255.255.0'

config interface 'wan'
        option ifname 'eth1'
        option proto 'dhcp'
        option gateway '192.168.1.1'

lan原先的ipaddr为192.168.1.1,这里改成192.168.3.1方便区分(实际上我的tl-wn851n的web界面地址为192.168.2.1),wan的配置gateway是可选配置,这里显示地设置为top router的网关地址,即192.168.1.1。
如果配好的话,结果应该是这样:

top router(192.168.1.1)
|
|
|
tl-wr841n(192.168.3.1)
|
|
|
laptop(192.168.3.x)

如果这一段你看不懂的话,可以瞧瞧这篇文章。虽然文章中是用uci配置的话,但是修改的就是/etc/config/network这个文件(可以用vi)。假如你配置成功了再来看openwrt的关于网络配置的wiki,基本上就能看懂了。

修改完网络配置之后,输入/etc/init.d/network restart重启网络。因为从192.168.1.1变成了192.168.3.1,ssh窗口应该是卡住状态。稍微等一会儿断掉你的当前网络连接,重新连接,这时你获取的IP应该从192.168.1.x变成192.168.3.x。同时你ping一些外部网络,比如ping 8.8.8.8理论上可以通了,也就是说openwrt可以访问外网了。

到这里,我也没有那种一次就成功的运气,配置网络阶段就很有可能失败,所以必须提如何重置openwrt。

重置openwrt

可以看看这篇
说下我的实际操作:

设置一个名字为OpenWrt Failsafe的网络连接(我的笔记本是ubuntu,新建一个有线连接即可),默认肯定有一个Auto eth0或者说是有线连接DHCP的网络配置。OpenWrt Failsafe的IP地址为192.168.1.2,子网掩码为255.255.255.0,网关为192.168.1.1(不要和top router的网关混淆)。
关闭路由器电源,启动路由器,等待电源灯第一次亮起,亮起后按下reset键,这时电源等会狂闪。使用OpenWrt Failsafe连接路由器,

telnet 192.168.1.1
mount_root
mtd -r erase rootfs_data

理论上telnet连接上之后,输入firstboot也可以,但我也只重置过一次,无法验证。

重置好之后继续用Auto eth0或者说DHCP连接openwrt。

配置pptp

原先我是参照这个教程想要通过配置文件连接PPTP的,但是发现找不到防火墙配置,而且web界面上出现了奇怪的newzone之类的东西,最后没有办法,在这里重置了配置,老老实实通过web界面配置。

不过opkg还是可以通过ssh操作的,这个比web界面要好一些。

opkg update
opkg install ppp-mod-pptp

opkg应该是openwrt package的缩写吧,linux用多了,各种包管理器也见多了,但是没想到路由器上也有……

接下来都是web界面上操作,参照这篇文章
简单来说就是三步:

  1. 配置名字,协议(PPTP)
  2. 配置PPTP相关信息,这里遇到了一个问题,服务器地址可能不能用域名,我后来用的IP地址,实际建议在openwrt上用nslookup pptp_server确认下
  3. 最重要的一步,设置防火墙,选择WAN,否则PPTP出不去

最后save and apply。设置好之后,可能要稍等一会儿,因为PPTP连接可能一次连接不成功,需要重试。连接上之后,ssh上openwrt,你可以看到ifconfig多了一个pptp的虚拟网卡,同时route -n把这个网卡作为默认出口了。
接下来你可以在线查IP的网站或者像我一下mtr 8.8.8.8的方式看路径,通过PPTP和不通过时的mtr路径是不同的。

连接的诊断

个人主要是两种方法:

查看web界面上interfaces界面的vpn连接状态,pptp是作为一个interface被管理的,和lan和wan一起,这一点个人觉得比ddwrt要好,ddwrt必须telnet上去查看ps才行。
查看日志。web界面上可以一看,不过ssh上去之后logread | grep vpn更好一些,直接过滤掉不需要的信息。

第二种方法是对比。因为我实际PPTP连接没问题。之前我的问题在于防火墙配置,所以这里只是提一下对比怎么做。
对比通过openwrt连接PPTP和通过非openwrt(比如我的tl-wn851n)连PPTP
对比通过openwrt的PPTP协议连接和没有PPTP时用电脑连接PPTP
对比不同防火墙规则下的PPTP连接

结语

至此,纠结了我一个多月的路由器VPN问题基本解决,虽然中间因为ddwrt死活连接不上pptp耗费了好长时间。理论上还可以加个路由表,不过考虑到基本都是给3DS等没有VPN功能的机器用的,所以全VPN问题也不大。由于自己是个小白,所以花了蛮长时间理解和尝试上面的配置,讲得也可能罗嗦一点,不过还是希望对各位有用。

,