Sdílení ethernetu přes usb

Sadd

Sdílení ethernetu přes usb
« kdy: 27. 02. 2015, 22:25:44 »
Zdravím,
 mám k notebooku připojené zařízení s linuxem, přes USB kabel, potřeboval bych nasdílet přes usb internet ->
začal jsem
hanheld ->
Kód: [Vybrat]
/etc/network/interfaces
allow-hotplug usb0
iface usb0 inet static
address 192.168.33.99
netmask 255.255.255.0
gateway 192.168.33.1
nameserver 8.8.8.8
notebook ->
Kód: [Vybrat]
ifconfig usb0 192.168.33.1
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.33.0/24 -o eth1 -j MASQUERADE
eth1 je připojení, které bych chtěl nasdílet. Boužel mi obě strany píšou, že "nevidí" toho druhého, ubuntu se snaží připojit dokonce na hanheld, ale samozřejmě to nejde. Co dělám špatně ? Díky


Jenda

Re:Sdílení ethernetu přes usb
« Odpověď #1 kdy: 27. 02. 2015, 23:11:00 »
Co dělám špatně ?
ifconfig nefunguje od jádra 2.2 vydaného v roce 1999.

Je to rozhraní up? Nevím jestli ho ten ifconfig nahodil. (ip l; ip l s usb0 up)

ubuntu se snaží připojit dokonce na hanheld
Co to znamená? Typicky si chceš po tom co to provedeš prostě pingnout.

Sadd

Re:Sdílení ethernetu přes usb
« Odpověď #2 kdy: 27. 02. 2015, 23:38:19 »
Co dělám špatně ?
ifconfig nefunguje od jádra 2.2 vydaného v roce 1999.

Je to rozhraní up? Nevím jestli ho ten ifconfig nahodil. (ip l; ip l s usb0 up)

ubuntu se snaží připojit dokonce na hanheld
Co to znamená? Typicky si chceš po tom co to provedeš prostě pingnout.
Ahoj, ifconfig mi z nějakého důvodu normálně funguje, nicméně jsem tedy použil "ip" pro adresu a nahození, stále ne a ne se propojit. Tím, že se snaží připojit myslím to, že "hledá dhcp server(nejspíš) na síti 192.168.33.0". Takže stále nic :/

Re:Sdílení ethernetu přes usb
« Odpověď #3 kdy: 27. 02. 2015, 23:39:43 »
Tiez som nieco podobne nedavno skusal:

Konfiguracia servera:
usb0 - interface do internetu
eth0 - interface do ethernetu

Kód: [Vybrat]
# stop network manager
sudo systemctl stop NetworkManager.service
/etc/init.d/network-manager stop

# enable interface
ifconfig eth0 up

# configure IP address on interface (different range than usb0)
ifconfig eth0 192.168.2.1

# enable routing
echo 1 > /proc/sys/net/ipv4/ip_forward

# enable NAT
iptables -t nat -A POSTROUTING -o usb0 -j MASQUERADE
iptables -t filter -A FORWARD -i eth0 -o usb0 -j ACCEPT
iptables -t filter -A FORWARD -i usb0 -o eth0 -j ACCEPT

Konfiguracia klienta (PC spojeny s ethernetovym kablom so serverom na porte eth0):
IP:     192.168.2.2
MASKA:  255.255.255.0
GW:     192.168.2.1
DNS:    192.168.2.1


Pokial sa dobre pamatam tak klient nevedel z nejakeho dovodu spravne resolvovat DNS. Nevie niekto preco?

JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Sdílení ethernetu přes usb
« Odpověď #4 kdy: 27. 02. 2015, 23:44:45 »
ifconfig nefunguje od jádra 2.2 vydaného v roce 1999.

Ifconfig nefunguje? Ifconfig je "deprecated" na nekterych distrech, dost mozna tam uz ani neni. Ale na Debianu a Ubuntu je a nefunkcnosti jsem si nevsiml. Sice se doporucuje prejit na ip, ale ifconfig by fungovat mel. Je nicmene mozne, ze s nekterymi vecmi nefunguje, treba s USB jsem ho nikdy nezkousel.


nobody

Re:Sdílení ethernetu přes usb
« Odpověď #5 kdy: 28. 02. 2015, 01:52:16 »
...obě strany píšou, že "nevidí" toho druhého, ubuntu se snaží připojit dokonce na hanheld...

nejdriv oziv spojeni hanheld_usb<->pc_usb, pak res sdileni... v ubuntu (network-manager) vypni pro usb "Automaticky spojit" (vydrzi do restartu hanheldu kdy se mu na 99% zmeni mac adresa)

hanheld: ifconfig usb0 192.168.33.99 netmask 255.255.255.0 up
pc:  ifconfig usb0 192.168.33.1 netmask 255.255.255.0 up
a zkus propingovat z obou stran

