(转)开源OpenWRT知识
原博地址:http://www.thinkingquest.net/article/466
我们都需要使用google提供的搜索,gmail等优质服务。但是由于方墙的存在,使得大家各自搞各自的FQ办法。 其实还有一个不错的办法,那就是在路由器这一层FQ,对路由器用户透明。
我们使用的方案是openwrt系统, shadowsocks,chinadns。 shadowsocks是一个sock代理软件,而chinadns则好像为了解决天朝的dns污染。
这次没有边做边记录,现在是2,3天之后了,凭借一些记忆写下此篇文章,以供参考。
我们这次使用的设备是一台 netgear WNDR4300. 首先需要在openwrt的官网上查路由设备是否支持openwrt系统。 在这里查:http://wiki.openwrt.org/toh/start。 我们的设备没有在列表中,但是没关系,因为我们了解到,WNDR4300和WNDR3700v4几乎是一样的硬件配置,唯一的区别在于3700v4的5g是300Mbps的,4300好像是450Mbps。 下载对应版本的openwrt。在download页面我们发现了一个名为openwrt-ar71xx-nand-wndr4300-ubi-factory.img的文件。 看来虽然4300没有出现在支持设备列表中,但是却存在一个预编译的img文件。 (如果没有预编译好的,就需要下载源代码自己编译了)。
4300的刷机相对简单,不需要进入bootloader,直接登录原生的4300自带的web管理后台,更新固件版本,直接上传img文件,等待一会就可以了。
刷完openwrt之后界面(luci)是英文版的。在它的管理界面里找到更新。更新完成之后在界面中可以设置语言为中文。当然喜欢英文界面的话,这一步就可以省略了。
刷完openwrt,默认路由器是打开了ssh登录的,可以直接ssh到路由器上。 默认也是开启着scp服务的。(注意,这个不是sftp服务。我们 用的是windows上的winscp,在选择协议的地方需要选择scp而不是sftp,否则无法上传文件)。
给路由器插上网线,使它能够上网。(可以是自己拨号也可以是接上一本可以访问公网的网线,因为更新软件源,或者接下来安装软件的时候,如果缺少依赖的包,也会自动下载安装)登录到路由器上,先执行一下:
opkg update
接着我们需要下载shadowsocks,chinadns的安装包,上传到路由器上,安装它们。(如果scp搞不定当然也可以在路由器上wget,一样的)。
去shadowsocks官网http://shadowsocks.org/下载最新版的shadowsocks安装。注意,shadowsocks分为服务器端和客户端两个。 在方墙外的一个vps上安装服务器端,好像服务器端有提供node.js版本等多个版本。 我是下载代码进行编译安装的。 安装过程相对简单,就是autogen.sh, make, make isntall就行了。 安装完成后在/usr/local/bin目录下就拥有了ss-server可执行文件。在服务器上运行:
|
1
|
ss-server -p 9999 -s {server ip} -k fuckgfw |
还有些其他参数,比如增加加密算法之类的:
|
1
|
ss-server -p 9999 -s {server ip} -k fuckgfw -m aes-256-cfb start --fast-open |
服务就运行在9999端口了。其中的{server ip}要替换成真实的ip。 -k参数后边的fuckgfw是密码。(这个貌似是惯例通用密码?)
然后是安装客户端。同样把下载到的shadowsocks客户端安装包shadowsocks-libev-polarssl_1.4.6_ar71xx.ipk上传到路由器上,opkg install 安装它。
安装完成之后,需要写配置文件。在/etc/下建立一个名为shadowsocks.json的配置文件。内容写上:
|
1
2
3
4
5
6
7
8
|
{ "server":"xxx.xxx.xxx.xxx", "server_port":9999, "local_port":1080, "password":"fuckgfw", "timeout":60, "method":null} |
安装完shadowsocks后,可以用可执行命令 ss-local测试一下。 运行:
ss-local -c /etc/shadowsocks.json
有可能会报告一个这样的错误:
ss-local: can’t load library ‘libpolarssl.so.6’
其实在opkg install安装shadowsocks的时候,opkg包管理器会发现shadowsocks依赖于libpolarssl库,是自动下载安装了的。 这个错误只是缺少一个软链接。做上就好:
ln -s /usr/lib/libpolarssl.so.1.3.8 /usr/lib/libpolarssl.so.6
运行ss-local后不报错,系统开始监听1080端口。 这样就验证了shadowsocks是正常工作的。 此时应该可以在本地浏览器上设置socks5代理, 路由器的ip,端口1080。
chinadns的项目地址是https://github.com/clowwindy/ChinaDNS-C。根据自己的平台下载,我们的是AR71xx,有预编译好的,我就直接下载了ChinaDNS-C_1.1.7_ar71xx.ipk。没有对应二进制版本的话就需要下载源码自行编译了。
上传到路由器上,opkg install ChinaDNS-C_1.1.7_ar71xx.ipk安装。
装完之后,根据chinadns官网上针对openwrt用户所写的建议。 建议使chinadns成为dnsmasq的一个upstream server,而不是直接使用chinadns。修改的办法按照官网缩写就可以。具体是:
1. 编辑/etc/init.d/chinadns这个文件,删除两行包含iptables命令的语句。
2. 编辑/etc/dnsmasq.conf这个文件,只使用127.0.0.1#5353:
|
1
2
|
no-resolvserver=127.0.0.1#5353 |
3. 启动chinadns, 重启dnsmasq。
安装完这两个软件后,/etc/init.d目录下就新增了chinadns和shadowsocks两个文件。
这里我们还需要编辑 /etc/init.d/shadowsocks文件。 把其中的ss-local都改为ss-redir,一共只有2处。
启动chinadns和shadowsocks:
/etc/init.d/chinadns start
/etc/init.d/shadowsocks start
让它们开机自动启动:
/etc/init.d/chinadns enable
/etc/init.d/shadowsocks enable
(openwrt系统会根据/etc/init.d/chinadns文件中开头定义的变量 START=95,在/etc/rc.d/下建立S95xxx文件。执行它的start)。
此时我们就需要iptables,把一些指定的ip给转到本地1080端口,让它们走代理。 当然不能把所有的流量都走代理。
我们在 /usr/bin下建立了一个名为 ss-black.sh的文件。 内容如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#!/bin/sh#create a new chain named SHADOWSOCKSiptables -t nat -N SHADOWSOCKS#Redirect what you want#Googleiptables -t nat -A SHADOWSOCKS -p tcp -d 74.125.0.0/16 -j REDIRECT --to-ports 1080iptables -t nat -A SHADOWSOCKS -p tcp -d 173.194.0.0/16 -j REDIRECT --to-ports 1080#Youtubeiptables -t nat -A SHADOWSOCKS -p tcp -d 208.117.224.0/19 -j REDIRECT --to-ports 1080iptables -t nat -A SHADOWSOCKS -p tcp -d 209.85.128.0/17 -j REDIRECT --to-ports 1080#Twitteriptables -t nat -A SHADOWSOCKS -p tcp -d 199.59.148.0/22 -j REDIRECT --to-ports 1080#Shadowsocks.orgiptables -t nat -A SHADOWSOCKS -p tcp -d 199.27.76.133/32 -j REDIRECT --to-ports 1080#slideshareiptables -t nat -A SHADOWSOCKS -p tcp -d 216.52.242.0/24 -j REDIRECT --to-ports 1080iptables -t nat -A SHADOWSOCKS -p tcp -d 108.174.0.0/20 -j REDIRECT --to-ports 1080#wordpressiptables -t nat -A SHADOWSOCKS -p tcp -d 192.0.78.17/32 -j REDIRECT --to-ports 1080iptables -t nat -A SHADOWSOCKS -p tcp -d 192.0.78.9/32 -j REDIRECT --to-ports 1080#vimeo.comiptables -t nat -A SHADOWSOCKS -p tcp -d 74.113.233.128/32 -j REDIRECT --to-ports 1080#Anything else should be ignoreiptables -t nat -A SHADOWSOCKS -p tcp -j RETURN# Apply the rulesiptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS |
把需要的ip加进去就可以了。
某位朋友还给出了另一个方案,就是把亚洲流量全部直接访问,非亚洲流量全部走代理,他的脚本在这里:https://gist.github.com/reee/fe174cfd8985273bc478。我这里转载过来:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#!/bin/sh#create a new chain named SHADOWSOCKSiptables -t nat -N SHADOWSOCKS# Ignore your shadowsocks server's addresses# It's very IMPORTANT, just be careful.iptables -t nat -A SHADOWSOCKS -d YOUR-SERVERS-IP-ADDRESS -j RETURN# Ignore LANs IP addressiptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURNiptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURNiptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURNiptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURNiptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN# Ignore Asia IP addressiptables -t nat -A SHADOWSOCKS -d 1.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 14.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 27.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 36.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 39.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 42.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 49.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 58.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 59.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 60.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 61.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 101.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 103.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 106.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 110.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 111.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 112.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 113.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 114.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 115.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 116.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 117.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 118.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 119.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 120.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 121.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 122.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 123.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 124.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 125.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 126.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 169.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 175.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 180.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 182.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 183.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 202.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 203.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 210.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 211.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 218.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 219.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 220.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 221.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 222.0.0.0/8 -j RETURNiptables -t nat -A SHADOWSOCKS -d 223.0.0.0/8 -j RETURN# Anything else should be redirected to shadowsocks's local portiptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 1080# Apply the rulesiptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS |
这个脚本我没有测试,但是看起来它应该能work,没问题。
我们执行一下自己创建的ss-black.sh脚本后, 路由器就应该能够透明的为我们FQ了。
如果要新增一个网站,我会去dig或nslookup找到它的ip,把它添加到这个文件中。 可以借助APNIC的IP WHOIS工具:(http://wq.apnic.net/apnic-bin/whois.pl) 。
我不是很熟悉iptables,不确定新增的iptables规则是否能立即生效,也没去测试。我测试过的一种办法是这样的:
修改ss-black.sh文件,增加新增的ip或ip段。
执行 /etc/init.d/firewall restart。 执行完后应该就不能FQ了,iptables的规则都清掉了。
再次运行 /usr/bin/ss-black.sh。 搞定。
为了让路由器开机后能自动执行ss-black.sh,我仿照chinadns的方式,在 /etc/init.d下新建了名为ss-black的文件。内容如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/bin/sh /etc/rc.common# Copyright (C) 2006-2011 OpenWrt.orgSTART=96start() { /usr/bin/ss-black.sh}stop() {} |
然后 /etc/init.d/ss-black enable。在/etc/rc.d下可以看到生成了S96ss-black文件。当然别忘了+x权限。
这个重启的过程我没有测试是否work。 我们的路由器FQ稳定的运行了3天没有问题。 看来shadowsocks还是挺稳定的。
到此搞定。 但是看起来好像不那么的智能。 真正的智能是不需要这么一个配置,系统自动能够识别哪些需要FQ。 也许有更优的方案。
忽然想起了1963年美国总统肯尼迪在柏林墙下的演讲。其中的一句话:“自由有许多困难,民主亦非完美,然而我们从未建造一堵墙把我们的人民关在里面,不准他们离开我们。”
我不管它们有那些所谓的“罪”,在我看来,谷歌,facebook,twitter,都是非常优秀的互联网产品。不论从技术上还是产品设计上,值得我们学习。
(转)开源OpenWRT知识的更多相关文章
- 开源GIS知识
---恢复内容开始--- 2.1.3组件层 数据库组件层按照功能可分为两类:数据管理组件和分析组件. 2.1.3.1数据管理组件 (1)GDAL GDAL(http://www.gdal.org/)是 ...
- Java开源框架知识整理
1.Spring的了解 Spring是一个轻量级的IOC/DI和AOP容器的开源框架.可以实现Java模块化开发,贯穿表现层,业务层,逻辑层,实现各层之间的解耦合关系. IOC,控制反 ...
- 我发起了一个 .Net 平台上的 开源项目 知识图谱 Babana Map 和 文本文件搜索引擎 Babana Search
起因 也是 前几天 有 网友 在 群 里发了 知识图谱 相关的文章, 还有 有 网友 问起 NLog -> LogStash -> Elastic Search 的 问题, ...
- GitHub上史上最全的Android开源项目分类汇总 (转)
GitHub上史上最全的Android开源项目分类汇总 标签: github android 开源 | 发表时间:2014-11-23 23:00 | 作者:u013149325 分享到: 出处:ht ...
- 2016年GitHub排名前20的Python机器学习开源项目(转)
当今时代,开源是创新和技术快速发展的核心.本文来自 KDnuggets 的年度盘点,介绍了 2016 年排名前 20 的 Python 机器学习开源项目,在介绍的同时也会做一些有趣的分析以及谈一谈它们 ...
- 从拥抱开源到回馈开源,灵雀云助力CNCF中国区培训业务
6月27日,全球首屈一指的开源盛会 2018 LinuxCon + ContainerCon + CloudOpen China (LC3)在中国北京国家会议中心落下帷幕.二度落地中国的LC3大会热度 ...
- knowledge-repo 知识管理简单试用
knowledge-repo 是airbnb 开源的知识管理工具,只集成git 数据库等类型的存储 安装 pip install --upgrade "knowledge-repo[all] ...
- 28款GitHub最流行的开源机器学习项目,推荐GitHub上10 个开源深度学习框架
20 个顶尖的 Python 机器学习开源项目 机器学习 2015-06-08 22:44:30 发布 您的评价: 0.0 收藏 1收藏 我们在Github上的贡献者和提交者之中检查了用Python语 ...
- 让这个Java语言的开源商城系统火起来
Java是一门非常优秀的面向对象编程语言,功能强大且简单易用,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,凭借其简单性.面向对象.分布式.健壮性.安全性.平台独立与可 ...
随机推荐
- 使用k8s && minio 进行 postgres 数据库自动备份
通过k8s 的定时任务job,我们可以方便的进行定时任务应用的开发,通过minio s3 兼容的cloud native 存储 我们可以方便的通过http 请求进行数据文件的备份,以下简单演示下如 ...
- S老师 打飞机 学习
using UnityEngine; using System.Collections; /// <summary> /// 奖励 /// </summary> public ...
- AspNetCore+Swagger 生成Model描述
AspNetCore+Swagger 生成Model 描述 前言: 本篇文章实现是基于上一篇文章,进下补充:多余的就不多说了,只是为了实现Model的描述生成:有兴趣的可以结合上一篇的进行实现:如有更 ...
- KVM部署、使用、调优
背景介绍 传统数据中心面临的问题: 资源使用率低 资源分配不均 自动化能力差 初始化成本高 云计算: 云计算是一种按使用量付费的模式,这种模式提供可用的.便捷的.按需的网络访问, 进入可配置的计 ...
- spring+mybaits xml配置解析----转
一.项目中spring+mybaits xml配置解析 一般我们会在datasource.xml中进行如下配置,但是其中每个配置项原理和用途是什么,并不是那么清楚,如果不清楚的话,在使用时候就很有可能 ...
- springfox+swagger2生成API文档
1.建立一个spring mvc工程: 2.添加POM依赖: <properties> <springfoxversion>2.6.1</springfoxversion ...
- 实例对象与 new 命令
引用:https://wangdoc.com/javascript/oop/new.html JavaScript 语言的对象体系,不是基于"类"的,而是基于构造函数(constr ...
- vue监听路由变化
使用 watch,观察路由,一旦发生变化便重新获取数据 watch: { // 如果路由有变化,会再次执行该方法 '$route': 'fetchData' }
- apache2 配置虚拟主机
查看 apache2 的配置位置: whereis apache2 我的在:/etc/apache2 sites-available 文件夹下面放的就是 虚拟站点的配置文件: 随便复制一个改改: c ...
- C#3.0:新特性
1.自动属性 下面两种写法作用相同 1 public int Age { get; set;} 1 2 3 4 5 6 private int age; public int Age { get { ...