Всем здравствуйте.
Хочется раздавать интернет роутером, в который модемом втыкается android-смартфон.
Дислокация такова. Есть дешёвый андроид-телефон Fly IQ436 ERA Nano 3, и он работает модемом. Сеть раздаёт по Wi-Fi, и все бы хорошо, но подключиться к ней можно только с ноутбуков. Другой смартфон вместо коннекта попадает в цикл «Получение IP-адреса» — «Отключение» — «Получение IP-адреса» — ...
На помощь спешит роутер Asus WL-500gP V2, с прошивкой от Олега (1.9.2.7-rtn-r5450, относительно свежая). У него с Wi-Fi все хорошо, а в соответствующий порт можно воткнуть этот самый телефон в режиме USB-модема. До этого в роутере стоял модем в стандартном режиме ppp, а вот андроиды — звери хитрые, поэтому определяются, как отдельный usb-маршрутизатор. Вот дальше и описаны мучения, что дружить роутер с андроидом не хотят. Итак.
В веб-интерфейсе отмечаю, что USB-девайсы надо трактовать в роли Ethernet over USB. Подключаю-перезагружаю, и никакого интернету не появляется, поэтому переезжаем в консоль.
Там видно, что появился интерфейс usb0, и это очень хорошо.
ifconfig
...
usb0 Link encap:Ethernet HWaddr AA:5F:D4:31:FF:1A
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3 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:196 (196.0 B) TX bytes:0 (0.0 B)
...
но IP-шника у него нет, что не так здорово.
Командую автоматическое получение адреса.
udhcpc -i usb0 -t 1
В идеале должна получиться последовательность DHCP-сообщений Discover-Offer-Request-Ack, но она обрывается сразу же на «Sending discover...»
Подробности узнаю tcpdump-ом.
tcpdump -vvv -i usb0
Он говорит, что по usb0 уходит запрос Discover, приходит ответ Offer (Your-IP 192.168.42.120, Server-IP 192.168.42.129), т.е. dhcp все-таки работает, это раз, и у модема IP-шник 192.168.42.129, это два; но на этом и все, как будто до самой утилиты udhcpc этот ответ не доходит.
На usb0 также появляется несколько одинаковых ARP-запросов, и больше ничего.
01:11:35.866130 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.42.120 tell 192.168.42.129, length 28
Ну ладно, попробую заполнить адрес руками.
ip addr add 192.168.42.120/24 brd + dev usb0
ip route add default via 192.168.42.129
route
Kernel IP routing table
192.168.42.0 * 255.255.255.0 U 0 0 0 usb0
192.168.1.0 * 255.255.255.0 U 0 0 0 br0
127.0.0.0 * 255.0.0.0 U 0 0 0 lo
default 192.168.42.129 0.0.0.0 UG 0 0 0 usb0
По идее, должны пойти пинги до самого модема, но не идут, виснут.
ping -c 1 192.168.42.129
PING 192.168.42.129 (192.168.42.129): 56 data bytes
--- 192.168.42.129 ping statistics ---
1 packets transmitted, 0 packets received, 100% packet loss
И только tcpdump этих пингов показывает, что нечто в сети все же есть.
01:20:29.953312 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.42.129 tell 192.168.42.120, length 28
01:20:29.953873 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.42.129 is-at b2:9b:85:4e:03:85 (oui Unknown), length 28
В принципе, ответы мог резать iptables, но его я отключал в веб-интерфейсе, а потом в консоли выполнял нагугленные команды:
#!/bin/sh
echo "Stopping firewall and allowing everyone..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
но нет, это тоже не помогает.
Сам телефон работает. Если его USB-шно подключить к ноуту, то Network Manager его сразу подхватывает; если отключиться от этой usb-net сети, и дать вручную две команды — присвоить IP и указать дефолтный путь — то, опять же, все работает; по крайней мере, пинги до телефона (192.168.42.129) доходят. Правда, tcpdump-ом зацепилась только последняя dhcp-пара, сообщения Request и ACK; как происходил Discover — не знаю.
Резюме: драйвер на модем есть, сетевой интерфейс usb0 есть; а вот хотя бы пингануть модем на 192.168.42.129 не получается.
Итак, вопросы.
- Кто такой Олег из названия прошивки?
- Куда еще можно глянуть? Напомню, udhcpc не сработал, ручные команды ip addr && ip route не спасли.
- Может ли безобразить iptables, и как это еще проверить?