青青子衿, 悠悠我心, 但为君故, 沉吟至今
« Google和Adobe合作开发开源字体阿里巴巴称正遭遇有组织的舆论敲诈 »

OpenWRT 路由配置技巧

  随着最近 Google 在国内已经完全无法访问,使得通过 VPN 访问网络的需求更加强烈,本文介绍的方法可以使一个普通的路由具备稳定连接 VPN 的能力,并能够根据目标访问网站选择国内外线路,从而得到一个既没有限制,也不会影响速度的 Wifi 环境,连接到这个网络的设备不需要任何配置即可安全上网,完全感觉不到任何不便。

  chnroutes 路由表

  这个路由表集中了所有分配到中国大陆的 IP 段,根据 http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest 每天自动更新,可使得在访问国内地址时不经过 VPN。

  想想如果能够让家里的路由直接连接 VPN,在家连接 WiFi 的所有设备直接达到Fan墙的效果,应该很 Cool,所以最近在某宝整了一个 Netgear WNDR3800 二手路由回来,先后分别在 DD-WRT 和 OpenWRT 成功配置 VPN + chnroutes,最后还是选择了 OpenWRT。

  DD-WRT vs OpenWRT

  关于 DD-WRT 和 OpenWRT,我选择 OpenWRT 主要因为 DD-WRT ROM 中集成的软件太多,绝大多数用不到,要配置 jffs2 来保存脚本文件,一般配置则保存在nvram中,而且无线较不稳定,5G频段常搜索不到(当然可能是我这个路由器型号的支持问题)。OpenWRT 的配置文件语法统一,配置都存储在文件系统中,且 ROM 本身仅集成了必备组件,非常小,可以只安装需要的东西,WEB管理界面也是可选安装,简洁强大,经过若干天的使用一直比较稳定。

 

  配置

  已配置好 OpenWRT 上网的童鞋们可以直接跳过 1.刷 ROM2.初始配置

  1.刷 ROM

  a.首先确定你的设备可以被 OpenWRT 所支持(到这里查看支持的设备列表:http://wiki.openwrt.org/toh/start),然后到这里下载编译好的 ROM:http://downloads.openwrt.org/ 。最新的 stable 版本是 attitude_adjustment(12.09),我下载的是 trunk 版本。

  b.在 OpenWRT 官网找相应设备的 Wiki 页面查看刷机方法,一般都是在路由器官方Web固件升级页面直接刷入(我的 WNDR3800 Wiki页面是:http://wiki.openwrt.org/toh/netgear/wndr3800)

  2.初始配置

  a.路由器启动后,有的型号没有安装 Wifi 模块,需要先用网线连接到 LAN 口,本机 IP 配置为静态 192.168.1.x,然后 telnet 到 192.168.1.1,更改 root 密码,然后 ssh 连入,参考:http://wiki.openwrt.org/doc/start#configuring.openwrt

OpenWRT 路由配置 PPTP VPN + 断线自动重连 + chnroutes国内路由表

  b.配置 WAN 口,让路由连上 Internet,参考:http://wiki.openwrt.org/doc/howto/internet.connection 。

  比如要配置 PPPoE:

uci set network.wan.proto=pppoe
uci set network.wan.username='[email protected]'
uci set network.wan.password='yourpassword'
uci commit network
ifup wan

 
  c.安装 LuCI Web 管理界面并设置开机自动启动,参考:http://wiki.openwrt.org/doc/howto/luci.essentials

opkg update
opkg install luci
/etc/init.d/uhttpd start
/etc/init.d/uhttpd enable

 
  d.浏览器输入路由器 LAN 侧 IP(多为192.168.1.1),进行 Wifi 等配置

OpenWRT 路由配置 PPTP VPN + 断线自动重连 + chnroutes国内路由表

OpenWRT 路由配置 PPTP VPN + 断线自动重连 + chnroutes国内路由表

  3.配置 DNS

  a.创建 /etc/config/sec_resolv.conf

vim /etc/config/sec_resolv.conf

  填入以下 DNS Servers:

nameserver 8.8.8.8
nameserver
8.8.4.4
nameserver
208.67.222.222


  b.编辑 /etc/config/dhcp

vim /etc/config/dhcp

  找到 option resolvfile 选项,替换为:

option resolvfile '/etc/config/sec_resolv.conf'
  4.配置 PPTP

  a.安装 ppp-mod-pptp

opkg updateopkg install ppp-mod-pptp

  
  如果需要 LuCI 支持(推荐):

opkg install luci-proto-ppp

  
  b.配置 vpn 接口,编辑 /etc/config/network 文件,应该已经有以下内容(如果没有,需要插入),并配置里面的 server、username 和 password:

config 'interface' 'vpn' 
option
'ifname' 'pptp-vpn'
option
'proto' 'pptp'
option
'username' 'vpnusername'
option
'password' 'vpnpassword'
option
'server' 'vpn.example.org or ipaddress'
option
'buffering' '1'

   
  c.进入 Network -> Firewall ,把 vpn 加入 wan zone,效果如图:

    

  d.进入 Network -> Interfaces ,此时应该已经可以看到 VPN Interface 并可以连接,效果如图:

 

    

  e.此时在本机 traceroute www.google.com,应该能得到类似以下的结果:

FL-MBP:~ fatlyz$ traceroute www.google.com 
traceroute: Warning: www.google.com has multiple addresses; using
74.125.239.113
traceroute to www.google.com (
74.125.239.113), 64 hops max, 52 byte packets
1 fc_r0.lan (192.168.7.1) 2.266 ms 0.999 ms 0.946 ms
2 10.7.0.1 (10.7.0.1) 189.259 ms 187.813 ms 188.368 ms
3 23.92.24.2 (23.92.24.2) 189.847 ms 190.489 ms 188.939 ms
4 10ge7-6.core3.fmt2.he.net (65.49.10.217) 188.508 ms 192.216 ms 202.863 ms
5 10ge10-1.core1.sjc2.he.net (184.105.222.14) 195.695 ms 195.691 ms 284.242 ms
6 72.14.219.161 (72.14.219.161) 189.196 ms 192.287 ms 193.220 ms
7 216.239.49.170 (216.239.49.170) 192.496 ms 188.547 ms 189.881 ms
8 66.249.95.29 (66.249.95.29) 190.125 ms 190.335 ms 190.026 ms
9 nuq05s01-in-f17.1e100.net (74.125.239.113) 189.804 ms 190.556 ms 190.242 ms

  可以看出,其中第二跳是 VPN 的网关,而 traceroute www.baidu.com 的话第二跳应该也是同样的结果。

  这时已经可以访问 Google, Baidu 等国内外的站点了。

  5.配置 chnroutes

  a.到 chnroutes 项目的下载页面:http://chnroutes-dl.appspot.com/ 下载 linux.zip,解压

  b.把 ip-pre-up 重命名为 chnroutes.sh,打开编辑,在 if [ ! -e /tmp/vpn_oldgw ]; then 前插入以下代码,以避免 ppp 连接脚本重复执行导致重复添加路由表项:

if [ $OLDGW == 'x.x.x.x' ]; then    exit 0
fi

  其中 x.x.x.x 是 VPN 的网关,可以先本机连接上去之后查看一下网关地址。

  c.ssh 连接到路由器,执行以下命令:

cd /etc/config/
mkdir pptp-vpn
cd pptp-vpn
vim chnroutes.sh

  在 vim 中把编辑好的 chnroutes.sh 粘贴进去(当然也可以通过 ssh 直接把 chnroutes.sh 文件传过去,或者上传到某个地方再 wget 下载)

  执行以下命令,设置权限为可执行: 

chmod a+x chnroutes.sh

  d.用 vim 编辑 /lib/netifd/ppp-up 文件:

vim /lib/netifd/ppp-up

  在 [ -d /etc/ppp/ip-up.d ] && { 这一行前插入以下内容,确保 ppp 连接脚本能够被执行:

sh /etc/config/pptp-vpn/chnroutes.sh


  e.重启路由,启动好之后,进入 LuCI 查看接口状态,等 WAN 和 VPN 都连接成功后,ssh进去,执行 route -n | head -n 10 ,效果应该类似这样:

[email protected]_R0:/etc/config# route -n | head -n 10 
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.7.0.1 0.0.0.0 UG 0 0 0 pptp-vpn
1.0.1.0 58.111.43.1 255.255.255.0 UG 0 0 0 pppoe-wan
1.0.2.0 58.111.43.1 255.255.254.0 UG 0 0 0 pppoe-wan
1.0.8.0 58.111.43.1 255.255.248.0 UG 0 0 0 pppoe-wan
1.0.32.0 58.111.43.1 255.255.224.0 UG 0 0 0 pppoe-wan
1.1.0.0 58.111.43.1 255.255.255.0 UG 0 0 0 pppoe-wan
1.1.2.0 58.111.43.1 255.255.254.0 UG 0 0 0 pppoe-wan
1.1.4.0 58.111.43.1 255.255.252.0 UG 0 0 0 pppoe-wan

  其中 Destination 为 0.0.0.0 的是默认路由,网关为 VPN 网关,意味着默认流量都经过 VPN,而以下的条目则把目的为国内的网段都指向了 ISP 提供的网关。

  至此 PPTP VPN 和 chnroutes 已经配置完毕。

  6.配置 VPN 断线自动重连

  a.创建 /etc/config/pptp-vpn/status-check.sh:

vim /etc/config/pptp-vpn/status-check.sh

  在 vim 中粘贴以下内容(此脚本检测 VPN 连接状态,并在断线后会断开 WAN 和 VPN 接口,10秒后重新连接 WAN,并在 30 秒后重连 VPN):

#!/bin/sh
if [ -f "/tmp/vpn_status_check.lock" ]
then
exit
0
fi
VPN_CONN
=`ifconfig | grep pptp-vpn`
if [ -z "$VPN_CONN" ]
then
touch /tmp/vpn_status_check.lock
echo WAN_VPN_RECONNECT at: >> /tmp/vpn_status_check_reconn.log
date >> /tmp/vpn_status_check_reconn.log
ifdown vpn
ifdown wan
sleep 10
ifup wan
sleep 30
ifdown vpn
sleep 10
ifup vpn
sleep 40
rm /tmp/vpn_status_check.lock
else
date > /tmp/vpn_status_check.log
fi

  执行以下命令,设置权限为可执行: 

chmod a+x /etc/config/pptp-vpn/status-check.sh

  b.进入LuCI 的 System -> Scheduled Tasks 填入以下内容,并保存:

*/1 * * * * /etc/config/pptp-vpn/status-check.sh

  以上实际上是编辑了 cron 配置,cron 每分钟运行检测 / 重连脚本,重启 cron:

/etc/init.d/cron restart


  c.静待几分钟,查看 /tmp 目录,应该能看到 vpn_oldgw 和 vpn_status_check.log 文件,查看 vpn_status_check.log 文件,可以看到最近一次检测 VPN 连接状态的时间。

[email protected]_R0:/tmp# ls vpn*
vpn_oldgw vpn_status_check.log
[email protected]_R0:
/tmp# cat vpn_status_check.log
Tue Jul
15 00:04:02 HKT 2014
[email protected]_R0:
/tmp#

  你可以在 LuCI 中断开 VPN 接口,在接下来的4-5分钟,观察 WAN 和 VPN 的重连情况。

  d.分别 traceroute www.google.com 和 www.baidu.com ,观察第二跳的地址:

FL-MBP:~ fatlyz$ traceroute www.google.com | head -n 3
traceroute: Warning: www.google.com has multiple addresses; using
74.125.239.115
traceroute to www.google.com (
74.125.239.115), 64 hops max, 52 byte packets
1 fc_r0.lan (192.168.7.1) 2.161 ms 0.912 ms 0.895 ms
2 10.7.0.1 (10.7.0.1) 193.747 ms 187.789 ms 289.744 ms
3 23.92.24.2 (23.92.24.2) 259.323 ms 354.625 ms 408.535 ms
FL-MBP:~ fatlyz$ traceroute www.baidu.com | head -n 3
traceroute to www.a.shifen.com (
180.76.3.151), 64 hops max, 52 byte packets
1 fc_r0.lan (192.168.7.1) 1.190 ms 0.984 ms 0.731 ms
2 58.111.43.1 (58.111.43.1) 20.616 ms 38.822 ms 18.484 ms
3 183.56.35.133 (183.56.35.133) 20.056 ms 52.353 ms 87.841 ms

  可以看出,已成功对国内外的目标地址进行了路由选择。

  至此,OpenWRT 路由的基本配置、PPTP VPN、chnroutes 和自动重连已经配置完成。

  来源:投稿,作者:FatLYZ,原文链接



  除非注明,月光博客文章均为原创,转载请以链接形式标明本文地址

  本文地址:http://www.williamlong.info/archives/3922.html
  • 文章排行:
  • 1.Neko
  • OpenWRT对新手很不友好,从本文的配置说明就能看出来,推荐新手用tomato,大部分已经配置好了,而且也能装OpenWRT的ipk包。
    纽约客 于 2014-7-18 1:27:38 回复
    何止不友好,简直就是在虐新手的心
  • 2014/7/17 20:28:42   支持(39)反对(20) 回复
  • 2.Sonic853
  • 只可惜家里的路由器不支持啊。。。。
  • 2014/7/24 21:52:43   支持(42)反对(25) 回复
  • 3.__syj
  • 标记,要是有现成的就好了
  • 2014/7/18 8:29:42   支持(38)反对(25) 回复
  • 4.王靖锋Eric
  • 哪天网络开放了,科学上网的那些日子将成为中国网民一段美好的回忆。
    ooxx 于 2014-7-20 10:03:17 回复
    等不到这一天了
    Jasonlee 于 2014-7-25 21:41:11 回复
    谷歌貌似于7月25日晚服务全线恢复,目前谷歌+,完整版GP,youtube均可无障碍访问,谷歌主页默认跳转进谷歌荷兰!!!!!!!!!!能持续多久还不清楚!
  • 2014/7/18 9:40:47   支持(42)反对(29) 回复
  • 7.影君子Moviegoer
  • 又要变成众人皆知的秘密了
  • 2014/7/18 9:13:44   支持(36)反对(27) 回复
  • 8.westonfw
  • 我家是买了个树莓派刷的
  • 2014/7/18 8:35:42   支持(30)反对(22) 回复
  • 9.吴祖华_
  • 在大陆上网没有个 VPN 都不自在。
  • 2014/7/18 9:56:48   支持(35)反对(27) 回复
  • 10.天晴
  • 这个应该也可以直接在tomato里加入这个规则吧,用tomato的人多啊
  • 2014/7/19 23:11:01   支持(32)反对(24) 回复
  • 11.大蘑菇
  • 哭!!不要这样好不好?我只是想看个新闻,非要去读个计算机本科才行?
  • 2014/12/1 15:54:24   支持(37)反对(29) 回复
  • 12.狐狸
  • 我也是NETGEAR 3800,为什么我在DDWRT就从来没能配置成功VPN(PPTP的)呢?网上所有教程看了都没用,求月光大神指点。

    话说DDWRT确实无线信号不太好,OpenWRT的界面实在不友好,可惜3800好像刷不了tomato
    FatLYZ 于 2014-7-17 23:45:25 回复
    3800的dd-wrt刷好就可以直接连vpn,只是配路由表和自动重连稍复杂,推荐openwrt
    tutugreen 于 2015-1-18 14:01:30 回复
    同3800,DDwrt连不上(配置错误?)
    现在用openwrt连很爽。。
  • 2014/7/17 22:03:41   支持(32)反对(26) 回复
  • 14.Malcolm_Makun
  • 上次给我刷哭了,4M空间不足…
  • 2014/7/18 8:51:43   支持(29)反对(25) 回复
  • 15.lehui99
  • 已经有卖成品的: ship.fslk.net
    lehui99 于 2014-7-18 15:57:39 回复
    网址错了,应该是 shop.fslk.net
  • 2014/7/18 15:54:48   支持(30)反对(26) 回复
  • 16.死神的微笑
  • Mark,准备买路由器了。。
  • 2014/7/25 11:40:22   支持(31)反对(27) 回复
  • 17.WoongNing
  • 我只有vpn账户名和密码,可以用openwrt吗?之前用ddwrt试过 不可以
    fan墙要注意安全 于 2014-7-18 9:20:05 回复
    ip都没有,你是怎么拨vpn的?
  • 2014/7/18 9:09:44   支持(32)反对(29) 回复
  • 18.柯二来了粤经
  • 求介绍一个免费的比较好用的vpn
  • 2014/7/18 9:27:46   支持(30)反对(27) 回复
  • 20.lucktu
  • 好!不错的新鲜好文章,正是我要的Openwrt的VPN。
    谢谢!!
  • 2015/8/14 12:36:32   支持(17)反对(14) 回复
  • 21.fan墙要注意安全
  • pptp 扶墙,大家小心在墙上被抓住啊
  • 2014/7/18 9:19:18   支持(32)反对(30) 回复
  • 22.酷特猫网
  • 恩查看 vpn_status_check.log 文件,可以看到最近一次检测 VPN 连接状态的时间。
    lehui99 于 2014-7-18 15:55:57 回复
    网址错了,是 shop.fslk.net
  • 2014/7/18 15:16:17   支持(27)反对(25) 回复
  • 23.写代码的厨子
  • 以后VPN会不会也被封啊
  • 2014/7/18 8:47:43   支持(38)反对(37) 回复
  • 24.Demo
  • 这个方法最大的问题是访问国内网站时dns很可能把电信解析到联通,联通解析到电信,造成访问缓慢,仍然不是完美方案
    FatLYZ 于 2014-7-27 12:21:54 回复
    的确还不是完美方案
    但国内dns有污染问题,
    如果想要通过域名来判断的话必须维持一个被禁域名列表,也不省心
  • 2014/7/18 8:49:53   支持(29)反对(28) 回复
  • 25.最终混合体
  • 等入手极路由的产品后试试。
  • 2014/7/18 9:34:47   支持(28)反对(27) 回复
  • 26.lincan
  • 不错,好东西,好强大,学习啊,openwrt不错,很好,我喜欢。
  • 2014/7/19 22:11:54   支持(22)反对(21) 回复
  • 27.吗
  • 现在都ttl直接刷breed了。刷集成luci .shadowsocks的。
  • 2016/6/9 15:58:03   支持(1)反对(0) 回复
  • 28.江南曹妈
  • 还没试,不知道是否能稳定长久的翻墙
  • 2014/7/18 9:44:47   支持(32)反对(32) 回复
  • 29.antren
  • 没办法,手里的ss都用完了,只有pptp的了,明年才到期,希望博主更新一下chndns更简单一些的设置方法。我这边全局ok。最好是pandora固件的教程
  • 2015/12/9 20:03:29   支持(1)反对(1) 回复
  • 30.Caesar
  • 请教一下,,我外网ip是172.30.1.x,想要在同网段其他ip上访问路由器 该怎么实现? 谢谢
  • 2016/5/13 14:25:48   支持(0)反对(0) 回复
  • 31.1465964562646
  • hello ,
    楼主,你的net用法不对吧,Beikao帝(Http://Www.Beikaodi.Com/word/net.html)中的例句好像不是你这么用的
    time:12:22:42 PM
  • 2016/6/15 12:24:10   支持(0)反对(0) 回复
  • 33.antren
  • 按照教程成功连接上,但是透明代理设置死活不成功,有没有更简单一些的方法设置透明代理的?
  • 2015/12/9 20:01:23   支持(1)反对(2) 回复
  • 34.羽天成
  • 不是可以访问Google 和Facebook 了嘛

    ddnete只有英美荷三个线路呀
  • 2014/7/17 18:24:35   支持(29)反对(31) 回复
  • 36.pairsdoll
  • 有点麻烦,使用极路由则很方便,填写VPN用户名和密码,再连接就可以了。
  • 2014/7/21 16:53:28   支持(29)反对(31) 回复
  • 37.worktimer
  • openwrt 怎么 连 l2tp 呢?
    tutugreen 于 2015-1-18 13:58:09 回复
    安装xl2tpd或openl2tp即可实现。
  • 2014/7/17 20:33:21   支持(29)反对(32) 回复
  • 39.郑昼
  • 看起来有点复杂,不过可以尝试下。
  • 2014/7/18 8:25:42   支持(32)反对(35) 回复
  • 40.用户名正输入
  • 下一个浏览器就可以了,表示一直都在用,从来没有说上不了,
  • 2014/7/18 8:42:43   支持(29)反对(32) 回复
  • 41.unhappydepig
  • 这个我觉得太变态了 有点麻烦
  • 2014/7/18 9:14:48   支持(24)反对(27) 回复
  • 42.Sean---Zhang
  • 直接用天行浏览器不就好了
  • 2014/7/18 9:20:46   支持(23)反对(26) 回复
  • 43.可米Jing
  • 奇怪,特意试了下,手机没使用翻墙软件啊,访问google服务正常,可电脑上连google.com都打不开。
  • 2014/7/18 9:53:48   支持(29)反对(32) 回复
  • 46.沧浪20130126
  • 留着回去其刷路由器玩
  • 2014/7/18 9:03:44   支持(35)反对(40) 回复
  • 47.Matt
  • LZ,命令大法不会用啊,我也是3800,装了luci界面,能介绍一下界面下如何操作嘛。。
    tutugreen 于 2015-1-18 14:05:03 回复
    如果是3800不会配置pptp/l2tp的话,这里有完整fq+下载用固件(没有自动判断国内外IP。)
    度娘云:1qWDMGHm 密码: 2yhm
    在Luci→网络→接口 下 创建新接口,协议选择PPTP或L2TP即可,创建后配置用户名和密码(就像pp拨号一样),连接即可。
  • 2014/8/18 13:02:11   支持(26)反对(32) 回复
  • 49.davylee
  • 这个要整死人的,只适合爱折腾的技术男,已经入手极路由
  • 2014/7/18 9:02:59   支持(31)反对(40) 回复
  • 51.美国人华莱士
  • 你不要误导人买VPN了,直接买VPS,又能放网站又能加N个VPN账号,速度又快,价钱也和单买VPN相当,还不怕VPN监控陷阱。
  • 2014/7/18 8:58:43   支持(25)反对(41) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.