ifconfig nefunguje od jádra 2.2 vydaného v roce 1999.

jasne a ipv4 taky nefunguje od 1999 ;)

Jenda

Re:Sdílení ethernetu přes usb
« Odpověď #6 kdy: 28. 02. 2015, 04:50:22 »
Ahoj, ifconfig mi z nějakého důvodu normálně funguje

Zkus si třeba na rozhraní nastavit víc IP adres a uvidíš příklad toho jak nefunguje.

nicméně jsem tedy použil "ip" pro adresu a nahození, stále ne a ne se propojit. Tím, že se snaží připojit myslím to, že "hledá dhcp server(nejspíš) na síti 192.168.33.0". Takže stále nic :/

Proč by měl hledat DHCP, když nastavuješ ty dvě IP staticky?

Čuchám čuchám nějaký network manager, který to celé rozbíjí. Zkus ho vypnout.

Jenda

Re:Sdílení ethernetu přes usb
« Odpověď #7 kdy: 28. 02. 2015, 04:52:29 »
Mimochodem zkus na obou stranách "ip a", jestli je zařízení UP a jestli má opravdu tu IP adresu kterou chceš (např. pokud jsi na tom handheldu zapomněl po změně konfigurace restartovat síťování). Pak je taky dobré pustit tcpdump/wireshark a koukat jestli chodí alespoň ARP probes.

pet

Re:Sdílení ethernetu přes usb
« Odpověď #8 kdy: 28. 02. 2015, 09:05:56 »
Ahoj, ifconfig mi z nějakého důvodu normálně funguje

Zkus si třeba na rozhraní nastavit víc IP adres a uvidíš příklad toho jak nefunguje.


Myslíš takto:
Kód: [Vybrat]
petkub ~ # ifconfig
lo: flags=73<AKTIVOVÁNO,SMYČKA,BĚŽÍ>  mtu 65536
        inet 127.0.0.1 síťová_maska 255.0.0.0
        loop délka_odchozí_fronty 0  (Místní smyčka)
        RX packetů 29  bajtů 4856 (4,7 KiB)
        RX chyb 0  zahozeno 0  přetečení 0  rámců 0
        TX packetů 29  bajtů 4856 (4,7 KiB)
        TX chyb 0  zahozeno 0  přetečení 0  přenos 0  kolizí 0

petkub ~ # ifconfig eth0 192.168.0.1/24 up
petkub ~ # ifconfig eth0:1 192.168.1.1/24
petkub ~ # ifconfig eth0:2 192.168.2.1/24
petkub ~ # ifconfig
eth0: flags=4099<AKTIVOVÁNO,VŠESMĚR,MULTICAST>  mtu 1500
        inet 192.168.0.1 síťová_maska 255.255.255.0  všesměr 192.168.0.255
        ether 20:1a:06:5e:dc:d1 délka_odchozí_fronty 1000  (Ethernet)
        RX packetů 0  bajtů 0 (0,0 B)
        RX chyb 0  zahozeno 0  přetečení 0  rámců 0
        TX packetů 0  bajtů 0 (0,0 B)
        TX chyb 0  zahozeno 0  přetečení 0  přenos 0  kolizí 0

eth0:1: flags=4099<AKTIVOVÁNO,VŠESMĚR,MULTICAST>  mtu 1500
        inet 192.168.1.1 síťová_maska 255.255.255.0  všesměr 192.168.1.255
        ether 20:1a:06:5e:dc:d1 délka_odchozí_fronty 1000  (Ethernet)

eth0:2: flags=4099<AKTIVOVÁNO,VŠESMĚR,MULTICAST>  mtu 1500
        inet 192.168.2.1 síťová_maska 255.255.255.0  všesměr 192.168.2.255
        ether 20:1a:06:5e:dc:d1 délka_odchozí_fronty 1000  (Ethernet)

lo: flags=73<AKTIVOVÁNO,SMYČKA,BĚŽÍ>  mtu 65536
        inet 127.0.0.1 síťová_maska 255.0.0.0
        loop délka_odchozí_fronty 0  (Místní smyčka)
        RX packetů 29  bajtů 4856 (4,7 KiB)
        RX chyb 0  zahozeno 0  přetečení 0  rámců 0
        TX packetů 29  bajtů 4856 (4,7 KiB)
        TX chyb 0  zahozeno 0  přetečení 0  přenos 0  kolizí 0
petkub ~ # uname -a
Linux petkub 3.18.7-gentoo #1 SMP Tue Feb 24 10:32:51 CET 2015 x86_64 AMD A8-4500M APU with Radeon(tm) HD Graphics AuthenticAMD GNU/Linux
petkub ~ #
No tak to samozřejmě funguje. Ale pravda je, že pomocí ip lze nastavit více věcí a někdy i snadněji než pomocí ifconfig a route.

