Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

Мини-HOWTO: Совместное использование мостов и Firewall в Linux
Пред.След.

Мосты

Программы

Возьмите утилиту настройки мостов с домашних страниц Alan Cox. Это та же ссылка, что и в документе Chris. Я просто не знал, что это ftp, а не http URL ...

Литература для предварительного прочтения.

Прочтите HOWTO: Несколько Ethernet-карт, и вы найдете там несколько советов о том, как заставить работать несколько сетевых карт одновременно.

Более подробные советы по "магии загрузки системы", которая может понадобиться, вы найдете в HOWTO: Приглашение системы при загрузке.

Конечно можно обойтись без чтения HOWTO: Сеть-2, хотя это очень хороший и объемный труд, и вы сможете почерпнуть из него все необходимые детали.

Конфигурация загрузки

В литературе, упомянутой выше, вы прочтете, что вам надо подготовить ядро к обнаружению второй сетевой карты в процессе загрузки, добавив в ваш файл /etc/lilo.conf, и затем перезапустив lilo:

append = "ether=0,0,eth1" 

Обратите внимание на "eth1". "eth0" - это первая карта. "eth1" - соответственно вторая. Вы всегда можете добавить эти параметры в строку, которую вам предлагает lilo в самом начале. Ниже приведен пример для трех карт:

linux ether=0,0,eth1 ether=0,0,eth2 

Я лично использую loadlin для загрузки моего ядра из DOS:

loadlin.exe c:\vmlinuz root=/dev/hda3 ro ether=0,0,eth1 ether=0,0,eth2 

Заметьте, что этот способ заставляет ядро автоматически определять параметры карт при загрузке. Это не сработает, если драйвера сетевых карт собраны у вас в виде modules (это сделано из соображений устойчивости, так как в этом случае нельзя определить порядок установки карт), поэтому, в случае использования модулей, вам придется добавить соответствующие номера IRQ и портов в параметры драйвера в файл /etc/conf.modules. У меня записано следующее

alias eth0 3c509
alias eth1 de620
options 3c509 irq=5 io=0x210
options de620 irq=7 bnc=1 

Вы можете просто выяснить, используются ли в вашей системе модули, набрав "ps -aux", и поискать там kerneld , а также проверив подкаталоги каталога /lib/modules на предмет наличия в нем .o файлов. Вас интересует подкаталог, имя которого вам даст команда uname -r. Если у вас есть kerneld и/или foo.o, тогда исправьте файл /etc/conf.modules и внимательно прочитайте man depmod.

Заметьте, что до последней (2.0.25) версии ядра драйвер карты 3c509 не мог использоваться в виде модуля более одного раза. Я видел патч, который это исправлял. Возможно, когда вы это читаете, ядро уже исправлено.

Конфигурация ядра

Пересоберите ядро, разрешив в нем опцию "мосты".

CONFIG_BRIDGE=y 

Я лично пересобрал ядро также с поддержкой firewall и IP-переадресации, а также с маскарадингом и т.п. Это необходимо, если вам нужен и firewall тоже...

CONFIG_FIREWALL=y           
CONFIG_NET_ALIAS=y          
CONFIG_INET=y               
CONFIG_IP_FORWARD=y         
CONFIG_IP_MULTICAST=y       
CONFIG_IP_FIREWALL=y        
CONFIG_IP_FIREWALL_VERBOSE=y
CONFIG_IP_MASQUERADE=y      

Вам, вероятнее всего, нужно не все. Все что вам надо - это просто поддержка сети:

CONFIG_NET=y 

и я не думаю, что вам стоит беспокоиться о других сетевых опциях. У меня очень много не очень нужных функций собрано вне ядра, в виде модулей, чтобы я смог использовать их позже.

Установите новое ядро, перезапустите lilo и перезагрузитесь с новым ядром. К этому моменту ничего не должно измениться!

Сетевые адреса

Chris говорит, что мост не должен иметь IP-адреса, но я опишу прямо противоположный вариант.

