Tor + PolipoをAndroid フォンに導入する

以前Torをルーターに入れてましたが接続があまりよくありませんでした。Torはかなりリソースを消費するのでルーターには荷が重すぎます。

OpenWrtのアップグレードのついでに入れてみたのですが使える状況にありませんでした。そこで考えをめぐらしてみると、以前Windows PhoneにAndroidを入れたことを思い出して、ホコリを被っているNokia 520にTorを入れてみることにしました。一昔のスマホでもルーターの性能を遥かに上回る能力があり十分期待に答えてくれそうです。ただし弱点はネットワークのパーミッション絡みでインストールが難しいのと接続方法が限られることです。

準備
AndroidにCoreElecでも使ったentwareをインストールします。方法は次のサイトの通りでOKですが、sshアプリがインターネットを参照できなかったので、adb shellで作業します。あるいは以前私が設定した方法、「Android: SSHデーモンを有効にする」でも可です。インストール先は私の場合は/dataにしています。

Torのインストール
環境が少しおかしかったので次のように追加して変更しました。
/opt/etc/init.d/rc.func

export PATH=$PATH:/opt/bin:/opt/sbin
export LD_LIBRARY_PATH=/opt/lib:/opt/usr/lib

まず作業環境を整えてからTorPolipoをopkgパッケージマネージャーを使って入れていきます。

cd /opt/etc
. ./profile
opkg update && opkg install polipo tor

各設定ファイルを編集します。次のサイトを参考に設定しています。

私の設定例です。

/opt/etc/polipo/config

proxyAddress = "0.0.0.0"    # IPv4 only
allowedClients = 127.0.0.1, 192.168.10.0/25
socksParentProxy = "127.0.0.1:9050"
socksProxyType = socks5

/opt/etc/tor

SOCKSPort 9050 # Default: Bind to localhost:9050 for local connections.
#SOCKSPort 192.168.10.3:9100 # スマホのアドレスです。テスト用の設定です
SOCKSPolicy accept 192.168.10.0/25
SOCKSPolicy accept 127.0.0.1/32
SOCKSPolicy reject *
DataDirectory /data/var/lib/tor
DNSPort 53

テスト
polipotorを立ち上げて参考のサイト同様に接続のテストをしてみます。

1.Torの接続テスト

curl --socks5 127.0.0.1:9050 -s https://check.torproject.org/ | cat | grep -m 1 Congratulations | xargs

結果:Congratulations. This browser is configured to use Tor.

2.他のPCからTor接続テスト

curl --socks5 192.168.10.3:9100 -s https://check.torproject.org/ | cat | grep -m 1 Congratulations | xargs

結果:Congratulations. This browser is configured to use Tor.

3.Tor DNSサーバの接続テスト

nslookup welcome.opendns.com localhost

結果:

root@fame:/ # nslookup welcome.opendns.com
Server: 8.8.4.4
Address 1: 8.8.4.4 google-public-dns-b.google.com

Name: welcome.opendns.com
Address 1: 146.112.59.9

root@fame:/ # nslookup welcome.opendns.com localhost
Server: 127.0.0.1
Address 1: 127.0.0.1 localhost

Name: welcome.opendns.com
Address 1: 146.112.59.9

4.HTTPプロキシのpolipoの接続テスト
アンドロイド機から

curl --proxy 127.0.0.1:8123 -s https://check.torproject.org/ | cat | grep -m 1 Congratulations | xargs

リモートPCから

curl --proxy 192.168.10.3:8123 -s https://check.torproject.org/ | cat | grep -m 1 Congratulations | xargs

結果:Congratulations. This browser is configured to use Tor.

自動起動
次のファイルに755パーミッションつけてブート時に自動起動したいプログラムを書きます。
/data/local/userinit.sh

#!/system/bin/sh
sleep 3
/system/bin/mount -o rw,remount /
sleep 3
mkdir -p /opt /bin
sleep 1
ln -sf /system/bin/sh /bin/sh
sleep 1
mount --bind /data/entware /opt
sleep 3
/system/bin/mount -o ro,remount /
sleep 3
daemon_list='S28polipo S35tor S60netdata'
for n in $daemon_list; do
    sleep 3
    [ -f /opt/etc/init.d/$n ] && /opt/etc/init.d/$n start
done

ブラウザの設定

Manual proxy configuration

  • HTTP Proxy 192.168.10.3 Port:8123
  • SSL Proxy  192.168.10.3 Port:8123
  • FTP Proxy 192.168.10.3 Port:8123
IP Details for 185.104.120.3

設定をもとに戻すとこうなります。

DNSサーバの変更
スマホのwifiのマニュアル設定でDNSサーバを変更してもスマホのみでシステムのDNSサーバは変わりません。 rootでアクセスしてもパーミッションの関係で修正できません。Solid Explorer File Managerというものを入れて/etc/resolv.confを編集するとうまくいきました。’nameserver 127.0.0.1‘とします。Tor DNSがインストールされているのでそれをデフォルトとします。

1|root@fame:/ # nslookup welcome.opendns.com
Server:    127.0.0.1
Address 1: 127.0.0.1 localhost

Name:      welcome.opendns.com
Address 1: 146.112.59.9

エキストラ

– WIFIの接続問題

放っておくとWiFiが切れるので次のアプリを入れてみました。

-接続の可視化

entwareでiftopをインストールします。

– 手持ちの機種にも入れてみる

いちおう出来るみたいです。

– Tor on Android

アンドロイドのみなら試してませんがこちらの方が簡単のようです。

-Desktopの場合
ufwで調整してみたところうまくいきませんでした。/etc/ufw/before.rulesに設定を次のように追加してみました。(*filterの前におきます)

*nat 
:PREROUTING ACCEPT [0:0] 
:OUTPUT ACCEPT [0:0] 
-A OUTPUT -p udp -d 127.0.0.1 --dport 53 -j DNAT --to-destination 127.0.0.1:9053 
-A OUTPUT -p tcp -d 127.0.0.1 --dport 53 -j DNAT --to-destination 127.0.0.1:9053 
COMMIT

あまりiptablesについて分かっていないのでufwの設定は諦めてシェルスクリプトで対応しました。

#!/bin/sh
iptables -t nat -A OUTPUT -p udp -d 127.0.0.1  --dport 53 -j DNAT --to-destination 127.0.0.1:9053
iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1  --dport 53 -j DNAT --to-destination 127.0.0.1:9053

なぜTorのDNSポートを9053にしたかというとroot以外は1024以下のポートを割り当てることが出来ないからです。それでポートフォワーディングしてるわけですがufwではなぜか出来ませんでした。なにか設定方法があると思いますが調べる気力もないのでそのままです。