Назад | Перейти на главную страницу

Настроить прямое подключение к сети Ethernet Linux <--> Android

У меня Android 6.0 SoC (ODroid C2), что я пытаюсь напрямую подключиться к встроенной машине Linux через обычный Ethernet или Ethernet через USB (через модуль g_ether)

На машине Linux работают две службы, к которым мне нужно получить доступ с устройства Android: одна - это веб-сервер, работающий на порту 8088, а другая - служба очереди сообщений (ZeroMQ)

Когда у меня есть и устройство Linux, и устройство Android, подключенные к нашей доменной сети, я могу подключиться к веб-службе в браузере с Android или моей машины разработчика Windows, а также могу подключиться к портам очереди сообщений из любой среды. Что мне нужно сделать сейчас, так это включить Android-устройство для прямого подключения к Linux-машине (Android-устройство будет запускать управляющее приложение с графическим интерфейсом для Linux-машины).

Вот что я пробовал:

  1. Подключили две машины через прямой Ethernet и перезагрузили обе.
  2. Очистил кеш IP-адресов на обеих машинах и назначил известные IP-адреса на каждой стороне с использованием префикса локальной ссылки
    • Со стороны Linux:
# ip addr flush eth0
# ip addr add 169.254.1.1/16 dev eth0
# ip addr show eth0
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:06:0c:01:10:27 brd ff:ff:ff:ff:ff:ff
    inet 169.254.1.1/16 scope global eth0
       valid_lft forever preferred_lft forever
# ip route show
169.254.0.0/16 dev eth0  src 169.254.1.1
root@odroidc2:/ # ip addr flush eth0
root@odroidc2:/ # ip addr add 169.254.1.2/16 dev eth0
root@odroidc2:/ # ip addr show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:1e:06:35:be:c8 brd ff:ff:ff:ff:ff:ff
    inet 169.254.1.2/16 scope global eth0
       valid_lft forever preferred_lft forever
root@odroidc2:/ # ip route show
169.254.0.0/16 dev eth0  proto kernel  scope link  src 169.254.1.2
  1. Две машины теперь могут пинговать друг друга и разрешили аппаратные адреса друг друга в таблице arp.
    • Сторона Linux:
# ping -c 5 169.254.1.2
PING 169.254.1.2 (169.254.1.2) 56(84) bytes of data.
64 bytes from 169.254.1.2: icmp_seq=1 ttl=64 time=3.83 ms
64 bytes from 169.254.1.2: icmp_seq=2 ttl=64 time=2.25 ms
64 bytes from 169.254.1.2: icmp_seq=3 ttl=64 time=2.15 ms
64 bytes from 169.254.1.2: icmp_seq=4 ttl=64 time=2.20 ms
64 bytes from 169.254.1.2: icmp_seq=5 ttl=64 time=2.21 ms

--- 169.254.1.2 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4011ms
rtt min/avg/max/mdev = 2.159/2.532/3.836/0.655 ms
# arp -a
? (169.254.1.2) at 00:1e:06:35:be:c8 [ether] on eth0
root@odroidc2:/ # ping -c 5 169.254.1.1
PING 169.254.1.1 (169.254.1.1) 56(84) bytes of data.
64 bytes from 169.254.1.1: icmp_seq=1 ttl=64 time=2.27 ms
64 bytes from 169.254.1.1: icmp_seq=2 ttl=64 time=1.56 ms
64 bytes from 169.254.1.1: icmp_seq=3 ttl=64 time=1.75 ms
64 bytes from 169.254.1.1: icmp_seq=4 ttl=64 time=1.69 ms
64 bytes from 169.254.1.1: icmp_seq=5 ttl=64 time=1.82 ms

--- 169.254.1.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4007ms
rtt min/avg/max/mdev = 1.565/1.823/2.278/0.242 ms
root@odroidc2:/ # arp -a
? (169.254.1.1) at 00:06:0c:01:10:27 [ether]  on eth0
  1. Перезапустил процесс приложения на стороне Linux, где привязаны конечные точки веб-службы / очереди сообщений.
  2. Однако, когда я пытаюсь поразить либо конечную точку веб-службы, либо конечную точку (и) очереди сообщений с Android с помощью 169.254.1.1 адрес для машины Linux, ничего не происходит, пытаюсь ли я ударить 169.254.1.1:8088 в браузере для веб-сервера или отправив запрос на соединение в очередь сообщений из нашего управляющего приложения. Я попытался посмотреть исходящий трафик с устройства Android через tcpdump -i eth0 -Q out но он вообще не показывает исходящих пакетов, например, ни браузер, ни управляющее приложение даже не пытаются установить соединение.

Итак, вопрос в том, что мне здесь не хватает? Как я уже сказал, исходящие пакеты вообще не генерируются, когда я пытаюсь подключиться к любой из конечных точек - в браузере я получаю сообщение ERR_INTERNET_DISCONNECTED сообщение об ошибке - есть ли системная настройка Android, которую мне не хватает, которую мне нужно изменить, прежде чем система даже попытается исходящие подключения, если у нее нет действующего подключения к Интернету? Мне также интересно, не повезет ли мне, если я буду использовать более новую версию ядра Android - устройство, которое мы используем сейчас, работает под управлением Android 6.0 в образе, предоставленном производителем оборудования, но эта итерация оборудования будет продлится до конца этого года, так что это не сработает для нашего графика выпуска, и в какой-то момент мы будем обновляться до более нового устройства, возможно, раньше, чем позже, если Android 6 будет сдерживать нас.