Project

General

Profile

USBNetworking » History » Version 11

Paul Kocialkowski, 02/05/2012 01:25 PM

1 9 Paul Kocialkowski
h1. Replicant USB Networking
2
3 1 Paul Kocialkowski
This page explains how to connect your Replciant phone to the Internet via an USB connection to a computer connected to the Internet. 
4
5 9 Paul Kocialkowski
h2. What you need
6 1 Paul Kocialkowski
7 9 Paul Kocialkowski
* A phone running Replicant (but it should also work on [[CyanogenMod]] or Android)
8
* A computer with USB connectivity and network access running GNU/Linux
9
10
h2. Automation scripts
11
12 1 Paul Kocialkowski
Two scripts are necessary: one to run on the host computer and one to run on the device.
13
14 9 Paul Kocialkowski
h3. Replicant USB Networking - PC
15
16 1 Paul Kocialkowski
Here's the script to run on the computer. Copy the following text to a file named "run_pc.sh" (or any other name, you just need to keep the same name along the process):
17
18 9 Paul Kocialkowski
<pre>
19 1 Paul Kocialkowski
#!/bin/sh
20
21
# Replicant USB Networking
22
# ========================                             
23
# 
24 5 Paul Kocialkowski
# Copyright (C) 2011 Paul Kocialkowski, GPLv3+
25 1 Paul Kocialkowski
# 
26
# This program is free software: you can redistribute it and/or modify
27
# it under the terms of the GNU General Public License as published by
28
# the Free Software Foundation, either version 3 of the License, or
29
# (at your option) any later version.
30
# 
31
# You should have received a copy of the GNU General Public License
32
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
33
34
IPTABLES_CLEAN_RULES=true
35
36
USB_IFACE="usb0"
37
INTERNET_IFACE="eth0"
38
39
USB_IFACE_IP="192.168.4.200"
40
41
# Clean iptables rules
42
43
iptables_rules_clean () {
44
	if [ $IPTABLES_CLEAN_RULES = false ]
45
	then
46
		return
47
	fi
48
49
	iptables --flush
50
	iptables --table nat --flush
51
	iptables --delete-chain
52
	iptables --table nat --delete-chain
53
}
54
55
# Inject iptables forwarding rules
56
57
iptables_forward_rules_apply () {
58
	iptables --table nat --append POSTROUTING --out-interface $INTERNET_IFACE -j MASQUERADE
59
	iptables --append FORWARD --in-interface $USB_IFACE -j ACCEPT
60
	echo 1 > /proc/sys/net/ipv4/ip_forward 
61
}
62
63
# Configure network link
64
65
usb_networking_configure () {
66
	ifconfig $USB_IFACE up
67
	ifconfig $USB_IFACE $USB_IFACE_IP
68
}
69
70
usb_networking_disable () {
71
	ifconfig $USB_IFACE down
72
	echo 0 > /proc/sys/net/ipv4/ip_forward 
73
}
74
75
case $1 in
76
	"start")
77
		echo "Starting Replicant USB Networking"
78
		iptables_rules_clean
79
		usb_networking_configure
80
		iptables_forward_rules_apply
81
	;;
82
	"stop")
83
		echo "Stopping Replicant USB Networking"
84
		usb_networking_disable
85
		iptables_rules_clean
86 3 Paul Kocialkowski
	;;
87 1 Paul Kocialkowski
	*)
88
		echo "Usage: sh $0 {start|stop}"
89
	;;
