Cоздание виртуального шлюза 3G с помощью виртуальной машины под управлением QEMU и USB-модема Huawei

USB-модем Huawei (12d1:1506) продается под разными брендами и моделями в нашем случае Мегафон М21-4. Поддержка Linux на словах вроде бы есть, но на практике - нет. Существует множество статей, в которых расписано как активировать данный модем в Ubuntu, но к сожалению предлагаемые в статьях методы не позволяют активировать модем в Ubuntu. В Windows модем заводится без проблем.

Так как содержать постоянно запущенной физическую машину - шлюз, немного накладно с точки зрения затрат на электроэнергию и сопровождение, гораздо проще развернуть виртуальную машину - шлюз.

Так как гипервизор QEMU свободно распространяется, поддерживает запуск виртуальных машин Windows, а также позволяет пробрасывать USB-устройства хоста было принято решение использовать его для создания и управления виртуальной машиной шлюзом.

В результате проведенного эксперимента, на компьютере хосте с поддержкой аппаратной виртуализации и под управлением операционной системы Ubuntu 14.04 LTS удалось развернуть на виртуальной машине QEMU под управлением операционной системы Windows XP 3G-шлюз. Доступ к Интернет через 3G-шлюз, осуществлялся через виртуальную изолированную сеть.

Тестовый стенд

Схема

IP-адреса

192.168.1.0/24 - виртуальная сеть virtlan1  
192.168.1.1 - адрес шлюза
192.168.1.2 - адрес хоста

Хост

Аппаратная платформа: ASUS E35M1-M PRO (Системная плата с интегрированным процессором)
ОС: Ubuntu 14.04
Установленные пакеты: QEMU, Libvirt, Virt-Manager.

Виртуальная машина

ОС: Windows XP

Последовательность действий:

  1. Устанавливаем на компьютер - хост Ubuntu 14.04, пакеты  qemu, libvirt, virt-manager.
  2. С помощью virt-manager создаем виртуальную изолированную сеть virtlan1 и изменяем IP-адрес хоста на 192.168.1.4
  3. С помощью virt-manager создаем виртуальную машину WindowsXP и подключаем её к виртуальной изолированной сети
  4. С помощью virt-manager пробрасываем в виртуальную машину USB-модем. Причем USB-контроллер виртуальной машины должен работать в режиме "USB2"
  5. В виртуальной машине устанавливаем драйвера на USB-модем, проверяем Интернет-соединение и активируем режим шлюза
  6. На хосте настраиваем выход в Интернет через виртуальную машину шлюз.
    1. Прописываем маршрут по умолчанию через виртуальную машину
    2. Прописываем разрешение доменных имен

Внимание:  Для установки пакетов без локального Интернет-соединения можно воспользоваться другим компьютером, как шлюзом, либо воспользоваться локальной копией репозитория, например на внешнем жестком диске.

Приложение. Описание некоторых действий

Активация режима шлюза в Windows XP

Установка маршрута по-умолчанию через виртуальную машину и смена IP-адреса хоста


Выполняем команду:

EDITOR=nano virsh net-edit virtual1

и просто редактируем XML-параметры. Заменяем

<network>
<name>virtual1</name>
<uuid>90576ba8-7ee2-4ba3-b993-1c885f11515a</uuid>
<bridge name='virbr1' stp='on' delay='0'/>
<mac address='52:54:00:36:2b:66'/>
<ip address='192.168.1.1' netmask='255.255.255.0'>
</ip>
</network>

на

<network>
<name>virtual1</name>
<uuid>90576ba8-7ee2-4ba3-b993-1c885f11515a</uuid>
<bridge name='virbr1' stp='on' delay='0'/>
<mac address='52:54:00:36:2b:66'/>
<ip address='192.168.1.2' netmask='255.255.255.0'>
</ip>
<route address='0.0.0.0' prefix='0' gateway='192.168.1.1'/>
</network>

Изменениявступят в силу после перезагрузки

Проверка правильности определения маршрутов осуществляется с помощью команды route:

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.1.1 0.0.0.0 UG 1 0 0 virbr1
192.168.1.0 * 255.255.255.0 U 0 0 0 virbr1
192.168.122.0 * 255.255.255.0 U 0 0 0 virbr0

Настройка разрешения доменных имен DNS

Если файл /etc/resolv.conf управляется службой resolvconf, в файл /etc/resolvconf/resolv.conf.d/head добавляем строчку

nameserver 192.168.1.1

перезагрузите службу resolvconf следующей командой от имени root

service resolvconf restart

Если файл /etc/resolv.conf простой текстовый файл, просто добавляем строчку

nameserver 192.168.1.1