月光博客 » 软件应用 » OpenWRT 路由配置技巧

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='yougotthisfromyour@isp.su'
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,效果如图:

OpenWRT 路由配置技巧    

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

OpenWRT 路由配置技巧 

    

  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 ,效果应该类似这样:

root@FC_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 连接状态的时间。

root@FC_R0:/tmp# ls vpn*
vpn_oldgw vpn_status_check.log
root@FC_R0:
/tmp# cat vpn_status_check.log
Tue Jul
15 00:04:02 HKT 2014
root@FC_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,原文链接

顶一下 ▲()   踩一下 ▼()

相关文章

  1. 1
    Neko   说道:
    OpenWRT对新手很不友好,从本文的配置说明就能看出来,推荐新手用tomato,大部分已经配置好了,而且也能装OpenWRT的ipk包。
    纽约客 于 2014-7-18 1:27:38 回复
    何止不友好,简直就是在虐新手的心
    支持(40反对(20回复
  1. 2
    Sonic853   说道:
    只可惜家里的路由器不支持啊。。。。
    支持(43反对(25回复
  1. 3
    __syj   说道:
    标记,要是有现成的就好了
    支持(39反对(25回复
  1. 4
    王靖锋Eric   说道:
    哪天网络开放了,科学上网的那些日子将成为中国网民一段美好的回忆。
    ooxx 于 2014-7-20 10:03:17 回复
    等不到这一天了
    Jasonlee 于 2014-7-25 21:41:11 回复
    谷歌貌似于7月25日晚服务全线恢复,目前谷歌+,完整版GP,youtube均可无障碍访问,谷歌主页默认跳转进谷歌荷兰!!!!!!!!!!能持续多久还不清楚!
    支持(42反对(29回复
  1. 5
    mercury   说道:
    有没有tomato的教程?
    支持(31反对(22回复
  1. 6
    jaywhualone   说道:
    首先你得买一个VPN
    支持(34反对(25回复
  1. 7
    westonfw   说道:
    我家是买了个树莓派刷的
    支持(31反对(22回复
  1. 8
    影君子Moviegoer   说道:
    又要变成众人皆知的秘密了
    支持(36反对(27回复
  1. 9
    大蘑菇   说道:
    哭!!不要这样好不好?我只是想看个新闻,非要去读个计算机本科才行?
    支持(39反对(30回复
  1. 10
    吴祖华_   说道:
    在大陆上网没有个 VPN 都不自在。
    支持(35反对(27回复
  1. 11
    天晴   说道:
    这个应该也可以直接在tomato里加入这个规则吧,用tomato的人多啊
    支持(32反对(24回复
  1. 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连很爽。。
    支持(32反对(26回复
  1. 13
    Con30   说道:
    这是作死的节奏啊!
    支持(31反对(27回复
  1. 14
    Malcolm_Makun   说道:
    上次给我刷哭了,4M空间不足…
    支持(29反对(25回复
  1. 15
    lehui99   说道:
    已经有卖成品的: ship.fslk.net
    lehui99 于 2014-7-18 15:57:39 回复
    网址错了,应该是 shop.fslk.net
    支持(30反对(26回复
  1. 16
    WoongNing   说道:
    我只有vpn账户名和密码,可以用openwrt吗?之前用ddwrt试过 不可以
    fan墙要注意安全 于 2014-7-18 9:20:05 回复
    ip都没有,你是怎么拨vpn的?
    支持(32反对(29回复
  1. 17
    ji   说道:
    极路由pptp l2tp有个智能模式
    支持(34反对(31回复
  1. 18
    死神的微笑   说道:
    Mark,准备买路由器了。。
    支持(31反对(28回复
  1. 19
    lucktu   说道:
    好!不错的新鲜好文章,正是我要的Openwrt的VPN。
    谢谢!!
    支持(17反对(14回复
  1. 20
    fan墙要注意安全   说道:
    pptp 扶墙,大家小心在墙上被抓住啊
    支持(32反对(30回复
  1. 21
    柯二来了粤经   说道:
    求介绍一个免费的比较好用的vpn
    支持(30反对(28回复
  1. 22
    写代码的厨子   说道:
    以后VPN会不会也被封啊
    支持(38反对(37回复
  1. 23
    Demo   说道:
    这个方法最大的问题是访问国内网站时dns很可能把电信解析到联通,联通解析到电信,造成访问缓慢,仍然不是完美方案
    FatLYZ 于 2014-7-27 12:21:54 回复
    的确还不是完美方案
    但国内dns有污染问题,
    如果想要通过域名来判断的话必须维持一个被禁域名列表,也不省心
    支持(29反对(28回复
  1. 24
    最终混合体   说道:
    等入手极路由的产品后试试。
    支持(28反对(27回复
  1. 25
    酷特猫网   说道:
    恩查看 vpn_status_check.log 文件,可以看到最近一次检测 VPN 连接状态的时间。
    lehui99 于 2014-7-18 15:55:57 回复
    网址错了,是 shop.fslk.net
    支持(27反对(26回复
  1. 26
    lincan   说道:
    不错,好东西,好强大,学习啊,openwrt不错,很好,我喜欢。
    支持(22反对(21回复
  1. 27
      说道:
    现在都ttl直接刷breed了。刷集成luci .shadowsocks的。
    支持(1反对(0回复
  1. 28
    江南曹妈   说道:
    还没试,不知道是否能稳定长久的翻墙
    支持(32反对(32回复
  1. 29
    antren   说道:
    按照教程成功连接上,但是透明代理设置死活不成功,有没有更简单一些的方法设置透明代理的?
    支持(2反对(2回复
  1. 30
    antren   说道:
    没办法,手里的ss都用完了,只有pptp的了,明年才到期,希望博主更新一下chndns更简单一些的设置方法。我这边全局ok。最好是pandora固件的教程
    支持(1反对(1回复
  1. 31
    扑街范例   说道:
    这方法好啊,收了!
    支持(30反对(31回复
  1. 32
    unhappydepig   说道:
    这个我觉得太变态了 有点麻烦
    支持(26反对(27回复
  1. 33
    Caesar   说道:
    请教一下,,我外网ip是172.30.1.x,想要在同网段其他ip上访问路由器 该怎么实现? 谢谢
    支持(0反对(1回复
  1. 34
    羽天成   说道:
    不是可以访问Google 和Facebook 了嘛

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

发表留言