Если вы собираетесь использовать свою машину для подключения к сети, то вам понадобится IP-адрес. Необходимо проверить, нормально ли настроено устройство обратной петли, чтобы программы могли общаться с тем, с чем они предполагают это общение возможным. Если устройство обратной петли выключено, то DNSили другие сетевые сервисы могут отказать. Прочтите "HOWTO: Сеть-2", но скорее всего, у вас эта часть стандартной конфигурации должна уже присутствовать:

ifconfig lo 127.0.0.1 route add -net 127.0.0.0 

Вам также будет необходимо проставить адреса для сетевых карт. Я исправил файл /etc/rc.d/rc.inet1 в моем дистрибутиве Slackware (3.x), чтобы он работал с двумя сетевыми картами, и вам, скорее всего, также, как и мне, придется просто найти файл конфигурации сети и удвоить или утроить несколько команд, отвечающих за настройку сетевой карты. Предположим, что у вас уже есть адрес

192.168.2.100 

(он входит в пространство адресов, зарезервированное для частных сетей, но не волнуйтесь - если вы используете этот адрес, то проблем ни у кого не возникнет), то у вас в скрипте уже есть примерно такая строка:

ifconfig eth0 192.168.2.100 netmask 255.255.255.0 metric 1 

Первое, что вам надо будет сделать - это, по-видимому, разделить адресное пространство, занимаемое этой картой пополам, чтобы затем настроить мост или firewall между этими двумя половинами. Для этого добавьте строку, сокращающую маску сети:

ifconfig eth0 netmask 255.255.255.128 

Испытайте такой режим. Эта строка ограничивает адресное пространство карты, как минимум, от .0 до .127.

Теперь вы можете настроить вторую карту, выделив ей адрес из оставшейся половины адресного пространства. Убедитесь в том, что ни у кого этот адрес не используется. Для симметрии я использую 228=128+100. Подойдет любой адрес, не входящий в сеть первой карты (в принципе можно и входящий, но...). Избегайте специальных адресов типа .0, .1, .128 и т.п.., используйте их только в том случае, если точно знаете, что делаете.

ifconfig eth1 192.168.2.228 netmask 255.255.255.128 metric 1 

Эта строка отводит к сети второй карты адреса от .128 до .255.

Сетевая маршрутизация

Вот здесь как раз и всплывает подводный камень схемы мост+firewall: нельзя отфильтровывать пакеты, которые не прошли через маршрутизацию. Нет маршрутизации - нет firewall. По крайней мере, это так в ядре версии 2.0.30 и более новых. Фильтры firewall очень близки и пересекаются с кодом ip-переадресации.

Это, однако, не означает, что мост не будет работать. Вы можете устроить мост между двумя картами и отфильтровывать потоки с третьей. Вы можете иметь, например, две карты и включить фильтры firewall-а на обе, обрабатывая пакеты с внешнего IP, например, ближайшего маршрутизатора, если он направляет все пакеты только на одну вашу карту.

Другими словами, чтобы настроить firewall, необходимо точно знать и контролировать назначение конкретных пакетов.

У меня имеется небольшая сеть с машинами, подключенных к хабу, включенному в мой eth0, поэтому конфигурируем эту сеть:

route add -net 192.168.2.128 netmask 255.255.255.128 dev eth0 

128 было бы заменено на 0, если бы у меня была полная сеть класса C. Но у меня ее нет, так как я ополовинил сеть ранее. Опции "dev eth0" в этом конкретном случае не обязательны, но они могут понадобиться для вас. Кто-то может захотеть иметь более одной карты, работающей с одной подсетью (127 компьютеров на одном сегменте - ничего себе), но эти карты будут соединены вместе с одной и той же маской сети, поэтому для кода маршрутизации они будут неразличимы.

Ко второй карте у меня подключена линия, идущая прямо к большому маршрутизатору, которому я полностью доверяю.

                                                  клиент 129
         __                                           |    __ 
клиент 1   \    .0                    .128            |   /   сеть 1
клиент 2 --- Хаб - eth0 -  Ядро  - eth1 - Хаб - Маршрутизатор --- сеть 2
клиент 3 __/       .100            .228            .2 |   \__ сеть 3
                                                      |
                                                  клиент 254 

