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

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

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

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

准备

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

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

从ddwrt刷openwrt固件

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

刷好之后路由器会自动重启,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两行就行。

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。
如果配好的话,结果应该是这样:

如果这一段你看不懂的话,可以瞧瞧这篇文章。虽然文章中是用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连接上之后,输入firstboot也可以,但我也只重置过一次,无法验证。

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

配置pptp

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

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

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问题也不大。由于自己是个小白,所以花了蛮长时间理解和尝试上面的配置,讲得也可能罗嗦一点,不过还是希望对各位有用。