Re:Sdílení ethernetu přes usb
« Odpověď #9 kdy: 28. 02. 2015, 09:18:04 »
No tak to samozřejmě funguje.
Nefunguje. Zkuste si třeba jedno z těch rozhraní zastavit. Ve skutečnosti zastavíte všechno na eth0, protože je tam jenom jediné rozhraní, a ta ostatní si ifconfig vymyslel.

Ale pravda je, že pomocí ip lze nastavit více věcí a někdy i snadněji než pomocí ifconfig a route.
Ono nejde ani tak o to, že by přes ip šlo nastavit víc věcí. Podstatné je hlavně to, že ifconfig na Linuxu pouze emuluje své chování a snaží se konfiguraci sítě tak, jak je nastavená v jádru, namapovat na své schéma sítě. Někdy se mu to podaří celkem obstojně, někdy moc ne a někdy vůbec. Problém tedy je v tom, že s ifconfigem na linuxu nikdy nevíte, jak máte síť doopravdy nastavenou.

nobody

Re:Sdílení ethernetu přes usb
« Odpověď #10 kdy: 28. 02. 2015, 09:33:30 »
ifconfig pro spojeni s g_ether na hanheldu je naprosto dostatecne, netreba resit desitky siti na usb0 a jejich samostatne vypinani, o to tazateli preci vubec nejde...

Lol Phirae

Re:Sdílení ethernetu přes usb
« Odpověď #11 kdy: 28. 02. 2015, 09:33:50 »
No tak to samozřejmě funguje.

Ještě, že sem nechodí kolega Kubeček  ;D

pavele

Re:Sdílení ethernetu přes usb
« Odpověď #12 kdy: 28. 02. 2015, 12:15:37 »

Citace
Nefunguje. Zkuste si třeba jedno z těch rozhraní zastavit. Ve skutečnosti zastavíte všechno na eth0

To by mi asi nefungoval můj skriptík "samba harbík", který jsem napsal asi před 10 lety - část "server":  :)



#!/bin/bash

#Tento spustitelny soubor se ma chovat jako daemon.
#Spousti se prikazem:
#nohup /cesta/cikl1server >&/dev/null&
#`nohup /cesta/cikl1server >/dev/null 2>&1&`
#Ukoncuje se prikazem:
#kill $(pgrep cikl1server) >/dev/null 2>&1

#Program na zalohovani dat potrebuje prava root pro programy
#ifconfig, /etc/rc.d/init.d/smb, ping a ip (balicek iproute)
#Upravi se soubor /etc/sudoers, aby vypadal takto:
#uzivatel jmenopc=bez_hesla: /prikaz
#karlik     karlikp3=NOPASSWD: /usr/sbin/hibernate
#uzivatel  vse=bez_hesla: /prikaz
#karlik1     ALL=NOPASSWD: /etc/rc.d/init.d/smb
#karlik1     ALL=NOPASSWD: /bin/ping
#karlik1     karlikp3=NOPASSWD: /sbin/ifconfig
#karlik1     karlikp3=NOPASSWD: /usr/bin/rsync
#karlik1     karlikp3=NOPASSWD: /sbin/ip

ipnet="192.168.5.0"
ipbcast="192.168.5.255"
ipgateway="192.168.5.254"
ipdnsserver="192.168.5.254"
ipserver="192.168.5.34"
ipsmbserver="192.168.5.33"
ethsmbserver="eth0:0"
mylog="/datalog_bin/kiss-heartbeat/logcikl"

#Pokud dojde k pokusu ukoncit skript pomoci kill, trap vola funkci skonci.
#Skript se tedy ukonci az po pruchodu cele smycky.
#Na konci smycky je umisteno:
#[ "$prerus" == "ano" ] && exit 1

# Number     SIG        Meaning
#  0         0          On exit from shell
#  1         SIGHUP     Clean tidyup
#  2         SIGINT     Interrupt
#  3         SIGQUIT    Quit
#  6         SIGABRT    Abort
#  9         SIGKILL    Die Now (cannot be trap'ped)
#  14        SIGALRM    Alarm Clock
#  15        SIGTERM    Terminate

#Poznamka - signal kill -9 (kill -SIGKILL) je nezachytitelny a ukoncuje proces "natvrdo".

trap 'skonci' 1 2 3 6 15
prerus="ne"

function skonci {
prerus="ano"
}

#############################################################################
#Zacatek cyklu
#############################################################################
for ((;;))
do

