Puncte:3

Ce poate cauza „Rețeaua nu este accesibilă” atunci când legătura este activată, ruta este acolo și masca de rețea este corectă?

drapel cn

Ce ar putea cauza asta?

$ sudo ip route show                                                                                                                                
192.168.100.0/24 dev usb0 scope link                                                                                          
$ sudo ip addr show usb0 
85: usb0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
Qlen implicit de grup NECUNOSCUT 1000
link/ether 16:3d:0a:3f:3b:e6 brd ff:ff:ff:ff:ff:ff                                                                                                                    
inet 192.168.100.86/24 brd 192.168.100.255 scope global usb0                                                                                                             
valid_lft pentru totdeauna preferred_lft pentru totdeauna                                                                                                                            
inet6 fe80::143d:aff:fe3f:3be6/64 scope link                                                                                                                             
valid_lft pentru totdeauna preferred_lft pentru totdeauna                                                                                                                        
$ sudo ip route obține 192.168.100.2
RTNETLINK răspunde: Rețeaua este inaccesibilă

Acesta este pe dispozitivul meu gazdă, rulând Android pe un nucleu Linux 4.4. Mi-am conectat gadgetul USB (un dispozitiv Mendel Linux). A apărut interfața usb0; L-am ridicat și am rulat udhcpc pe el. Gadgetul mi-a atribuit 192.168.100.86/24 și s-a făcut reclamă prin mDNS ca 192.168.100.2, așa că știu că linkul funcționează. Am doborât toate celelalte interfețe gazdă pentru a fi sigur că nu fură ruta. Dar dacă încerc să-l pun ping sau să-i fac ssh, primesc „Rețeaua este inaccesabilă”.

Când fac aceiași pași pe o altă gazdă, non-android, funcționează bine. Știu că Android are niște reguli iptables ciudate (de exemplu, pentru urmărirea utilizării datelor per-uid), dar nu am crezut că asta ar afecta tabelul de rutare (și ștergerea lor pe toate nu pare să ajute). Există, de asemenea, SElinux, dar am crezut că este doar o chestie de sistem de fișiere. Ce altă caracteristică obscure (pentru mine) Linux ar putea să mă blocheze aici?

Editați pentru a adăuga, după cum ați solicitat:

regula $ ip
0: din toate căutările locale
999: din toate căutările fwmark 0xa/0xffff 2454
10000: din toate căutările fwmark 0xc0000/0xd0000 99
10500: din toate iif lo oif ccmni1 uidrange 0-0 căutare 1003
13000: din toate fwmark 0x10063/0x1ffff iif la căutare 97
13000: din toate fwmark 0xd006c/0xdffff iif se caută 1003
14000: din toate fwmark 0xc0000/0xc0000 iif lo oif ccmni1 căutare 1003
15000: din toate căutările fwmark 0x0/0x10000 99
16000: din toate căutările fwmark 0x0/0x10000 98
17000: din toate căutările fwmark 0x0/0x10000 97
32000: din toate inaccesibile
$ ip route show table local
difuzare 127.0.0.0 dev la proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
difuzare 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
difuzare 192.168.100.0 dev usb0 proto kernel scope link src 192.168.100.86
local 192.168.100.86 dev usb0 proto kernel scope host src 192.168.100.86
difuzare 192.168.100.255 dev usb0 proto kernel scope link src 192.168.100.86
$ ip route arată tabelul 2454
implicit dev ccmni1 proto static
$ ip route arată tabelul 99
$ ip route arată tabelul 1003
$ ip route arată tabelul 97
$ ip route arată tabelul 99
$ ip route arată tabelul 98
$
A.B avatar
drapel cl
A.B
Adăugați rezultatul „reguli ip” în întrebarea dvs. Și pentru fiecare intrare, cu excepția celor cu preferința 0, 32766 și 32767, dacă fac referire la un tabel de rutare (căutare cuvinte cheie), adăugați și acest tabel de rutare (`ip route show table xxx`).
Puncte:2
drapel cl
A.B

Android folosește o mulțime de reguli și tabele de rutare, probabil unul pentru fiecare aplicație.

După cum se poate vedea, fără o astfel de regulă adăugată și probabil fwmark-ul corespunzător, un pachet va atinge regula de rutare 32000: de neatins.

Este puțin fragil să faci ceva manual peste acest mecanism. În special, regula de rutare 10500 permite (numai) root să folosească interfața de ieșire ccmni1, dar oif nu este despre a permite selectarea unui pachet la această interfață, ci este despre a permite unui pachet dintr-un socket legat de această interfață (folosind SO_BINDTODEVICE) pentru a fi selectat (oif nu este un echivalent direct al iif care este folosit pentru pachetele rutate și dacă iată este, de asemenea, un caz special pentru pachetele nedirecționate).

Multe reguli primesc un marcaj de firewall, probabil stabilit de un complex echivalent iptables reguli pentru a selecta regulile de rutare specifice pentru fiecare aplicație (și UID-ul său specific). Bănuiesc că există API-uri Android specifice pentru a înregistra astfel de reguli atunci când este instalată o aplicație.

Dacă doriți să permiteți root să folosească mai întâi tabelul principal de rutare evitând astfel de neatins soarta, printre multiple alegeri posibile:

regulă ip add pref 998 uidrange 0-0 căutare principal

Sau dacă nu-ți pasă că orice utilizator poate folosi orice aplicație usb0 pur şi simplu:

regulă ip add pref 998 căutare principală

Acest lucru probabil nu se va integra bine cu sistemul Android, care ar putea amesteca regulile atunci când aplicațiile sunt instalate sau pornite și nu se poate spune ce a mai rămas. iptables/nftables (sau chiar de-a lungul SELinux, tc etc.) despre blocarea accesului.Chiar și legarea la o priză poate fi restricționată de un mecanism suplimentar (vezi, de exemplu: CONFIG_ANDROID_PARANOID_NETWORK).

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.