3

so I got Onion Pi from Adafruit running on my RaspberryPi2 and I can connect and everything. Problem is I'm living in China and most tor traffic is blocked by the great firewall. However, I did successfully connect using the meek-amazon transport plugin on my Ubuntu laptop.

So my question is how do I get the transport plugin to work on my Onion Pi router so I can get out of China?

Here is my torrc file

## https://www.torproject.org/docs/faq#torrc

Log notice file /var/log/tor/notices.log
VirtualAddrNetwork 10.192.0.0/10
TransPort 9040
TransListenAddress 192.168.42.1
DNSListenAddress 192.168.42.1

# Only ever run as a client. Do not run as a relay or an exit.
ClientOnly

# Ensure resolution of .onion and .exit domains happen through Tor.
AutomapHostsSuffixes .onion,.exit
AutomapHostsOnResolve 1

# Serve DNS responses
DNSPort 53

# meek bridges
UseBridges 1
# With tor 0.2.4 or earlier, you have to configure the url and front on the
# command line, and you can only use one url/front combination at a time:
Bridge meek 0.0.2.0:1
# Google is blocked in China
# ClientTransportPlugin meek exec ./meek-client --url=https://meek-reflect.appspot.com/ --front=www.google.com --log meek-client.log
ClientTransportPlugin meek exec /usr/local/bin/meek-client --url=https://d2zfqthxsdq309.cloudfront.net/ --front=a0.awsstatic.com --l$

DataDirectory /var/lib/tor
PidFile /var/run/tor/tor.pid
User debian-tor

ControlSocket /var/run/tor/control
ControlSocketsGroupWritable 1

CookieAuthentication 1
CookieAuthFileGroupReadable 1
CookieAuthFile /var/run/tor/control.authcookie
Log notice file /var/log/tor/log"

## Tor opens a socks proxy on port 9050 by default -- even if you don't
## configure one below. Set "SocksPort 0" if you plan to run Tor only
## as a relay, and not make any local application connections yourself.
#SocksPort 9050 # Default: Bind to localhost:9050 for local connections.
#SocksPort 192.168.0.1:9100 # Bind to this adddress:port too.
SocksPort 9050

## Entry policies to allow/deny SOCKS requests based on IP address.
## First entry that matches wins. If no SocksPolicy is set, we accept
## all (and only) requests that reach a SocksPort. Untrusted users who
## can access your SocksPort may be able to learn about the connections
## you make.
#SocksPolicy accept 192.168.0.0/16
#SocksPolicy reject *

## Logs go to stdout at level "notice" unless redirected by something
## else, like one of the below lines. You can have as many Log lines as
## you want.
##
## We advise using "notice" in most cases, since anything more verbose
## may provide sensitive information to an attacker who obtains the logs.
##
## Send all messages of level 'notice' or higher to /var/log/tor/notices.log
#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

## Uncomment this to start the process in the background... or use
## --runasdaemon 1 on the command line. This is ignored on Windows;
## see the FAQ entry if you want Tor to run as an NT service.
RunAsDaemon 1

## The directory for keeping all the keys/etc. By default, we store
## things in $HOME/.tor on Unix, and in Application Data\tor on Windows.
#DataDirectory /var/lib/tor

## The port on which Tor will listen for local connections from Tor
## controller applications, as documented in control-spec.txt.
#ControlPort 9051
## If you enable the controlport, be sure to enable one of these
## authentication methods, to prevent attackers from accessing it.
#HashedControlPassword    16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C
#CookieAuthentication 1

############### This section is just for location-hidden services ###

## Once you have configured a hidden service, you can look at the
## contents of the file ".../hidden_service/hostname" for the address
## to tell people.
##
## HiddenServicePort x y:z says to redirect requests on port x to the
## address y:z.

#HiddenServiceDir /var/lib/tor/hidden_service/
#HiddenServicePort 80 127.0.0.1:80

#HiddenServiceDir /var/lib/tor/other_hidden_service/
#HiddenServicePort 80 127.0.0.1:80
#HiddenServicePort 22 127.0.0.1:22

################ This section is just for relays #####################
#
## See https://www.torproject.org/docs/tor-doc-relay for details.

## Required: what port to advertise for incoming Tor connections.
#ORPort 443
## If you want to listen on a port other than the one advertised in
## ORPort (e.g. to advertise 443 but bind to 9090), you can do it as
## follows.  You'll need to do ipchains or other port forwarding
## yourself to make this work.
#ORPort 443 NoListen
#ORPort 127.0.0.1:9090 NoAdvertise

## The IP address or full DNS name for incoming connections to your
## relay. Leave commented out and Tor will guess.
#Address noname.example.com

## If you have multiple network interfaces, you can specify one for
## outgoing traffic to use.
# OutboundBindAddress 10.0.0.5

## A handle for your relay, so people don't have to refer to it by key.
#Nickname ididnteditheconfig

