USB Networking/zh cn

From Openmoko

Jump to: navigation, search

Contents

Neo1973 side

命名方式

预设的状况下Neo1973拥有usb0界面,被编译到kernel中,做为以太网络装置。 在Neo上,如果你想要在网络上使用完整的主机名称,你必须定义你的DNS server。建立 /etc/resolv.conf档案,档案中要包含以下的内容:

nameserver xxx.xxx.xxx.xxx

e.g. nameserver 192.168.1.1

因此,你也可以轻松的使用 "ipkg update && ipkg upgrade" 更新 Neo.

更好的方法是编辑: /etc/network/interfaces 并且写入以下的内容:

up echo nameserver 192.168.0.200 >/etc/resolv.conf
要指定你喜好的DNS server而不是192.168.0.200。

example: up echo nameserver 4.2.2.2 >/etc/resolv.conf


另一个方法是symlink (NOW OBSOLETE?)

ln -s /var/run/resolv.conf /etc/resolv.conf

并且在启动 /etc/network/if-up.d/08setupdns script中写入:

#!/bin/sh -e
echo  nameserver 192.168.0.200 > /var/run/resolv.conf

使用这个方法可以在拨号到GPRS时,正确的从ppp 软件中处理。

Routing

你必须自额外的流量绕送到因特网上。 若你的计算机是预设的目的地位置,这个流量可以透过你的计算机被绕送出去 (see below)。你可以使用下列方法达到这个目地:

gateway 192.168.0.200

在usb0区段中到 /etc/network/interfaces。

Desktop side

手动

在连接上了装置之后,modprobe usbnet 模块及设定 usb0 接口 (以root身份):

ifconfig usb0 192.168.0.200 netmask 255.255.255.0

如果你的 eth0 接口位于同一个 '范围' (e.g. 192.168.0.105) 则你可以进行下面的工作:

1. 以下列指令ping Neo装置

# ping -I usb0 192.168.0.202

2. 为Neo加入route:

# /sbin/route add -host 192.168.0.202/32 dev usb0

3 登入 Neo

# ssh root@192.168.0.202

若你没有必要的模块可以让usb0 运作,请确定你启用了以下的kernel选项:

  • CONFIG_USB_USBNET
  • CONFIG_USB_NET_CDCETHER

二个选项都可以启动 Device Drivers -> USB support -> USB Network Adapters. For more info see the usbnet driver homepage.

自动化方法

Hotplugging usbnet 取得,由 Marcin 'Hrw' Juszkiewicz张贴。


Debian 或相似的系统

Edit /etc/network/interfaces:

allow-hotplug usb0
iface usb0 inet static
        address 192.168.0.200
        netmask 255.255.255.0
        network 192.168.0.0
        post-up iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24
        post-up echo 1 > /proc/sys/net/ipv4/ip_forward
        post-up iptables -P FORWARD ACCEPT

Ubuntu (由Feisty、Gutsy 与Hardy测试)

Edit /etc/network/interfaces:

auto usb0
iface usb0 inet static
        address 192.168.0.200
        netmask 255.255.255.0
        network 192.168.0.0
        up iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24 &
        up echo 1 > /proc/sys/net/ipv4/ip_forward &
        up iptables -P FORWARD ACCEPT &
        down iptables -D POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24 &

若你执行用手动的方式执行 echo 1 > /proc/... 指令,sudo 可能尚嫌不足,接着,你则可以自auso bash执行。

Ubuntu Feisty、Gutsy 及 Hardy 在未挂载时,ifdown 是有臭虫的,也就是说,它只有在系统加载时可以执行。

这个臭虫很久之前已回报给ubuntu。因此,不要将这个臭虫夹文件,请在下列位置写入备忘:https://bugs.launchpad.net/ubuntu/+source/ifupdown/+bug/130437

One can patch /etc/udev/rules.d/85-ifupdown.rules, editing the two lines at the end of the file:

SUBSYSTEM=="net", DRIVERS=="?*", GOTO="net_start"
GOTO="net_end"

LABEL="net_start"

# Bring devices up and down only if they're marked auto.
# Use start-stop-daemon so we don't wait on dhcp
ACTION=="add",          RUN+="/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifup -- --allow auto $env{INTERFACE}"

LABEL="net_end"

ACTION=="remove",       RUN+="/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifdown -- --allow auto $env{INTERFACE}"

臭虫内容为LABEL="net_end" ,它被放在错的地方。

SuSE

/etc/sysconfig/network/ifcfg-usb0

# USB configuration for PDAs (openmoko)
IPADDR=192.168.0.200
NETMASK=255.255.255.0
STARTMODE=onboot

Fedora (由FC8测试)

/etc/sysconfig/network-scripts/ifcfg-usb0

# USB configuration for PDAs (openmoko)
# from http://www.handhelds.org/moin/moin.cgi/UsbNet
DEVICE=usb0
BOOTPROTO=none
IPADDR=192.168.0.200
NETMASK=255.255.255.0
ONBOOT=yes

Red Hat 或类似套件(在 Workstation 5下测试)

编辑Edit /etc/sysconfig/network-scripts/net.hotplug:

在这个指令之后

    case $INTERFACE in
	# interfaces that are registered after being "up" (?)

加入

	usb0)
		ifconfig usb0 192.168.0.200 netmask 255.255.255.0
		route add 192.168.0.202 usb0
		iptables -I INPUT 1 -s 192.168.0.202 -j ACCEPT
		iptables -I OUTPUT 1 -s 192.168.0.200 -j ACCEPT
                iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24
                echo 1 > /proc/sys/net/ipv4/ip_forward
		exit 0
	;;

Gentoo

  • 开启 /etc/conf.d/net 并且加入add:
# Neo1973
config_usb0=( "192.168.0.200 netmask 255.255.255.0" )
routes_usb0=( "192.168.0.202/32 via 192.168.0.200" )
  • 建立一个新的init script:
cd /etc/init.d
ln -s net.lo net.usb0
  • 将iptables放入使用:
iptables -I INPUT 1 -s 192.168.0.202 -j ACCEPT
iptables -I OUTPUT 1 -s 192.168.0.200 -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24
  • 将它们存放在
/etc/init.d/iptables save
  • I如果你希望在预设的情况下绕送:
rc-update add iptables default
  • 你必须也通知 kernel,开始传送。建立以下的内容,则可以自动传送:
create /etc/conf.d/net.usb0 as follows

preup() {
       echo 1 > /proc/sys/net/ipv4/ip_forward
       return 0
}

postdown() {
       echo 0 > /proc/sys/net/ipv4/ip_forward
       return 0
}

用这个方法,封包传递将会在NEO连接上的时候开始传送,若关闭,则无法传送。

MacOS X

请参考MacOS XUSB Networking 一节.

Mobile开发

代管DNS请求

若你是像我一样,常常搬家,必须透过DHCP连接到不同的网络,你可能会因为经常性的更新Neo 1973的resolv.conft而感到烦恼。

要处理这个问题,如我的安装script,我在NEO USB0端口号的IP地址执行。这表示 Neo /etc/resolv.conf 只包含了:

nameserver 192.168.0.200 

我的计算机将只会依的 /etc/resolv.conf 代管DNS

请注意我们只会在usb0界面上执行dns proxy ,因此我们并不会破坏其它的网络联机

使用 dnrd 代管

这个 script 被设定为使用 dnrd 做为 dns proxy。scriptdnrd的复本可以自我的网站取得。这个 script也可以执行上列的USB_Networking#Manual_method初始安装。

以UDP forwarder代管

另一个简单的安装是使用来自http://www.tapor.com/udpf/ 的udp forwarder,它可以用下列指令操作:

udpf-elf\
       -p=53\
       -f=`cat /etc/resolv.conf|awk '$1 == "nameserver"{print $2; exit(0);}'`:53

Proxying with iptables

Its is possible to forward DNS requests with iptables using the DNAT target

iptables -t nat -A PREROUTING -p tcp -s 192.168.0.202 -d 192.168.0.200 --dport domain -j DNAT --to-destination 192.168.0.1
iptables -t nat -A PREROUTING -p udp -s 192.168.0.202 -d 192.168.0.200 --dport domain -j DNAT --to-destination 192.168.0.1

在这里192.168.0.1 是你的gateway的IP。它是最简单的方法,但是不建议这样做。但假设你有像ISP DNS服务一样直接连到网络,则建议这样做,但它无法做到流量调节。

连接到电话

接着以空白密码连接到 ssh root@192.168.0.202 电话。

注意: 在Openmoko上的ssh daemon (dropbear 0.49) 的程序在传现及离开客端状态有 bug。你会收到的离开状态为255。


SSH Extras

I如果你在PC上键入root@192.168.0.202,编辑 /etc/hosts 并加入一个输入'phone'

192.168.0.202 phone

接着编辑 edit ~/.ssh/config (或建立它) 并加入

host phone
user root

你必须做的工作是

# ssh phone

要避免 ssh 为每个已知的hostsssh host-key加入新的一行,你可以加下下列的内容到~/.ssh/config

 UserKnownHostsFile /dev/null

你可能想要使用 key 跳过这个过程。

SSH Keys

从主机到手机

要产生可以用的 ssh key 做为登入之用,请输入:

ssh-keygen -t rsa

在出现键入密码时,请键入ENTER(虽然它不是个好主意)或者是以这个KEY做为密码输入。ssh到手机,并且建立~/.ssh

# mkdir ~/.ssh

接着,从你的计算机上复制 .pub档案到手机上

# scp ~/.ssh/id_rsa.pub phone:.ssh/authorized_keys

你现在应该可以直接 ssh 到手机上

要停用登入密码 (在设定完KEY存取之后) 编辑 /etc/init.d/dropbear 并且变更下列的内容

DROPBEAR_EXTRA_ARGS=

DROPBEAR_EXTRA_ARGS="-s"

你必须重新启动,以让设定生效。

从手机到主机

产生key

 dropbearkey -t rsa -f id_rsa

输出内容将如下:

 Will output 1024 bit rsa secret key to 'id_rsa'
 Generating key, this may take a while...
 Public key portion is:
 ssh-rsa AAAAB3Nza[...]
 Fingerprint: md5 ca:e8:f0:b7:f6:7b:c2:b6:b9:71:e4:45:86:a9:ff:b8

复制并贴上以下的内容 (在这个范例当中,以'ssh-rsa' 开始,到主机的 authorized_keys 档案为止 (通常是在 ~/.ssh/).

从手机,ssh -i:

 ssh -i id_rsa user@host

对我来讲,它是行的通的。 I ripped off these instructions from: [[1]]

透过桌面的GUI SSH

如果你必须方过USB取得手机上的GUI,你可以用下面的方式使用SSH:

 ssh -l root -X -v 192.168.0.202

如登入,并且执行openmoko-finger-demo ,它会在桌面开启。要取得横式的检视,请变更桌面的GUI窗口。

NEO上的远程程序

要让桌面上的程序能在你的NEO上显示,请登入手机:

 ssh -l root 192.168.0.202

执行:

 DISPLAY=:0 xhost +192.168.0.200

之后,你可以关闭ssh session。回到桌上型计算机,执行:

 DISPLAY=moko:0 xclock

请注意xhost 指令只会允许远程应用程序在 192.168.0.200 存取X server。它允许任何人用桌上型机器存取neo X server。要停用远程应用程序,在NEO上执行:

 DISPLAY=:0 xhost -192.168.0.200

Personal tools