1   Pseudo-Netzwerk (g_ether) mit Gnublin

http://www.gnublin.org

  1. Högl, 2012, 2014 <Hubert.Hoegl@hs-augsburg.de>

2   Elementare Vorgehensweise

Damit kann eine Netzwerkverbindung zwischen PC/Notebook und dem Gnublin Board hergestellt werden. Man kann damit zwischen PC und Gnublin über die üblichen Netzwerk-Programme und Protokolle kommunizieren. Mit einem Zusatz (siehe Punkt 10) kommt man auch mit Gnublin über den PC in das Internet.

  1. Gnublin von der Versorgungsspannung nehmen.

    Jumper "USB OTG PWR" und "USB OTG ID" auf "Device" setzen.

    Die Jumper und I/O Pins sieht man hier: http://elk.informatik.fh-augsburg.de/pub/gnublin-lpc3131/gnublin-1.3.refcard.jpg

  2. Beide USB Anschlüsse des Gnublin Boards mit dem PC verbinden Konsole (Konsole und USB-OTG) Gnublin sollte nun booten. Danach einloggen.

  3. Modul laden

root@armv5te:~# modprobe g_ether
g_ether gadget: using random self ethernet address
g_ether gadget: using random host ethernet address
usb0: MAC 2e:dd:9a:ed:d2:48
usb0: HOST MAC 56:e5:4d:4b:18:84
g_ether gadget: Ethernet Gadget, version: Memorial Day 2008
g_ether gadget: g_ether ready
fsl-usb2-udc: bind to driver g_ether
root@armv5te:~# g_ether gadget: high speed config #1: CDC Ethernet (ECM)
  1. IP Adresse vergeben

    root@armv5te:~# ifconfig usb0 10.11.12.1 up
    
  2. Kontrolle

    root@armv5te:~# ifconfig
    
    lo        ...
    
    usb0      Link encap:Ethernet  HWaddr 2E:DD:9A:ED:D2:48
              inet addr:10.11.12.1  Bcast:10.255.255.255  Mask:255.0.0.0
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    
  3. Am PC eingeben (Ubuntu 10.04 LTS)

    Hinweis: nicht g_ether laden

    hhoegl@aspire1:~$ sudo ifconfig
    
    ...
    usb0   Link encap:Ethernet  HWaddr 56:e5:4d:4b:18:84
           inet6 addr: fe80::54e5:4dff:fe4b:1884/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
           TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:0 (0.0 B)  TX bytes:2052 (2.0 KB)
    ...
    

    IP Nummer vergeben:

    sudo ifconfig usb0 10.11.12.2 up
    

    Kontrolle:

    hhoegl@aspire1:~$ sudo ifconfig
    
    ...
    usb0   Link encap:Ethernet  HWaddr 56:e5:4d:4b:18:84
           inet addr:10.11.12.2  Bcast:10.255.255.255  Mask:255.0.0.0
    inet6 addr: fe80::54e5:4dff:fe4b:1884/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
    RX packets:0 errors:0 dropped:0 overruns:0 frame:0
    TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:0 (0.0 B)  TX bytes:4723 (4.7 KB)
    ...
    

    Test der Verbindung mit Ping:

    hhoegl@aspire1:~$ ping 10.11.12.1
    PING 10.11.12.1 (10.11.12.1) 56(84) bytes of data.
    64 bytes from 10.11.12.1: icmp_seq=1 ttl=64 time=0.954 ms
    64 bytes from 10.11.12.1: icmp_seq=2 ttl=64 time=0.815 ms
    64 bytes from 10.11.12.1: icmp_seq=3 ttl=64 time=0.812 ms
    ...
    
  4. Auf Gnublin den Web Server starten:

    root@armv5te:~# bash lighttpd-init.sh
    

    Die Datei lighttpd-init.sh enthaelt (muss ich noch in das Start Skript /etc/init.d/lighttpd einbauen):

    #!/bin/sh
    
    if [ ! -d /var/log/lighttpd ]
    then
       mkdir /var/log/lighttpd
       chmod 777 /var/log/lighttpd/
       touch /var/log/lighttpd/error.log
    fi
    chmod 666 /var/log/lighttpd/error.log
    /etc/init.d/lighttpd start
    
  5. Auf dem PC einen Web-Browser starten und den URL waehlen:

    http://10.11.12.1

    Danach sollte man "Hello, world" im Browser sehen.

  6. ssh Verindung vom PC zu Gnublin

    hhoegl@aspire1:~$ ssh root@10.11.12.1
    The authenticity of host '10.11.12.1 (10.11.12.1)' can't be established.
    RSA key fingerprint is af:0a:d9:9b:f2:ce:5d:9d:d2:6d:3b:1a:b5:4a:c1:0f.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '10.11.12.1' (RSA) to the list of known hosts.
    root@10.11.12.1's password:
    root@armv5te:~#
    

    Auf dem Gnublin Board muss dropbear laufen. Eventuell manuell starten mit "/etc/init.d/dropbear start".

    In die andere Richtung geht es auch (auf dem PC bzw. Notebook muss der

    ssh Daemon laufen):

