Для начала давай определимся со способами распределения трафика между несколькими каналами. Во-первых, можно тупо делить его «пополам» — пакет туда, пакет сюда. Во-вторых, можно использовать «географическое» деление — либо внешнее (когда трафик делится в зависимости от адреса назначения), либо внутреннее (когда рабочий канал определяется источником: бухгалтерию и себя любимого через 1-й, всех остальных через 2-й). В-третьих, можно устроить дележ по типу трафика, скажем, выселив SMTP на отдельный канал и освободив тем самым основной для беспробудного серфинга.
Очевидно, что динамическая природа второго канала не позволит нам использовать его для предоставления в Сеть собственных сервисов (например, веб-сайта), но в дальнейшем на это мы не будем отвлекаться.
Схема «полигона» представлена на рисунке 1. Внутренняя сеть — 172.16.0.0/16, именно ее мы и должны будем выпускать в интернет. Деление на «подсети» сделано исключительно для удобства, реальные подсети выделять не будем (т.е. маска подсети на всех машинах будет 255.255.0.0). Это позволит нам не возиться с внутренней маршрутизацией, а некогда серьезная проблема перегрузки сегмента сети гуляющими по всем портам пакетами, преимущественно из-за которой сеть и дробилась на подсети, канула в Лету вместе с бестолковыми концентраторами (aka хабы). Наш маршрутизатор имеет две сетевые карты для внешних соединений — на одну мы сразу получаем реальный IP-адрес 100.100.100.102 (шлюз провайдера — 100.100.100.101), во вторую воткнут ADSL-модем с адресом 192.168.1.1 (с провайдером он соединяется по PPPoE, динамически получает некоторый IP для работы и выполняет NAT-преобразование на этот адрес; впрочем, нам это не интересно — главное, что адрес 192.168.1.1 для исходящего трафика мы можем рассматривать как реальный).
За основу возьму свою любимую FreeBSD и пакетный фильтр ipfw. Возможно, это не самый лучший вариант для построения шлюза с несколькими внешними соединениями, зато рассмотренные принципы с высокой долей вероятности будут справедливы и для остальных никсов.
Сразу расставим точки над «ай» — есть вещи, которые не в наших силах. Допустим, на твоем сервере работает Apache, и если у какого-то далекого (или недалекого) клиента маршрут к нему ведет через твой интерфейс rl0, то хоть тресни, а трафик будет идти через rl0, и никак иначе. Ну да, можно, конечно, вспомнить про автономные системы, протокол BGP, граничные маршрутизаторы и прочие премудрости. Но, как ты думаешь, сколько в мире найдется провайдеров, готовых бесплатно возиться с твоей маршрутизацией, если таких клиентов как ты, у них тысячи? Так что сразу оговорюсь, что не буду рассматривать способы, требующие особого отношения со стороны провайдера, и покажу лишь то, что можно сделать самостоятельно, имея несколько «обычных» подключений.
Если автомагистраль перестает справляться с резко возросшим потоком транспорта, то эта проблема обычно решается строительством дополнительных полос для движения. К счастью, ввести в эксплуатацию дополнительные «полосы» доступа в интернет гораздо проще, чем расширять проезжую часть. Правда, пакеты данных не столь разумны, как водители, так что об оптимальном заполнении всех имеющихся каналов придется позаботиться самому.
Добиваемся эффективной работы нескольких интернет-каналов во FreeBSD
SYN/ACK » X_05_2008: Как два линка обуздать
Комментариев нет:
Отправить комментарий