#Nedavat tento radek na jine misto. Zacykleni zaruceno, funguje poze SIGKILL (kill -9)
#Nedavat tento radek na jine misto. Zacykleni zaruceno, funguje poze SIGKILL (kill -9)
if [ "$prerus" = "ano" ]
  then    
    caskonec=`date +"%Y%m%d%H%M"`
    echo "$caskonec Program ukoncen. Ukoncuji Sambu na ipsmbserver. Odpojuji eth0:0 " >>"$mylog"
    /etc/rc.d/init.d/smb stop >/dev/null 2>&1
    #Clear ARP Cache
    #Flush all arp enties on interface eth0:0
    ip neigh flush dev "$ethsmbserver"
    #Flush arp entry for all hosts in network 192.168.5.0/24
    ip neigh flush "$ipnet" >/dev/null 2>&1
    #Flush all arp entries:
    #ip neigh flush all
    ifconfig "$ethsmbserver" down >/dev/null 2>&1
    exit 1
fi

sleep 60
cas2=`date +"%Y%m%d%H%M"`

#Pokud nejede ethernet, preskoc na konec skriptu (pred done)
#if ! ping "$ipserver" -c 2 -W3 >/dev/null 2>&1
#  then
#     echo "$cas2 Sit nejede." >>"$mylog"
#     continue
#fi
 
#Pokud nejede ethernet, preskoc na konec skriptu (pred done)
if [ "$(cat /sys/class/net/eth0/carrier)" = "0" ]
  then
    echo "$cas2 Sit nejede." >>"$mylog"
    continue
fi

pgrep smbd >/dev/null 2>&1
clientsmbd=$?
#clientsmb="$?"
#clientsmb=$(($?))

smbclient -N -L "$ipsmbserver" >/dev/null 2>&1
#smbclient -U% -L "$ipsmbserver" >/dev/null 2>&1
serversmbd=$?

#pokud smb na PC nejede a smb na ipsmbserver nejede a ethernet jede, spust smb na ipsmbserver
if [ "$clientsmbd" = "1" ] && [ "$serversmbd" = "1" ] && [ "$(cat /sys/class/net/eth0/carrier)" = "1" ]
  then
    echo "$cas2 Samba na PC nejede a ipsmbserver nejede. Spoustim Sambu na ipsmbserver." >>"$mylog"
    /sbin/ifconfig "$ethsmbserver" "$ipsmbserver"
    /sbin/ifconfig "$ethsmbserver" up
    #Clear ARP Cache
    #Flush all arp enties on interface eth0:0
    ip neigh flush dev "$ethsmbserver"
    #Flush arp entry for all hosts in network 192.168.5.0/24
    ip neigh flush "$ipnet"
    #Flush all arp entries:
    #ip neigh flush all
    #Ping the gateways and DNS to clear the ARP cache
    ping -c 2 -w 3 -I "$ipsmbserver" "$ipdnsserver"
    ping -c 2 -w 3 -I "$ipsmbserver" "$ipgateway"
    #Ping the external broadcast addres to clear the ARP cache
    ping -c 2 -b -w 3 -I "$ipsmbserver" "$ipbcast"
    /etc/rc.d/init.d/smb start
fi

#pokud smbd na PC jede a smbd na ipsmbserver nejede, ukonci smb na PC
#(Spustena Samba, na chvili odpojen ethernetovy kabel)
if [ "$clientsmbd" = "0" ] && [ "$serversmbd" = "1" ]
  then
  echo "$cas2 Samba na PC jede a serversmbd nejede. Ukoncuji Sambu na ipsmbserver." >>"$mylog"
  /etc/rc.d/init.d/smb stop >/dev/null
  #Clear ARP Cache
  #Flush all arp enties on interface eth0:0
  ip neigh flush dev "$ethsmbserver"
  #Flush arp entry for all hosts in network 192.168.5.0/24
  ip neigh flush "$ipnet"
  #Flush all arp entries:
  #ip neigh flush all
  /sbin/ifconfig "$ethsmbserver" down
fi
done


A ano, mělo by se používat ip. Ovšem co se týče dokumentace ip, je to tragické...

Jenda

Re:Sdílení ethernetu přes usb
« Odpověď #13 kdy: 28. 02. 2015, 15:15:19 »
Zastavení vypadá že už fixli. Ještě nefungovávalo filtrování iptables podle toho interface.

A ano, mělo by se používat ip. Ovšem co se týče dokumentace ip, je to tragické...
Co ti tam vadí?

(pozn. posledně když si někdo stěžoval na dokumentaci ip, tak koukal jenom do man ip, a nevšiml si, že na konci jsou další kapitoly jako třeba ip-address. tak jenom jestli to není taky tvůj případ ;))

nobody

Re:Sdílení ethernetu přes usb
« Odpověď #14 kdy: 28. 02. 2015, 23:23:33 »
to je prave ono, dokumentace ip je schizofreni a ma implementovan rebus ;) proc nema "man ip" subsekce ip objektu ale jsou samostatne man pages pro neexistujici commands ? tedy proc informace o "ip link" najdes v manualu ip-link ? proc tedy alespon neni ip-link symlink na ip (a ip s detekci symlinku jako parametr) ? :)