root@armv5te:~# ssh hhoegl@10.11.12.2

Host '10.11.12.2' is not in the trusted hosts file.
(fingerprint md5 47:15:5c:61:aa:d6:cb:22:ff:24:3a:ff:84:98:6a:37)
Do you want to continue connecting? (y/n) y
hhoegl@10.11.12.2's password:
Linux aspire1 2.6.32-38-generic #83-Ubuntu SMP Wed Jan 4 11:13:04 UTC 2012 i686 GNU/Linux
Ubuntu 10.04.3 LTS

Welcome to Ubuntu!
* Documentation:  https://help.ubuntu.com/

Your CPU appears to be lacking expected security protections.
Please check your BIOS settings, or for more information, run:
/usr/bin/check-bios-nx --verbose

Last login: Thu Feb  2 22:01:05 2012 from localhost
hhoegl@aspire1:~$
  1. Man kann mit dieser Methode auch von Gnublin aus über den PC in das Internet gehen, wenn man folgende Kommandos auf dem PC ausführt:

    echo "1" > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
    

    Auf dem Gnublin Board kann man noch die default route setzen mit

    root@gnublin:~# route add default gw 192.168.1.2 usb0
    root@gnublin:~# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 usb0
    0.0.0.0         192.168.1.2     0.0.0.0         UG    0      0        0 usb0
    

3   Klevere Vorgehensweise

Bei dieser Methode verwendet man eine Eigenschaft des Network-Managers. Man lädt wieder wie üblich auf Gnublin das g_ether Modul und konfiguriert eine IP Adresse, z.B.

sudo ifconfig usb0 192.168.1.2 up

Im Network Manager findet man anschliessend eine neue "wired connection" für die USB Pseudo-Netzverbindung, z.B. usb0. Im Network Manager Applet muss man nun genau für diese Verbindung folgende Optionen setzen:

  • "shared to other computers" (IPv4 settings)
  • "Connect automatically" aktivieren (anklicken)
  • IPv6 settings auf "ignore" setzen

Der Network Manager startet nun im Hintergrund auf dem Host für die usb0 Verbindung den dnsmasq Prozess. Mit ps kann man nachsehen, wie genau läuft (hier z.B. auf einem Linux Mint 13):

4 S nobody    9510   658  0  80   0 -  1346 poll_s 10:35 ? 00:00:00 \
/usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts \
--bind-interfaces --pid-file=/var/run/sendsigs.omit.d/network-manager.dnsmasq.pid \
--listen-address=127.0.0.1 --conf-file=/var/run/nm-dns-dnsmasq.conf \
--cache-size=0 --proxy-dnssec

4 S nobody    9541   658  0  80   0 -  1347 poll_s 10:35 ? 00:00:00 \
/usr/sbin/dnsmasq --conf-file --no-hosts --keep-in-foreground \
--bind-interfaces --except-interface=lo --clear-on-reload --strict-order \
--listen-address=10.42.0.1 --dhcp-range=10.42.0.10,10.42.0.100,60m \
--dhcp-option=option:router,10.42.0.1 --dhcp-lease-max=50 \
--pid-file=/var/run/nm-dnsmasq-usb0.pid

Auf Gnublin kann man dann den DNS Client

dhclient

eingeben. Nun wird eine IP Adresse von dnsmasq (= dns + dhcp) geholt, in meinem Fall 10.42.0.46 vom PC. Je nach verwendeter GNU/Linux Distribution auf dem Hostrechner kann es sein, dass über dhclient auch der Nameserver bereits über die Voreinstellungen des dnsmasq läuft. Es kann aber durchaus sein, dass man dnsmasq auf dem Hostrechner erst konfigurieren muss.

XXX TODO dnsmasq Konfiguration nachvollziehen z.B. für Mint 13 Maya

Wer einen öffentlich verwendbaren DNS Server sucht, der kann Google Public DNS mit der IP Nummer 8.8.8.8 verwenden. Die Datei /etc/resolv.conf sollte dann die Zeile

nameserver 8.8.8.8

enthalten.