Я уже давно пользуюсь Linux-боксом в качестве роутера. Ничего особенного, просто включите пересылку в ядре, включите маскарадинг и настройте iptables, чтобы пробить несколько дыр в брандмауэре.
Недавно мой друг указал на проблему с производительностью. Кажется, что одиночные соединения TCP имеют очень низкую производительность. Вы должны открыть несколько параллельных TCP-соединений, чтобы получить приличную скорость.
Например, у меня есть интернет-соединение 10 Мбит. Когда я загружаю файл из известного быстрого источника, используя что-то вроде DownThemAll! Расширение для Firefox (которое открывает несколько параллельных TCP-соединений). Я могу получить его, чтобы максимально увеличить пропускную способность моего нисходящего потока на уровне около 1 МБ / с. Однако, когда я загружаю тот же файл с помощью встроенного в Firefox менеджера загрузок (использует только одно TCP-соединение), он запускается быстро, а скорость увеличивается до тех пор, пока не достигнет отметки от 100 КБ / с до 350 КБ / с.
Я проверил внутреннюю сеть, и у нее, похоже, нет проблем. Все проходит через переключатель 100 Мбит. Я также запускал iperf как изнутри (от маршрутизатора до моего рабочего стола), так и извне (от моего рабочего стола до Linux-бокса, которым я владею в сети) и не видел никаких проблем. Он достигает около 1 МБ / с, как и должно быть. Speedtest.net также сообщает о скорости 10 Мбит.
Загрузка на машине с Linux все время составляет около 0,00, 0,00, 0,00, и у нее много свободной оперативной памяти. Это старый ноутбук с процессором Pentium M 1,6 ГГц и 1 ГБ оперативной памяти. Внутренняя сеть подключена к встроенному сетевому адаптеру Intel, а кабельный модем подключен к 32-разрядной сетевой карте Netgear FA511 PCMCIA.
Я думаю, что проблема с пересылкой пакетов в маршрутизаторе, но я, честно говоря, не уверен, где проблема может быть. Есть ли что-нибудь, что могло бы существенно замедлить один поток TCP?