下载一个软件的ipk包,并且上传到路由器(我是用WinSCP上传的), 用ssh登录路由器, 然后在终端输入命令:
opkg install 某个ipk包。
注意ipk软件包一定要与你路由器的版本和架构一致,否则安装不上。
你用ssh登录到路由器,
先运行这个命令 opkg update ,然后 在opkg install XXXX就可以了,比如你要装一个nano,就可以 opkg install nano,软件就自动下载安装,前提是你得路由器已经接入网络,ssh登陆你可以用putty这个软件,小巧好用!
1.条件 固定mac地址
为限制ip的访问控制 通常使用iptables 限制ip部分 ,如果设备更换ip地址,则原有的ip地址列表规则会失效。
在局域网内 使用根据设备的mac地址配置ebtables限制目标设备的访问控制.。
但是,这样也是有缺陷的,如设备每隔一段时间会使用产生新的,随机的mac地址进行连接,则ebtables的mac匹配会失效。
为了限制这种情况,可以设置允许已知的mac连接,未识别的禁止其连接.。
做到这种情况
1.1.wifi连接的可使用 允许列表中mac地址连接 如图。
在这里插入图片描述
1.2.使用 arp 静态绑定。
这样做是为了迫使 连接设备使用固定的mac 进行连接 从而能够使用ebtables 达到限制目的。
2. openwrt 安装配置ebtables。
2.1 安装
opkg install ebtables ebtables-utils kmod-ebtables-ipv4 kmod-ebtables-ipv6。
查看版本
ebtables -V
2.2 创建为启动脚本
创建文件 /etc/init.d/efw 内容如下。
#!/bin/sh /etc/rc.common。
#/etc/init.d/efw。
START=21
STOP=21
cleartables() {。
/usr/sbin/ebtables -t $1 -F。
/usr/sbin/ebtables -t $1 -X。
/usr/sbin/ebtables -t $1 -Z。
boot() {
start
start() {
ebtables -P INPUT ACCEPT。
ebtables -P FORWARD ACCEPT。
ebtables -P OUTPUT ACCEPT。
# 1.基于mac地址检查 禁止指定的mac设备访问内网 除了一些dns dhcp ntp之外,允许访问外网。
# 1. filter mac address which is disallowed to access intranet except some dns dhcp ntp , extranet is allowed。
# 2. 基于mac地址检查 禁止指定的mac设备访问外网 只能访问内网,禁止访问外网。
# 2. filter mac address which is disallowed to access extranet , intranet is allowed。
#sh files is locale in /usr/efw/* 。
#由于分为多个执行脚本 把他们放置在 /usr/efw/目录下执行 。
SHDIR=/usr/efw
for file in $(ls $SHDIR)。
do
if [ -x $SHDIR/$file ]; then。
#need arg: add。
sh $SHDIR/$file add。
fi
done
stop() {
cleartables filter。
cleartables nat。
#cleartables broute。
/usr/sbin/ebtables -P INPUT ACCEPT。
/usr/sbin/ebtables -P FORWARD ACCEPT。
/usr/sbin/ebtables -P OUTPUT ACCEPT。
restart() {
cleartables filter。
cleartables nat。
#cleartables broute。
start
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
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
上面的脚本会 遍历调用 /usr/efw 目录下的每个可执行文件 执行动作为 sh $SHDIR/$file add。
如果 /usr/efw 目录为空 则仅执行。
/usr/sbin/ebtables -P INPUT ACCEPT。
/usr/sbin/ebtables -P FORWARD ACCEPT。
/usr/sbin/ebtables -P OUTPUT ACCEPT。
/usr/efw 目录 每个可执行文件 可以 各自完成自己的功能 如。
disallow_extranet.sh 指定mac地址 禁止访问外网,允许访问内网。
disallow_intranet.sh 指定mac地址 禁止访问内网,允许访问外网。
2.3 /usr/efw/disallow_extranet.sh。
禁止访问外网,允许访问内网
#!/bin/sh
#set -x
#用法: 单独 调用
#添加 sh disallow-extranet.sh add ; 删除 sh disallow-extranet.sh earse。
# 这样就不必重启 efw服务。
#配合 /etc/init.d/efw 使用。
#/usr/efw/disallow_extranet.sh。
#手动开关 ENABLE=0 禁用 ; =1 启动。
ENABLE=1
[ "$ENABLE" = 1 ] || exit 1。
#基于mac地址过滤 禁止访问外网 允许访问内网。
#-----在这里添加需要限制的mac地址。
#DISALLOW_MACLIST="11:11:11:22:22:22,22:22:22:11:11:11"。
#使用文件记录禁止的mac地址 一个行 用逗号分隔。
DISALLOW_MACFILE=/usr/efw/maclist_extranet。
[ -e $DISALLOW_MACFILE ] || echo "11:22:33:44:55:66,22:22:22:33:33:33"|tee $DISALLOW_MACFILE。
#需要16进制 这样grep才能匹配。
VARMARK=0x123132。
IPV4_A="10.0.0.0/8"。
#IPV4_A_RFC6598="100.64.0.0/10"。
IPV4_B="172.16.0.0/12"。
IPV4_C="192.168.0.0/16"。
IPV4_LOCAL="169.254.0.0/16"。
IPV4_MCAST="224.0.0.0/4"。
IPV4_BCAST="255.255.255.255"。
# 会变成 fc00::/fc00:: 但效果一样。
IPV6_LOCAL="fc00::/6"。
add() {
ebtables -t nat -N NOEXTRANET_MARK。
ebtables -t nat -A PREROUTING -j NOEXTRANET_MARK。
#ebtables -t nat -A NOEXTRANET_MARK --among-src ${DISALLOW_MACLIST} -j mark --mark-set $VARMARK。
ebtables -t nat -A NOEXTRANET_MARK --among-src-file $DISALLOW_MACFILE -j mark --mark-set $VARMARK。
#INPUT
ebtables -t filter -N NOEXTRANET_IN。
ebtables -t filter -A INPUT --mark $VARMARK -j NOEXTRANET_IN。
#IPV4
ebtables -t filter -A NOEXTRANET_IN -p ipv4 --ip-dst $IPV4_A -j ACCEPT。
ebtables -t filter -A NOEXTRANET_IN -p ipv4 --ip-dst $IPV4_B -j ACCEPT。
ebtables -t filter -A NOEXTRANET_IN -p ipv4 --ip-dst $IPV4_C -j ACCEPT。
ebtables -t filter -A NOEXTRANET_IN -p ipv4 --ip-dst $IPV4_BCAST -j ACCEPT。
ebtables -t filter -A NOEXTRANET_IN -p ipv4 --ip-dst $IPV4_MCAST -j ACCEPT。
ebtables -t filter -A NOEXTRANET_IN -p ipv4 --ip-dst $IPV4_LOCAL -j ACCEPT。
ebtables -t filter -A NOEXTRANET_IN -p ipv4 -j DROP。
#IPV6
ebtables -t filter -A NOEXTRANET_IN -p ipv6 --ip6-dst $IPV6_LOCAL -j ACCEPT。
ebtables -t filter -A NOEXTRANET_IN -p ipv6 -j DROP。
#FORWARD
ebtables -t filter -N NOEXTRANET_FWD。
ebtables -t filter -A FORWARD --mark $VARMARK -j NOEXTRANET_FWD。
#IPV4
ebtables -t filter -A NOEXTRANET_FWD -p ipv4 --ip-dst $IPV4_A -j ACCEPT。
ebtables -t filter -A NOEXTRANET_FWD -p ipv4 --ip-dst $IPV4_B -j ACCEPT。
ebtables -t filter -A NOEXTRANET_FWD -p ipv4 --ip-dst $IPV4_C -j ACCEPT。
ebtables -t filter -A NOEXTRANET_FWD -p ipv4 --ip-dst $IPV4_BCAST -j ACCEPT。
ebtables -t filter -A NOEXTRANET_FWD -p ipv4 --ip-dst $IPV4_MCAST -j ACCEPT。
ebtables -t filter -A NOEXTRANET_FWD -p ipv4 --ip-dst $IPV4_LOCAL -j ACCEPT。
ebtables -t filter -A NOEXTRANET_FWD -p ipv4 -j DROP。
#IPV6
ebtables -t filter -A NOEXTRANET_FWD -p ipv6 --ip6-dst $IPV6_LOCAL -j ACCEPT。
ebtables -t filter -A NOEXTRANET_FWD -p ipv6 -j DROP。
earse() {
ebtables -t nat -F NOEXTRANET_MARK。
ebtables -t nat -X NOEXTRANET_MARK。
ebtables -t filter -D INPUT --mark $VARMARK -j NOEXTRANET_IN。
ebtables -t filter -D FORWARD --mark $VARMARK -j NOEXTRANET_FWD。
ebtables -t filter -F NOEXTRANET_FWD。
ebtables -t filter -X NOEXTRANET_FWD。
ebtables -t filter -F NOEXTRANET_IN。
ebtables -t filter -X NOEXTRANET_IN。
#reload mac list DISALLOW_MACLIST。
#修改 DISALLOW_MACLIST 变量后 调用reload重新载入规则 而不是整个efw重载。
#sh /usr/efw/disallow_extranet.sh reload。
reload() {
if [ -n "$(ebtables -t nat -L|grep "mark-set $VARMARK")" ]; then。
ebtables -t nat -F NOEXTRANET_MARK。
ebtables -t nat -A NOEXTRANET_MARK --among-src-file $DISALLOW_MACFILE -j mark --mark-set $VARMARK。
fi
# MAIN
case "$1" in
add)
add
;;
earse)
earse
;;
reload)
reload
;;
*)
exit 1
;;
esac
exit 0
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
2.4 /usr/efw 脚本规范。
需要提供几个选项
add 添加规则
earse 删除
reload 重载mac列表
如
/etc/init.d/efw 的调用 sh $SHDIR/$file add 启动时创建规则。
或者
修改 /usr/efw/maclist_extranet 的mac文件。
只能一个行 每个mac地址用逗号分隔。
修改完成后调用
sh /usr/efw/disallow_extranet.sh reload 以重载当前的规则 而不是重启整个 /etc/init.d/efw restart。
1、安装python
下载本页附件libopenssl_1.0.1c-1_brcm63xx.zip,解压后将libopenssl_1.0.1c-1_brcm63xx.ipk上传到路由器/tmp目录。
如果你的路由器是Atheros AR7161,请下载libopenssl_1.0.1c-1_ar71xx.zip。
官方libopenssl的安全线程支持上有问题,会出现“ssleay_rand_add: Assertion `md_c[1] == 。
md_count[1]' failed”这样错误,用这个libopenssl就没有问题了。用ssh或者telnet登录到路由器运行如下命令:
cd /tmp
opkg update
opkg install libopenssl_1.0.1c-1_brcm63xx.ipk。
opkg install python。
opkg install pyopenssl python-openssl。
复制代码
2、在OpenWrt上安装goagent。
GoAgent是一个基于Google Appengine,因此你必须在app engine上部署goagent的服务端。关于goagent部署请看这里,很详细:http://blog.chinaunix.net/uid-191945-id-3383080.html或者http://www.360doc.com/content/11/1108/14/7917215_162778496.shtml。
现假定你的goagent服务端已经部署了。
下载goagent:https://nodeload.github.com/goagent/goagent/legacy.zip/3.0,解压出来,修改/local/proxy.ini。
将ip改成0.0.0.0
[listen]
ip = 0.0.0.0
复制代码
将appid改成你的appid,多个appid用“|”分隔。
[gae]
appid = myvpn|myvpn2。
复制代码
用ssh或者telnet登录到路由器运行如下命令:
mkdir -p /app/goagent/local。
复制代码
将certs目录、CA.crt、proxy.ini、proxy.py上传到路由器/app/goagent/local目录下。
3、启动goagent
python /app/goagent/local/proxy.py。
复制代码
先不要关闭ssh控制台,使用chrome的SwitchySharp插件测试一下代理是否成功。将其中“HTTP 代理”地址改成路由器地址,我这里是192.168.11.1。
使用SwitchySharp访问一下twitter.com或者facebook.com看看是否成功:
如果成功,ssh控制台也会滚屏显示日志:
4、设置开机启动goagent。
将下面代码加入到/etc/rc.local(或者直接在luci界面,系统>启动项>本地启动脚本 中添加)中。
python /app/goagent/local/proxy.py。
复制代码
重启路由看看是否正常。
5、PAC文件利用
利用PAC文件可以实现自动代理。
打开SwitchySharp》导入/导出》导出PAC文件,将导出SwitchyPac.pac文件上传到路由器/www目录中。根据这个文件浏览器就能确定哪些网址需要使用代理,哪些直接连接就可以了。
或者,打开proxxy.ini修改[pac]中的ip地址为0.0.0.0,将SwitchyPac.pac放入proxy.ini相同目录中,此时pac访问地址为http://192.168.11.1:8086/SwitchyPac.pac。
pac在chrome、ie、firefox等上都支持的(有的要插件),包括ios平台也可以使用pac文件。上传几张图,大家一看就明白了:
IE中自动代理设置:
ios中自动代理设置:
我的rg100a-aa刷完Attitude Adjustment 12.09后,装了一些常用的软件,再装python、goagent,空间基本够用了。
root@OpenWrt:~# df -h。
Filesystem Size Used Available Use% Mounted on。
rootfs 13.0M 11.1M 1.9M 86% /。
/dev/root 1.8M 1.8M 0 100% /rom。
tmpfs 14.3M 476.0K 13.8M 3% /tmp。
tmpfs 512.0K 0 512.0K 0% /dev。
/dev/mtdblock3 13.0M 11.1M 1.9M 86% /overlay。
overlayfs:/overlay 13.0M 11.1M 1.9M 86% /。
复制代码
如果你刷了那些大而全的版本,空间不够的话可以装在U盘上了。
我在别地方也看到您的提问,我来为你解答:
不要用trunk的opkg更新地址,现在trunk已经是Chaos Calmer了。
看我原帖里改成用Barrier Breaker rc2或rc3的opkg更新地址。
你的采纳是我前进的动力,还有不懂的地方,请继续追问。
如你还有别的问题,可另外向我求助;答题不易,互相理解,互相帮助。。.。
原文地址:http://www.qianchusai.com/openwrt%E5%AE%89%E8%A3%85trojan.html