Я добавил адрес маршрутизатора в таблицу переадресации этой карты в виде фиксированного (статического) маршрута, иначе он может попасть в адресное пространство первой карты, и ядро может ошибиться в выборе направления посылки пакета к большому маршрутизатору. Вторая причина использования статического маршрута - мне понадобиться фильтровать пакеты, идущие через эту карту, при помощи firewall.

route add 192.168.2.2 dev eth1 

Я опишу сеть второй карты тоже, хотя у меня и нет в той половине адресов ни одной машины. Разделение адресных пространств карт позволяет мне настроить более "прочный" firewall, но вы можете справиться с этим и при помощи значительно более простой маршрутизации.

route add -net 192.168.2.128 netmask 255.255.255.128 dev eth1 

Мне также необходимо посылать все пакеты с нелокальным получателем во внешний мир, поэтому говорим ядру посылать их к большому маршрутизатору

route add default gw 192.168.2.2 

Настройка сетевых карт

Достаточно сетевых настроек, но, так как мы устроили мост, то необходимо воспринимать на обеих картах пакеты, которые направлены не нам. Следующие строки необходимо поместить в файл настройки сети.

ifconfig promisc eth0 ifconfig promisc eth1 

В man написано использовать опцию allmulti=promisc, но у меня это не сработало.

Дополнительная маршрутизация

Я еще выяснил, что мне пришлось переключить вторую карту в режим, в котором она смогла отвечать на запросы большого маршрутизатора, какие машины я прячу в моей локальной сети.

ifconfig arp eth1 

На всякий случай, я проставил этот режим и другой карте.

ifconfig arp eth0. 

Конфигурация моста

Вставьте в ваш конфигурационный скрипт строку, разрешающую работу моста:

brcfg -enable 

Наверное, вы уже пытались запустить эту строку! Конфигурация моста выдаст на экран несколько цифр. Вы можете поэкспериментировать, включая и выключая порты:

brcfg -port 0 -disable/-enable
brcfg -port 1 -disable/-enable 

Статус работы моста можно получить в любой момент простой командой:

brcfg 

без параметров. Вы увидите, что мост ждет пакетов, затем обрабатывает и перенаправляет их. (Я не знаю почему, но программа выдавала одинаковые аппаратные адреса на обеих моих картах, но не обращайте на это внимания... В HOWTO Chris-а говорится, что это нормально)

Испытания

Если у вас до сих пор все работает и ничего не сломалось, испробуйте свой конфигурационный скрипт - выключите обе карты и запустите скрипт:

ifconfig eth0 down ifconfig eth1 down /etc/rc.d/rc.inet1 

С достаточной долей везения различные сетевые подсистемы этого не заметят (nfs, ypbind, и т.п.). Не пытайтесь сделать это, если вы находитесь не за клавиатурой системной консоли!

Если вы привыкли быть более аккуратным, чем в вышеприведенном примере, тогда отключите максимально возможное количество демонов перед испытаниями, и отключите сетевые каталоги NFS. Наихудшее, что может произойти - это то, что вам придется перезагрузиться в однопользовательском режиме (параметр "single" , переданный lilo или loadlin) и внести требуемые изменения до перезагрузки.

Дополнительные проверки

Проверьте, различается ли трафик на интерфейсах:

tcpdump -i eth0 (в одном окне)
tcpdump -i eth1 (в другом окне)

Вы должны привыкнуть использовать tcpdump, чтобы искать то, чего не должно быть или искать отсутствие того, что быть должно.

Последите за пакетами, идущими, например, через мост на вторую карту из внутренней сети. Ниже я слежу за пакетами, идущими от машины с адресом .22:

tcpdump -i eth1 -e host 192.168.2.22

Затем выполните команду ping от хоста .22 к маршрутизатору. Вы должны увидеть пакеты в окне tcpdump.

На этот момент у вас должен быть настроен и работать мост с двумя адресами. Проверьте возможность ping на них снаружи и изнутри сети, затем испробуйте telnet, ftp и т.п. с разных сторон.


Пред.НачалоСлед.
Что и Зачем (и Как?) FIREWALL
VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...