Как использовать сетевой интерфейс в качестве пользователя без полномочий root?

Я хочу обмениваться данными между моим Android-устройством и Linux-боксом по IP через режим сетевого интерфейса USB. Я использую устройство OnePlus One с ночными сборками CM12.1. Он рутирован, и для SELinux установлено значение PERMISSIVE. Разделение пространства имен монтирования также отключено.

Я подключил свой OPO к своему компьютеру с Linux и перевел его в режим сетевого интерфейса с помощью некоторых хакерских действий с отражением Java и системного разрешения MANAGE_USB. (Я не использую стандартную настройку модема, потому что хочу использовать свою Linux-машину в качестве шлюза, а не наоборот). Раньше я ip addr addдобавлял IP-адрес на обоих концах (Linux-бокс и OPO), а затем добавлял маршрут ip routeчерез мой Linux-бокс для доступа в Интернет. Я также включил переадресацию IPv4 на стороне Linux, а также включил все необходимые iptablesправила.

Моя проблема заключается в следующем: rootможет общаться только через интерфейс. Например, с моим Linux-боксом at 10.42.0.1и моим OPO 10.42.0.2через сетевой интерфейс USB запуск ping 10.42.0.1или ping 8.8.8.8на стороне Android без запуска из suоболочки не будет работать . Выполнение точно таких же команд, как и rootфункций, идеально. Те же самые команды через интерфейс WiFi на стороне Android прекрасно работают без рута.

Я предполагаю, что это какая-то новая функция безопасности, реализованная в Android 5.0/5.1, так как она отлично работала в KitKat. Кто-нибудь точно знает, что это может быть?

Ответы (1)

Я тоже столкнулся с этим. Это связано с политиками маршрутизации, из-за которых «основная» таблица маршрутизации не используется ни для одного пользователя, кроме root.

Это сработало для меня, но я все еще изучаю последствия этого в широком смысле. Это не хуже, чем то, что делает мой Linux-бокс, так что вот что.

 ip rule add from all lookup main pref 99