可以直接用opkg安装:
opkg update
opkg install tor
源在/etc/opkg目录下的文件中配置:
$ ls /etc/opkg
customfeeds.conf distfeeds.conf keys
如果所使用的固件的源中没有tor,只能自己制作固件,参考Openwrt固件制作。
在/etc/config/network中添加:
config interface 'tor'
option type 'bridge' #要使用bridge类型
option ifname 'eth0.3' #注意对命名格式有要求
option proto 'static'
option ipaddr '192.168.10.1'
option netmask '255.255.255.0'
eth0.3表示是eth0网卡虚拟出的第三个网卡,执行/etc/init.d/network reload
之后可以看到:
23: eth0.3@eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP qlen 1000
link/ether 78:a3:51:2b:69:06 brd ff:ff:ff:ff:ff:ff
inet 192.168.10.1/24 brd 192.168.10.255 scope global eth0.3
valid_lft forever preferred_lft forever
inet6 fe80::7aa3:51ff:fe2b:6906/64 scope link
valid_lft forever preferred_lft forever
注意要使用bridge模式,否则热点无法连接, openwrt network config中给出相关的说明。
在/etc/config/dhcp中添加:
config dhcp 'tor'
option interface 'tor'
option start '100'
option limit '150'
option leasetime '1h'
在/etc/config/wirelss中添加:
config wifi-iface
option device 'radio1' #无线网卡
option network 'tor'
option mode 'ap'
option ssid 'tor'
option encryption 'psk-mixed'
option key 'goodlife1'
这时候重启启动网络/etc/init.d/network restart
,就会发现tor热点,可以连接。
只允许040和9053端口,后面会看到这两个端口是tor的服务端口。
在/etc/config/firewall中添加:
config zone
option name tor
list network 'tor'
option input REJECT
option output ACCEPT
option forward REJECT
option syn_flood 1
option conntrack 1
config rule
option name Allow-Tor-Tran
option src tor
option proto tcp
option dest_port 9040
option family ipv4
option target ACCEPT
config rule
option name Allow-Tor-DNS
option src tor
option proto udp
option dest_port 9053
option family ipv4
option target ACCEPT
config rule
option name Allow-DHCP-Renew
option src tor
option proto udp
option dest_port 67
option family ipv4
option target ACCEPT
config rule
option name Allow-Ping
option src tor
option proto icmp
option icmp_type echo-request
option family ipv4
option target ACCEPT
config rule
option name Allow-IGMP
option src tor
option proto igmp
option family ipv4
option target ACCEPT
在/etc/firewall.user中添加:
iptables -t nat -A PREROUTING -i br-tor -p tcp --syn -j REDIRECT --to-ports 9040
iptables -t nat -A PREROUTING -i br-tor -p udp --dport 53 -j REDIRECT --to-ports 9053
iptables -t nat -A POSTROUTING -o br-tor -p udp -s 192.168.10.1 --sport 9053 -j SNAT --to 192.168.10.1:53
或者只允许http和https:
iptables -t nat -A PREROUTING -i br-tor ! -d 192.168.10.1 -p tcp --dport 80 --syn -j REDIRECT --to-ports 9040
iptables -t nat -A PREROUTING -i br-tor ! -d 192.168.10.1 -p tcp --dport 443 --syn -j REDIRECT --to-ports 9040
iptables -t nat -A PREROUTING -i br-tor -p udp --dport 53 -j REDIRECT --to-ports 9053
iptables -t nat -A POSTROUTING -o br-tor -p udp -s 192.168.10.1 --sport 9053 -j SNAT --to 192.168.10.1:53
tor config中介绍了tor的配置项。
tor的配置文件是/etc/tor/torrc,一般不需要更改,使用默认配置即刻。
默认情况下tor启动后,会在本地创建一个代理:
127.0.0.1:9050
目标就是将流量从这个代理发出去。
可以参考的配置,注意这里配置了透明代理和匿名DNS:
TransPort 9040
TransListenAddress 192.168.10.1
DNSPort 9053
DNSListenAddress 192.168.10.1
VirtualAddrNetwork 10.192.0.0/10
AutomapHostsOnResolve 1
默认情况下,tor通过访问directory server获得一份节点列表,然后建立虚拟链路。
但是在国内,tor无法访问directory。而且directory server中提供的节点是公开的,很容易被封杀。
因此tor组织,设计开发了bridge,bridge是半公开的,只能通过[https://bridges.torproject.org][https://bridges.torproject.org]获取到部分。
在国内使用tor,最麻烦的就是要找到能用的bridge,下面给出的这些bridge已经都不能用了。
在torrc中,添加bridges:
UseBridges 1
Bridge obfs4 45.56.125.64:9443 8F188C976653ED2697BBBB14D83FAB7038D30242 cert=8+HYXC2jIvLlD9WZhmPy+Zdx72xho/Z9FNTpzXP+p5eVi/vOFDUUpvzf4BtyJXj3dwsACg iat-mode=0
+Bridge obfs4 35.185.195.251:9443 17D02DEF6BD6A4251EDA338D6FAD185ADD4DD362 cert=jdJ3b6/+W3zPYgRROI33TWk6Q5JWcaSX5dGRZkhacy6qwmUBHNykbWYs7S1dtDdlMs4PGg iat-mode=0
+Bridge obfs4 104.153.209.217:25447 D28E0345809AE4BAC903EF7FC78CAAF111A63C58 cert=DtNNYXeRG4ds+iTM7sdbJHJgH7RmxDb1lt8JR17BiT7eHnORyn+4y+RcoqAI65XGvhXKJg iat-mode=0
+Bridge fte 194.132.208.167:3629 B532A3961CD658A75A9B2BF1C70970FD358B2CC2
+Bridge fte 194.132.208.63:30990 E824F547C900B2082418CC4FF71045BA32F91A8F
+Bridge obfs3 194.132.209.16:45753 D07A31AE11B8D81027E839E449ECE075A2D7416C
+Bridge obfs3 194.132.208.167:43166 B532A3961CD658A75A9B2BF1C70970FD358B2CC2
+Bridge obfs3 176.56.237.144:88 0A94AAA5BAB7CCA6F94B0ACA97870FAF28CD3643
+Bridge scramblesuit 85.159.237.97:3690 FF7030283C326B0AF40546409E88C8612B8EF48A password=T6DFT3BAR4GLX5BRX7XPRXQ3PCMOIBQE
+Bridge scramblesuit 194.132.209.16:42739 D07A31AE11B8D81027E839E449ECE075A2D7416C password=XC5PTSV7ASLPMUUG7N2A4I7U2ZGONEOA
+Bridge scramblesuit 194.132.208.167:37707 B532A3961CD658A75A9B2BF1C70970FD358B2CC2 password=VM2YDXPMPEON4THOBZWDNRCOZ5O36APZ
注意从第二个Bridge开始前面要有+
表示追加,bridge后跟随的第一个字段是插件名称,用于流量变形,防止被识别。
它的代码是tor自己的仓库,可以能需要配置git代理后才能获取到。
git clone https://git.torproject.org/pluggable-transports/meek.git
如果目标架构是mips,并且支持FPU(浮点运算指令集) ,可以直接用1.8及以上的golang编译:
如果不支持FPU的mips,可以使用go-mips32:
git clone https://github.com/gomini/go-mips32.git
cd go-mips32/src
GOARCH=mips32le GOOS=linux ./make.bash
编译结束后提示:
Installed Go for linux/mips32le in /home/vagrant/GOPATH/src/github.com/gomini/go-mips32
Installed commands in /home/vagrant/GOPATH/src/github.com/gomini/go-mips32/bin
需要使用编译得到的go来编译程序,这里直接通过创建符号连接方式,替换系统中已经安装的go:
sudo ln -s /home/vagrant/GOPATH/src/github.com/gomini/go-mips32 /usr/local/go:
查看一下默认的go命令的路径是否正确:
$ which go
/usr/local/go/bin/go
按照上面的章节准备好go命令后,到meek目录中编译meek:
cd meek/meek-client
CGO_ENABLED=0 GOPATH=~/GOPATH/ GOARCH=mips32le GOOS=linux go get
CGO_ENABLED=0 GOPATH=~/GOPATH/ GOARCH=mips32le GOOS=linux go build
GOARGH可以是mips、mipsle、mips64、mips64le
在当前目录下可以得到meek-client文件:
$file meek-client
meek-client: ELF 32-bit LSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), statically linked, not stripped
将其上传到openwrt上后,在torrc中添加:
ClientTransportPlugin meek exec /root/meek-client --log /var/log/tor/meek-client.log
Bridge meek 0.0.2.0:2 B9E7141C594AF25699E0079C1F0146F409495296 url=https://d2cly7j4zqgua7.cloudfront.net/ front=a0.awsstatic.com
+Bridge meek 0.0.2.0:3 97700DFE9F483596DDA6264C4D7DF7641E1E39CE url=https://meek.azureedge.net/ front=ajax.aspnetcdn.com
可以在meek addr中找到可用的meek地址。
然后启动tor
/etc/init.d/tor start
如果遇到错误:
error in handling request: dial tcp: lookup ajax.aspnetcdn.com": invalid domain name
说明配置文件中域名写错了,例如这里是后面多写了一个引号。
如果遇到错误:
error in handling request: x509: failed to load system roots and no roots provided
说明openwrt上缺少root证书,上传一个:
scp /etc/ssl/certs/ca-bundle.crt [email protected]:/etc/ssl/certs/ca-certificates.crt
install certs on openwrt给出了手动添加证书的方法。
/etc/init.d/tor enable
/etc/init.d/tor start
如果需要调试,可以在/etc/tor/torc中打开日志:
Log notice file /var/log/tor/notices.log
## Send every possible message to /var/log/tor/debug.log
#Log debug file /var/log/tor/debug.log
## Use the system log instead of Tor's logfiles
Log notice syslog
## To send all messages to stderr:
#Log debug stderr