Собственно, все началось когда в компанию, где я работаю, позвонил менеджер интернет провайдера «Простор Телеком» (ранее Квантум) и предложила интересные условия на доступ в Интернет. У нас уже было два канала от Билайна и Дом.Ру-Интерзет, но почему бы не попробовать еще, тем более что Простор-Телеком предложил потестировать их канал 20Мб/с бесплатно в течение 2-х недель.
В качестве шлюза у меня используется сервер, на котором стоит Debian; на борту — 4 сетевые карточки, уже сделана балансировка сети, т.е. трафик распределяется примерно поровну между двумя существующими провайдерами. Собственно оба канала (Билайн и Дом.Ру) по документам обеспечивают скорость 20Мб/c, по факту же оказалось, что скорость через канал Билайн составляет 20..30Мб/с, а через канал Дом.Ру — 60..80Мб/с, в зависимости от времени суток, причем входящий поток обычно чуть быстрее исходящего. Замеры скорости по обоим каналам производились как популярными инструментами на клиентах (http://yandex.ru/internet/ , http://www.speedtes.net/, http://2ip.ru/speed/), так и анализом графиков сетевой активности на самом шлюзе (установлен Munin).
Итак, в один из рабочих дней в наш офис протянули канал от Простор-Телекома. Проверили доступ и скорость указанными выше инструментами, все, вроде ОК.
Мой следующий шаг — надо подключить новый канал к свободному интерфейсу на шлюзе и протестировать в боевых условиях.
Соответственно, определил, какие у меня интерфейсы есть:
# ifconfig -a
Проверил сохраненные описания интерфейсов:
# cat /etc/network/interfaces
и откорректировал их.
На моем шлюзе свободным оказался — eth4, прописал на него необходимые сетевые настройки и поднял его:
# ifconfig eth4 X.X.X.X netmask 255.255.255.0 up
Проверил появление интерфейса среди активных и его настройки:
# ifconfig
# ip a
# ip link ls up
Проверил существующие таблицы роутинга:
# cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
11 T1
12 T2
13 T3
Таблица T1 оказалась пустой:
# ip route show table T1
Прописал необходимые маршруты:
ip route add X.X.X.0/24 dev eth4 src X.X.X.X
Добавил маршрут в таблицу роутинга T1:
# ip route add default via X.X.X.1 dev eth4 table T1
# ip route add X.X.X.0 dev eth4 src X.X.X.X table T1
Добавил правило роутинга:
# ip rule add from X.X.X.X lookup T1
Проверили работу:
#ping -c 3 -I eth4 ya.ru
Заработало, похоже.
Добавил правило, чтобы определенная виртуалка ходила через тестовый канал
# ip rule add from 192.168.0.46 lookup T1
Также добавил правило для брандмауера: изменил конфиг /etc/arno-iptables-firewall/firewall.conf , добавил в строку внешних интерфейсов eth4
EXT_IF=»eth0 eth3 eth4″
Все настройки сделаны, теперь с машины с адресом 192.168.0.46 я выхожу в Интернет через новый тестовый канал. И тут меня ждало разочарование: вместо ожидаемых 20Мб/с я вижу скорость всего на уровне 1-2, максимум — 4Мб/с. Причем измеряя скорость на отдельно стоящей Windows машине через тот же самый провод я вижу заявленные 20Мб/с. Непонятки какие-то и не особо много идей, как решать проблему…
И дальше начинается, увы, шаманство. Погуглил немного, продолжаю искать решение:
# lspci | grep Eth
03:03.0 Ethernet controller: D-Link System Inc DGE-528T Gigabit Ethernet Adapter (rev 10)
04:03.0 Ethernet controller: Intel Corporation 82541GI Gigabit Ethernet Controller (rev 05)
04:04.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
04:05.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 10)
У меня 2 одинаковых интерфейса, но, фактически, работают они по разному.
Этот на канале Билайна, с ним все в порядке:
# ethtool -i eth0
driver: 8139too
version: 0.9.28
firmware-version:
bus-info: 0000:04:05.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no
А второй такой же, для канала Простор-Телеком, работает «криво»:
# ethtool -i eth4
driver: 8139too
version: 0.9.28
firmware-version:
bus-info: 0000:04:04.0
supports-statistics: yes
supports-test: no
supports-eeprom-access: no
supports-register-dump: yes
supports-priv-flags: no
Сравниваю дальше:
# ethtool eth0
Settings for eth0:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised pause frame use: No
Advertised auto-negotiation: Yes
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Link partner advertised pause frame use: Symmetric
Link partner advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 32
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: d
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
# ethtool eth4
Settings for eth4:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: Not reported
Advertised pause frame use: No
Advertised auto-negotiation: No
Speed: 10Mb/s
Duplex: Full
Port: MII
PHYAD: 32
Transceiver: internal
Auto-negotiation: off
Supports Wake-on: pumbg
Wake-on: p
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
и обнаружил, что для вновь поднятого интерфейса по какой-то причине стоит скорость 10Mb/s и Auto-negotiation: off
Изменил настройки:
# ethtool —change eth4 autoneg on
# ethtool eth4
Settings for eth4:
Supported ports: [ TP MII ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Supported pause frame use: No
Supports auto-negotiation: Yes
Advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Advertised pause frame use: Symmetric
Advertised auto-negotiation: Yes
Link partner advertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
Link partner advertised pause frame use: No
Link partner advertised auto-negotiation: Yes
Speed: 100Mb/s
Duplex: Full
Port: MII
PHYAD: 32
Transceiver: internal
Auto-negotiation: on
Supports Wake-on: pumbg
Wake-on: p
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
Скорость на интерфейсе автоматически установилась в 100Mb/s и проверки на клиенте привели к ожидаемому результату: