У меня есть хост VMWare ESXi, подключенный к быстрой сети. На хосте работают две виртуальные машины:
Шлюз имеет два сетевых интерфейса, один из которых подключен к внешней сети (vSwitch0), а другой - к внутренней сети сервера (vSwitch1). Оно имеет Firehol установлен и выполняет NAT и переадресацию портов для внутреннего клиентского компьютера.
Клиентская машина имеет внутренний IP-адрес и подключается к Интернету через шлюз. Все работает хорошо, но скорость передачи от клиента к Интернету очень низкая, менее 30 КБ / с. Передача как на шлюз в Интернет, так и из него происходит быстро (100 Мбит), как и трафик из Интернета к клиенту. Я попытался сделать дамп сети, чтобы увидеть, где может быть проблема, но ничего не нашел. Все выглядит так, будто очередь идет медленно.
Кроме того, скорость передачи между двумя виртуальными машинами составляет почти полный гигабит. Так что проблема не в этом. Обе машины работают под управлением Debian Lenny без особых модификаций. Я использую open-vm-tools для паравиртуализированной сети VMXNET.
Я нашел решение этой проблемы.
Для полностью внутренней сети (которая не подключена к какому-либо физическому сетевому интерфейсу) вам необходимо отключить разгрузку сегментации TCP изнутри ОС.
Это простая команда:
ethtool -K <interface> tso off
После этой команды моя скорость передачи увеличилась с 30 кб / с до 100 Мбит.
Вы пробовали использовать другой тип виртуальной сетевой карты? Мне кажется, что эмуляция E1000 работает неплохо, может, она основана на драйверах?