Я пытаюсь протестировать приложение Android в эмуляторе на веб-сервере на хост-компьютере. Работая на Mac (El Capitan), у меня есть предварительно настроенный виртуальный мост с подключенным к Интернету сетевым адаптером Ethernet. Я запускаю эмулятор с:
sudo emulator -avd Nexus_9 -qemu -netdev tap,id=mynet0,script=tapup.sh,
downscript=tapdown.sh -device virtio-net-pci,netdev=mynet0
Сценарий tapup.sh настраивает переадресацию и подключает TAP к мосту следующим образом:
sysctl net.link.ether.inet.proxyall=1
sysctl net.inet.ip.forwarding=1
sysctl net.inet.ip.fw.enable=1
ifconfig bridge1 addm $1
ifconfig $1 up
После запуска эмулятора я запускаю клиент dhcp из оболочки adb:
adb shell "su root dhcpclient -i eth1&"
Оттуда я могу пропинговать эмулятор с хоста (mac:~ user$ ping 192.168.0.5
) и пинговать хост с эмулятора (generic_x86_64:/ # ping 192.168.0.4
). Примечание: я могу пинговать хост только как root (su), а не как обычный пользователь; если я пытаюсь получить «подключиться: сеть недоступна».
С этой настройкой я не могу подключиться к веб-серверу, работающему на хосте, ни к Интернету (хотя без моста и TAP я все еще не мог подключиться к Интернету, но мог получить доступ к веб-серверу). Любые идеи о том, почему я не могу получить доступ к веб-серверу?