90 3 Paul Kocialkowski
esac
91 9 Paul Kocialkowski
</pre>
92 1 Paul Kocialkowski
93 11 Paul Kocialkowski
Then, set this file executable: @chmod a+x run_pc.sh@ 
94 1 Paul Kocialkowski
95 9 Paul Kocialkowski
h3. Replicant USB Networking - Device
96
97 1 Paul Kocialkowski
Here's the script to run on the device. Copy the following text to a file named "run_dev.sh" (or any other name, you just need to keep the same name along the process):
98
99 9 Paul Kocialkowski
<pre>
100 1 Paul Kocialkowski
#!/system/bin/sh
101
102
# Replicant USB Networking
103
# ========================                             
104
# 
105 5 Paul Kocialkowski
# Copyright (C) 2011 Paul Kocialkowski, GPLv3+
106 1 Paul Kocialkowski
# 
107
# This program is free software: you can redistribute it and/or modify
108
# it under the terms of the GNU General Public License as published by
109
# the Free Software Foundation, either version 3 of the License, or
110
# (at your option) any later version.
111
# 
112
# You should have received a copy of the GNU General Public License
113
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
114
115
# Enable USB Networking
116
117
USB_IFACE="usb0"
118
119
USB_IFACE_IP="192.168.4.202"
120
GATEWAY_IP="192.168.4.200"
121
DNS1_IP="8.8.8.8"
122
123
usb_networking_enable () {
124
	echo 1 > /sys/class/usb_composite/rndis/enable
125
	ifconfig usb0 up
126
}
127
128
usb_networking_configure () {
129
	ifconfig $USB_IFACE $USB_IFACE_IP
130
	route add default gw $GATEWAY_IP dev $USB_IFACE
131
	setprop net.dns1 $DNS1_IP
132
133
	# setprop net.dns1 $( cat /system/etc/resolv.conf | sed -e "s|.*#.*||" -e "s|^.*nameserver \(.*\)$|\1|g" | grep -v "^$" | head -n 1 )
134
}
135
136
usb_networking_disable () {
137
	echo 0 > /sys/class/usb_composite/rndis/enable
138
	ifconfig usb0 down
139
}
140
141
case $1 in
142
	"start")
143
		echo "Starting Replicant USB Networking"
144
		usb_networking_enable
145
		usb_networking_configure
146
	;;
147
	"stop")
148
		echo "Stopping Replicant USB Networking"
149
		usb_networking_disable
150
	;;
151 2 Paul Kocialkowski
	*)
152
		echo "Usage: sh $0 {start|stop}"
153 1 Paul Kocialkowski
	;;
154
esac
155 9 Paul Kocialkowski
</pre>
156 1 Paul Kocialkowski
157 11 Paul Kocialkowski
Now you need to copy it to your phone. Start adb server as root: @# adb start-server@ and copy the file (as regular user): @adb push run_dev.sh /data/@ Get a shell on your device (@adb shell@) and set this file executable: @# chmod a+x /data/run_dev.sh@ 
158 1 Paul Kocialkowski
159 9 Paul Kocialkowski
h3. Using the scripts
160 1 Paul Kocialkowski
161
Now both scripts are in place. You should now: 
162 11 Paul Kocialkowski
    Start "run_dev.sh" on the device: @adb shell "sh /data/run_dev.sh start"@
163
    Start "run_pc.sh" as root on the host pc (you must be in the directory where you created the script): @# ./run_pc.sh start@
164 1 Paul Kocialkowski
165 9 Paul Kocialkowski
Note that if you use [[NetworkManager]], it could notice a new network interface and try to configure it: you should disconnect this interface on [[NetworkManager]] before you run the second script. 
166 1 Paul Kocialkowski
167
Now everything is in place. If no error is shown, it should now be working. You can try to ping some website on the device.
168
If It doesn't work, try to run again each script, running the configuration one more time can't do any worse. 
169 7 Paul Kocialkowski
170 9 Paul Kocialkowski
h4. Getting back to normal
171
172 8 Paul Kocialkowski
If you want to disable Replicant USB Networking, you have to:
173 2 Paul Kocialkowski
174 9 Paul Kocialkowski
h3. Customizing the scripts
175
176 1 Paul Kocialkowski
The variables at the beginning of each script can be customized for your usage:
177 3 Paul Kocialkowski
178 9 Paul Kocialkowski
h4. run_pc.sh
179 3 Paul Kocialkowski
180 2 Paul Kocialkowski
181 9 Paul Kocialkowski
h4. run_dev.sh