## Define these to limit how much relayed traffic you will allow. Your
## own traffic is still unthrottled. Note that RelayBandwidthRate must
## be at least 20 KB.
## Note that units for these config options are bytes per second, not bits
## per second, and that prefixes are binary prefixes, i.e. 2^10, 2^20, etc.
#RelayBandwidthRate 100 KB  # Throttle traffic to 100KB/s (800Kbps)
#RelayBandwidthBurst 200 KB # But allow bursts up to 200KB/s (1600Kbps)

## Use these to restrict the maximum traffic per day, week, or month.
## Note that this threshold applies separately to sent and received bytes,
## not to their sum: setting "4 GB" may allow up to 8 GB total before
## hibernating.
##
## Set a maximum of 4 gigabytes each way per period.
#AccountingMax 4 GB
## Each period starts daily at midnight (AccountingMax is per day)
#AccountingStart day 00:00
## Each period starts on the 3rd of the month at 15:00 (AccountingMax
## is per month)
#AccountingStart month 3 15:00

## Contact info to be published in the directory, so we can contact you
## if your relay is misconfigured or something else goes wrong. Google
## indexes this, so spammers might also collect it.
#ContactInfo Random Person <nobody AT example dot com>
## You might also include your PGP or GPG fingerprint if you have one:
#ContactInfo 0xFFFFFFFF Random Person <nobody AT example dot com>

## Uncomment this to mirror directory information for others. Please do
## if you have enough bandwidth.
#DirPort 9030 # what port to advertise for directory connections
## If you want to listen on a port other than the one advertised in
## DirPort (e.g. to advertise 80 but bind to 9091), you can do it as
## follows.  below too. You'll need to do ipchains or other port
## forwarding yourself to make this work.
#DirPort 80 NoListen
#DirPort 127.0.0.1:9091 NoAdvertise
## Uncomment to return an arbitrary blob of html on your DirPort. Now you
## can explain what Tor is if anybody wonders why your IP address is
## contacting them. See contrib/tor-exit-notice.html in Tor's source
## distribution for a sample.
#DirPortFrontPage /etc/tor/tor-exit-notice.html

## Uncomment this if you run more than one Tor relay, and add the identity
## key fingerprint of each Tor relay you control, even if they're on
## different networks. You declare it here so Tor clients can avoid
## using more than one of your relays in a single circuit. See
## https://www.torproject.org/docs/faq#MultipleRelays
## However, you should never include a bridge's fingerprint here, as it would
## break its concealability and potentionally reveal its IP/TCP address.
#MyFamily $keyid,$keyid,...

## A comma-separated list of exit policies. They're considered first
## to last, and the first match wins. If you want to _replace_
## the default exit policy, end this with either a reject *:* or an
## accept *:*. Otherwise, you're _augmenting_ (prepending to) the
## default exit policy. Leave commented to just use the default, which is
## described in the man page or at
## https://www.torproject.org/documentation.html
##
## Look at https://www.torproject.org/faq-abuse.html#TypicalAbuses
## for issues you might encounter if you use the default exit policy.
##
## If certain IPs and ports are blocked externally, e.g. by your firewall,
## you should update your exit policy to reflect this -- otherwise Tor
## users will be told that those destinations are down.
##
## For security, by default Tor rejects connections to private (local)
## networks, including to your public IP address. See the man page entry
## for ExitPolicyRejectPrivate if you want to allow "exit enclaving".
##
#ExitPolicy accept *:6660-6667,reject *:* # allow irc ports but no more
#ExitPolicy accept *:119 # accept nntp as well as default exit policy
#ExitPolicy reject *:* # no exits allowed

## Bridge relays (or "bridges") are Tor relays that aren't listed in the
## main directory. Since there is no complete public list of them, even an
## ISP that filters connections to all the known Tor relays probably
## won't be able to block all the bridges. Also, websites won't treat you
## differently because they won't know you're running Tor. If you can
## be a real relay, please do; but if not, be a bridge!
#BridgeRelay 1
## By default, Tor will advertise your bridge to users through various
## mechanisms like https://bridges.torproject.org/. If you want to run
## a private bridge, for example because you'll give out your bridge
## address manually to your friends, uncomment this line:
#PublishServerDescriptor 0

#Bridge obfs4 87.117.234.195:2801 EFE6C658FCCBB5466525F7BAD84C9DC1618D8947

#
# In addition to the standard tor bridge configuration, add:
#

# Use obfs4proxy to provide the obfs4 protocol.
#ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy

# Use obfs4proxy to provide the obfs4 protocol.
#ClientTransportPlugin obfs4 exec /usr/bin/obfs4proxy
#ClientTransportPlugin meek exec ./meek-client --url=http://d3dsacqprgcsqh.cloudfront.net/ --log meek-client.log

## Cloudfront server for Amazon
#d3dsacqprgcsqh.cloudfront.net  14.67%
#deayhd4nq31b0.cloudfront.net   6.06%
#d396qusza40orc.cloudfront.net  2.72%
#d3v9w2rcr4yc0o.cloudfront.net  2.26%
#d13yacurqjgara.cloudfront.net  2.09%
#dbo1rpcxmp3fw.cloudfront.net   6.83%
#d23td168vc89zo.cloudfront.net  3.82%
#d13yacurqjgara.cloudfront.net  3.72%
#d396qusza40orc.cloudfront.net  2.70%
#d3v9w2rcr4yc0o.cloudfront.net  1.35%

Log file

Apr 08 20:37:14.000 [notice] Tor 0.2.4.27 (git-412e3f7dc9c6c01a) opening new log file.
Apr 08 20:37:14.000 [notice] Parsing GEOIP IPv4 file /usr/share/tor/geoip.
Apr 08 20:37:14.000 [notice] Parsing GEOIP IPv6 file /usr/share/tor/geoip6.
Apr 08 20:37:19.000 [warn] The communication stream of managed proxy '/usr/local/bin/meek-client' is 'closed'. Most probably the managed proxy stopped running. This might be a bug of the managed proxy, a bug of Tor, or a misconfiguration. Please enable logging on your managed proxy and check the logs for errors.
Apr 08 20:37:19.000 [notice] Failed to terminate process with PID '3538' ('No such process').
Apr 08 20:37:20.000 [notice] Bootstrapped 5%: Connecting to directory server.
Apr 08 20:37:20.000 [warn] We were supposed to connect to bridge '0.0.2.0:1' using pluggable transport 'meek', but we can't find a pluggable transport proxy supporting 'meek'. This can happen if you haven't provided a ClientTransportPlugin line, or if your pluggable transport proxy stopped running.
  • trac.torproject.org/projects/tor/wiki/doc/meek Which particular step doesn't work for you? – whatever Apr 2 '15 at 10:47
  • I don't have a gui running, this is all done through ssh. I need to edit the torrc file to enable the plugin. However, I'm not sure how to enable it and I need to enable it for the meek-amazon one specifically. it's the only one that works here in China. – user7052 Apr 3 '15 at 11:13
4

I've built meek-client for RPi and RPi 2 at here, and I altered the provided install script a bit at here to automatically install meek-client and use meek-amazon.

Install via

curl -fsSL https://raw.github.com/bbs4us/onion_pi/master/setup.sh | sudo bash

  • This is great thank you. Couple things though. I noticed that in your code it states that it should be installed on a fresh raspbian install, however this doesn't seem to be setting up the router portion of it, as instructed by Adafruit. Should I do a clean install, install the router and then run your script? I did try to implement your code regarding the torrc file into my current file and that didn't seem to work. – user7052 Apr 7 '15 at 18:47
  • I'm not sure. I only changed the script (may be unoffical) provided on that Adafruit Learn page. I'm not sure about the router part but I'll probably look into it tonight. – Coppertint Apr 8 '15 at 6:04
  • Alright great, I'm going to try and tweak what I have now before restarting everything. I see what you did with the meek TP and I'm going to try and get that to work on mine. I'll update you if I find anything. I also updated this post with my torrc file. – user7052 Apr 8 '15 at 10:38
  • Have you downloaded the meek binary file at github.com/bbs4us/meek-client-pi to /usr/local/bin? Also can you post your Tor logfile? – Coppertint Apr 8 '15 at 11:10
  • Can you post your logfile? – Coppertint Apr 8 '15 at 12:06
1

First check if the binary is executing - through ssh try running :

/usr/local/bin/meek-client --help

You should see something like

Usage of /usr/local/bin/meek-client:
  -front="": front domain name if no front= SOCKS arg
  -helper="": address of HTTP helper (browser extension)
  -log="": name of log file
  -proxy="": proxy URL
  -url="": URL to request if no url= SOCKS arg

After that, in your torrc change

Bridge meek 0.0.2.0:1
# Google is blocked in China
# ClientTransportPlugin meek exec ./meek-client --url=https://meek-reflect.appspot.com/ --front=www.google.com --log meek-client.log
ClientTransportPlugin meek exec /usr/local/bin/meek-client --url=https://d2zfqthxsdq309.cloudfront.net/ --front=a0.awsstatic.com --l$

to

Bridge meek 0.0.2.0:1 url=https://meek-reflect.appspot.com/ front=www.google.com
Bridge meek 0.0.2.0:2 url=https://d2zfqthxsdq309.cloudfront.net/ front=a0.awsstatic.com
Bridge meek 0.0.2.0:3 url=https://az668014.vo.msecnd.net/ front=ajax.aspnetcdn.com
ClientTransportPlugin meek exec /usr/loca/bin/meek-client --log /var/log/tor/meek-client.log

and try again.

protected by Community Apr 8 '15 at 14:45

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?