Как связать два сервера linux

Обновлено: 04.07.2024

Глава 24. Добавление IP-адресов и связывание сетевых интерфейсов

Иногда приходится использовать более одного IP-адреса при работе с одной сетевой картой, причем в этом случае говорят о добавлении IP-адресов сетевого интерфейса (binding IP addresses).

Ядро Linux также может активировать множество сетевых карт, использующих один и тот же IP-адрес , причем данная технология называется связыванием сетевых интерфейсов (bonding).

В данной главе описываются процессы добавления IP-адресов и связывания сетевых интерфейсов в наиболее популярных дистрибутивах Linux.

24.1. Добавление IP-адресов сетевых интерфейсов в дистрибутивах Red Hat/Fedora

24.1.1. Добавление дополнительных IP-адресов

Для связывания более чем одного IP-адреса с одним и тем же сетевым интерфейсом следует использовать файл конфигурации сетевого интерфейса с именем ifcfg-eth0:0 , где вместо второго значения 0 может использоваться любое число. В подобных файлах конфигурации обязательны к использованию всего две директивы.

24.1.2. Активация дополнительных IP-адресов

Для активации виртуального сетевого интерфейса следует использовать утилиту ifup , для его деактивации - утилиту ifdown .

24.1.3. Проверка корректности добавления дополнительных IP-адресов

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

24.2. Добавление IP-адресов сетевых интерфейсов в дистрибутивах Debian/Ubuntu

24.2.1. Добавление дополнительных IP-адресов

Указание дополнительных IP-адресов для одной и той же сетевой карты осуществляется в рамках файла конфигурации /etc/network/interfaces путем добавления устройств с именами eth0:x . Кроме того, при редактировании данного файла конфигурации обязательно указание масок сетей сетевых интерфейсов.

24.2.2. Активация дополнительных IP-адресов

Используйте утилиту ifup для активации дополнительных IP-адресов.

24.2.3. Проверка корректности добавления дополнительных IP-адресов

Для проверки корректности добавления и активации дополнительных IP-адресов следует либо использовать утилиту ping с другого компьютера, либо использовать утилиту ifconfig таким образом, как показано в примере ниже.

24.3. Связывание сетевых интерфейсов в дистрибутивах RedHat/Fedora

Начнем с выполнения команды ifconfig -a для получения списка всех сетевых карт, установленных в компьютере.

В данном примере мы будем связывать сетевые интерфейсы eth1 и eth2 .

Назовем нашу связку сетевых интерфейсов bond0 и добавим это название в файл конфигурации утилиты modprobe для того, чтобы ядро ОС автоматически загружало модуль bonding в момент, когда мы будем активировать соответствующий сетевой интерфейс.

После этого мы должны будем создать файл конфигурации /etc/sysconfig/network-scripts/ifcfg-bond0 для сохранения параметров конфигурации нашего сетевого интерфейса bond0 .

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

Наконец, мы активируем сетевой интерфейс с помощью команды ifup bond0 .

Информация о виртуальном сетевом интерфейсе bond0 также будет присутствовать в одноименном файле из директории /proc/net/bonding .

24.4. Связывание сетевых интерфейсов в дистрибутивах Debian/Ubuntu

Начнем с выполнения команды ifconfig -a для получения списка всех сетевых карт, установленных в компьютере.

В данном примере мы будем связывать сетевые интерфейсы eth1 и eth2 .

Также нам придется установить пакет программного обеспечения ifenslave .

После этого нам придется отредактировать файл конфигурации /etc/network/interfaces , добавив в него информацию о виртуальном сетевом интерфейсе bond0 .

В более старых версиях дистрибутивов Debian/Ubintu вам придется вручную выполнить команду modprobe bonding , но в современных версиях данных дистрибутивов этого уже не требуется. Используйте утилиту ifup для активации сетевого интерфейса и проверьте его работоспособность.

Информация о виртуальном сетевом интерфейсе bond0 также будет присутствовать в одноименном файле из директории /proc/net/bonding/ .

24.5. Практическое задание: добавление IP-адресов и связывание сетевых интерфейсов

1. Свяжите дополнительный IP-адрес с одной из ваших сетевых карт. Проверьте его работоспособность (может ли ваш сосед использовать данный IP-адрес для входа в вашу систему с использованием протокола ssh)!

2. Используйте утилиту ifdown для деактивации данного IP-адреса .

3. Убедитесь в том, что ваш сосед также успешно связал дополнительный IP-адрес с сетевой картой перед продолжением выполнения заданий.

4. Добавьте дополнительную сетевую карту (или две) в вашу виртуальную машину и используйте информацию из теоретической части главы для связывания двух сетевых карт .

24.6. Корректная процедура выполнения практического задания: добавление IP-адресов и связывание сетевых интерфейсов

1. Свяжите дополнительный IP-адрес с одной из ваших сетевых карт. Проверьте его работоспособность (может ли ваш сосед использовать данный IP-адрес для входа в вашу систему с использованием протокола ssh)!

В дистрибутивах RedHat/Fedora:

Следует добавить файлы конфигурации /etc/sysconfig/network-scripts/ifcfg-ethX:X , содержащие описания виртуальных сетевых интерфейсов, таким образом, как показано в теоретической части главы.

В дистрибутивах Debian/Ubuntu:

Следует модифицировать файл конфигурации /etc/network/interfaces , добавив в него описания виртуальных сетевых интерфейсов таким образом, как показано в теоретической части главы.

2. Используйте утилиту ifdown для деактивации данного IP-адреса .

3. Убедитесь в том, что ваш сосед также успешно связал дополнительный IP-адрес с сетевой картой перед продолжением выполнения заданий.

4. Добавьте дополнительную сетевую карту (или две) в вашу виртуальную машину и используйте информацию из теоретической части главы для связывания двух сетевых карт .

В дистрибутивах RedHat/Fedora:

Следует добавить в директорию /etc/sysconfig/network-scripts файлы ifcfg-ethX и ifcfg-bondX , заполненные таким образом, как показано в теоретической части главы. Также не забудьте о необходимости редактирования файла конфигурации утилиты modprobe .

В дистрибутивах Debian/Ubuntu:

Следует модифицировать файл /etc/network/interfaces таким образом, как показано в теоретической части главы. Не забудьте о необходимости установки пакета программного обеспечения ifenslave .

При создании локальной сети не каждый администратор подходит с ответственностью к выбору диапазона адресов. А может и не каждый догадывается о наличии частных диапазонов кроме 192.168.0.0/24. И со временем такая бомба замедленного действия может дать о себе знать. Локальные сети объединяются, возникает потребность в коммуникации между хостами разных сетей. И тут выясняется, что номера сетей совпадают. И менять их по каким либо причинам проблематично или невозможно.

В таком случае, серверу, маршрутизирующему пакеты между сетями, остается сделать вид, что номера сетей различны и выдавать желаемое за действительное. В богатом арсенале Linux есть средства для таких манипуляций: iptables с NETMAP и утилита ip.

Из сети LAN1 мы хотим послать пакет в сеть LAN2. Но мы не можем послать его в сеть, номер которой одинаков с нашим. В самом частом случае 192.168.0.0/24. Если такой пакет появится в LAN1, он не будет знать, что есть LAN2, он будет искать такую машину в LAN1. Таковы правила маршрутизации по умолчанию.
Значит, надо посылать пакеты с другими адресами, которые уйдут в роутер.

Как это должно вглядеть для наблюдателя из LAN1
Например, пользователь сети LAN1 будет видеть сеть LAN2 как 10.8.1.0/24. Тут уже никакого пересечения адресов. LAN1 доволен.

image

Как это выглядит с обеих сторон
Из LAN1 приходит пакет с адресом отправителя 192.168.0.100 и адресом назначения 10.8.1.200. Из роутера с интерфейса LAN2 выходит тот же пакет с адресом отправителя 10.8.1.100 и с адресом назначения 192.168.0.200. Пакет проходит до адреса назначения и тот шлет в ответ на адрес отправителя со своим адресом. Пакет уходит в роутер. В нем происходит обратное преобразование и пользователь LAN1 получает ответ с того адреса, на который отправил пакет.

Теория. Путь пакета в ядре роутера: netfilter

image

Здесь я попытаюсь рассказать о путешествии транзитного трафика через наш Linux-роутер. Для полного понимания процесса путешествия пакета лучше видеть схему его прохождения из Википедии по цепочкам netfilter.

Наш пакет с [источником|назначением] [192.168.0.100|10.8.1.200] попадает на сетевой интерфейс роутера и первой его цепочкой будет PREROUTING.

PREROUTING

Проходя по цепочке он попадает в таблицу PREROUTING mangle. В которой посредством iptables мы определяем интерфейс, с которого он пришел, и адрес источника. Если это наш пациент, мы его помечаем действием MARK.
После чего пакет [192.168.0.100|10.8.1.200|(marked)] попадает в таблицу nat. Эта таблица предназначена для трансляции адресов. Поскольку не существует реального адреса 10.8.1.200, то на последующем этапе маршрутизации пакет будет отброшен или уйдет в неизвестном направлении. Поэтому заменяем ему адрес назначения на тот, на который он действительно должен пойти именно тут: [192.168.0.100|192.168.0.200|(marked)]. Делается это действием NETMAP, которое заменяет номер сети по маске.

ROUTING

Пакет успешно проходит цепочку FORWARDING. Попадает опять на этап маршрутизации. Если в FORWARDING с ним ничего не случилось, а по идее не должно было. Он идет тем же путем. После чего попадает в POSTROUTING.

POSTROUTING

Без изменений доходя до таблицы nat. Мы должны изменить адрес источника. Ведь ответ на пакет [192.168.0.100|192.168.0.200] будет отправлен в локальную сеть, а не в роутер. Чтоб он попал обратно в роутер, меняем адрес источника на несуществующий [10.8.1.100|192.168.0.200]. Опять же NETMAP. После этого пакет выходит в LAN2.
С ответным пакетом проделываем обратную процедуру, чтоб он дошел до изначального источника.

Реализация

Узнаем пакет по метке и действием NETMAP в таблице PREROUTING подменяет номер сети.

В POSTROUTING NETMAP подменяет адрес источника.
После этого все обращения на подсеть 10.8.1.0/24 будут выглядеть внутри LAN2, как обращения из подсети 10.8.2.0/24.

ROUTING

Чтобы маршрутизировать пакеты по метке необходимо создать свою таблицу маршрутизации.Редактируем /etc/iproute2/rt_tables, добавляя уникальное число и название новой таблицы.
256 netmap
Далее надо добавить правило, по которому в эту таблицу будут направляться пакеты на маршрутизацию.

Теперь помеченные пакеты будут уходить на маршрутизацию в таблицу netmap.

И последним шагом нужно определить маршруты в таблице netmap.

Или можно указать в особом случае отдельный шлюз, если в эту сеть трафик от роутера идет через него. Что-то в духе:

Пока рано радоваться, к нам придет ответ из LAN2 [192.168.0.100|10.8.2.200].
Надо сделать все тоже самое, но только преобразовать обратно. Увы, netfilter сам этого не делает. Все действия уже описаны, приведу только последовательность команд для преобразования адресов в одну и в обратную сторону. (В первой таблице маршрутизации необходимости в данном случае нет, но при иных обстоятельствах может понадобиться.)

Результаты

Вот что пишет tcpdump (первый пример с vnc, второй с пингом):

12:46:46.358969 IP 192.168.0.100.41930 > 10.8.1.200.5900: Flags [P.], seq 647:657, ack 261127, win 1213, options [nop,nop,TS val 460624 ecr 171318], length 10
12:46:46.358978 IP 10.8.2.100.41930 > 192.168.0.200.5900: Flags [P.], seq 647:657, ack 261127, win 1213, options [nop,nop,TS val 460624 ecr 171318], length 10
12:46:46.505847 IP 192.168.0.200.5900 > 10.8.2.100.41930: Flags [.], ack 657, win 64879, options [nop,nop,TS val 171320 ecr 460624], length 0
12:46:46.505861 IP 10.8.1.200.5900 > 192.168.0.100.41930: Flags [.], ack 657, win 64879, options [nop,nop,TS val 171320 ecr 460624], length 0


12:47:46.363905 IP 192.168.0.100 > 10.8.1.200: ICMP echo request, id 2111, seq 1, length 64
12:47:46.363922 IP 10.8.2.100 > 192.168.0.200: ICMP echo request, id 2111, seq 1, length 64
12:47:46.364049 IP 192.168.0.200 > 10.8.2.100: ICMP echo reply, id 2111, seq 1, length 64
12:47:46.364054 IP 10.8.1.200 > 192.168.0.100: ICMP echo reply, id 2111, seq 1, length 64

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

Так же отлично работают остальные сервисы, типа Samba и ее аналог на Windows.

Если соединение между сетями организовано посредством туннеля OpenVPN, то для правильной маршрутизации со стороны клиента в конфиг сервера необходимо добавить дополнительный маршрут через туннель.
push "route 10.8.1.0 255.255.255.0"


Для создания общих сетевых ресурсов в среде Windows, применяется протокол CIFS (ранее известный как SMB), поддержка которого в UNIX-подобных системах обеспечивается программным обеспечением Samba. Samba работает по протоколам TCP и UDP, соединение шифруется. С помощью Samba возможно обеспечить не только общий доступ к файлам и принтерам, но и, например, построить контроллер домена с поддержкой Active Directory (об этом в следующий раз). С помощью Samba можно открыть общий доступ не только между Windows и Linux, но и между Linux и Linux. Однако есть некоторые ограничения. Во первых, SMB - это "виндовый" протокол, со всеми вытекающими. Он не слишком хорошо интегрируется с UNIX-системами. Не вдаваясь в сложные технические описания, скажу лишь что скорость передачи данных по Samba медленнее, зачастую значительно, она нестабильна, как и загрузка сетевого канала, а также даёт весьма ощутимую нагрузку на процессор. Поэтому если в вашей домашней сети нет Windows-машин, то предпочтительнее использовать протокол сетевой файловой системы - NFS.

Суть работы NFS весьма проста. Удалённый ресурс встраивается в общее дерево файловой системы, и в результате каталог, который находится на файловом сервере или другом компьютере, отображается в вашей системе как локальный, будто находится на диске. NFS работает по протоколу TCP. NFS весьма полезна при создании так называемых тонких клиентов (бездисковые рабочие станции, в которых система загружается по сети). Скорость передачи данных по NFS в 2 раза выше, чем через Samba, загрузка сети равномерная, а нагрузка на центральный процессор минимальная. Однако у NFS есть два недостатка. Первый - довольно фиговая поддержка в Windows (реализуется через подсистему UNIX и отдельное приложение). Второй - отсутствие шифрования (c версии NFSv4, для шифрования может использоваться протокол Kerberos). Тем не менее, для Линуксовой сети, NFS - идеальный вариант.

Внимание: на обеих системах должны быть настроены статические IP адреса.В Windows кликнете правой кнопкой на значке сетевых подключений и выберите "Центр управления сетями и общим доступом", далее "Изменение параметров адаптера", выберите нужный адаптер (вашу сетевую карту) и зайдите в её свойства. Перейдите в пункт "Протокол Интернета версии 4" и выберите "Использовать следующий IP адрес":


Если ваши компьютеры соединены напрямую, поле "Основной шлюз" можете оставить пустым. Если через роутер - укажите IP адрес роутера (тот, через который осуществляется доступ к его вэб-интерфейсу, обычно 192.168.0.1). В Linux аналогичную операцию можно провести в Network Manager (настройка сетевых подключений, вкладка IPv4):


Если вы используете фаерволл (брандмауэр Windows либо другое аналогичное ПО, а также iptables в Linux или фаерволл в вашем роутере), убедитесь что открыты нужные порты (Для SAMBA: 135, 139, 445/TCP; 137, 138/UDP. Для NFS: 2049/TCP).

Linux => Windows

Представим ситуацию: у вас есть второй компьютер (или файловый сервер), под управлением Ubuntu 14.04, на котором находится большая коллекция ваших видео, фото и так далее, расположенная на отдельном диске, который монтируется в /media/MyDATA. Этот диск нужно расшарить на компьютер под управлением Windows 8.1. Первым делом, установим необходимые пакеты:

sudo apt install samba samba-common smbclient

Теперь необходимо сконфигурировать Самбу. У вас есть два пути: консольный и графический.

Консольный.

Открываем файл /etc/samba/smb.conf:

sudo nano /etc/samba/smb.conf

Полностью удаляем всё содержимое и вписываем такие настройки:

В секции global описываются общие параметры: WORKGROUP - имя рабочей группы (должно быть одинаково для всех машин в локальной сети), Ubuntu-PC - имя компьютера, с которого расшариваются каталоги (укажите своё), вход без пароля, гостевой доступ и оптимизации для соединения. В секции MyDATA описывается доступ к диску, смонтированному в /media/MyDATA. При желании вы можете указать доступ к отдельным каталогам на этом диске, аналогичным способом. Сохраните файл и выполните команду:

Теперь запустите сервер Samba:

sudo service start smbd

Графический.

Для настройки параметров Samba в графическом интерфейсе, существует 2 замечательные утилиты - system-config-samba (есть только в Ubuntu и производных) и gadmin-samba (есть везде). Эти утилиты представляют собой весь конфиг Самбы, выполненный в графическом режиме. Для Ubuntu установим первую утилиту:

sudo apt install syste-config-samba

Здесь всё предельно понятно и в настройках разберётся любой :)


Для других дистрибутивов (например Debian), установите пакет gadmin-samba:

sudo apt install gadmin-samba


После настройки, перезапустите демон Samba. Для Ubuntu:

sudo service restart smbd

sudo systemctl restart smbd.service

Также можно открыть доступ к нужному каталогу из файлового менеджера, открыв свойства каталога:

В Windows необходимо включить сетевое обнаружение. Для этого в центре управления сетями, зайдите в "Изменить дополнительные параметры общего доступа"


После этого, в сетевом окружении, должны появиться расшаренные каталоги.

Linux => Linux

А теперь представим, что у нас есть компьютер с Debian 8 (IP адрес 192.168.0.2), и ноутбук с Ubuntu 14.04 (IP адрес 192.168.0.3). С ноутбука нужно расшарить раздел диска, который смонтирован в /media/DATA (это раздел для торрентов и прочей файлопомойки). Для этого мы используем NFS:

sudo apt install nfs-kernel-server nfs-common rpcbind

Укажем что нужно расшаривать:

sudo nano /etc/exports

sudo exportfs -a

Далее нужно указать, каким хостам в сети разрешено иметь доступ к серверу:

sudo nano /etc/hosts.allow

Указываем доступ для всех машин, находящихся в подсети 192.168.0.0/255.255.255.0:

nfsd: 192.168.0.0/255.255.255.0
rpcbind: 192.168.0.0/255.255.255.0
mountd: 192.168.0.0/255.255.255.0

Если вы указали в файле exports только IP адрес нужной машины, то соответственно, указывайте его.

Теперь запустите сервис:

sudo service nfs-kernel-server start

На компьютере установите следующие пакеты:

sudo apt install nfs-common rpcbind

Создайте директорию для монтирования общего ресурса:

sudo mkdir /media/Share

Монтирование вручную.

sudo mount -t nfs4 192.168.0.3:/ /media/Share

В результате всё содержимое диска /media/DATA (на ноутбуке) окажется доступным на компьютере в каталоге /media/Share, как если бы эти данные хранились на нём. Для того чтобы ресурс монтировался автоматически после загрузки системы, есть два способа.

Монтирование через fstab.

Файл /etc/fstab содержит в себе информацию о присутствующих файловых системах, точках монтирования и параметрах монтирования. Чтобы ресурс /media/DATA монтировался на ваш компьютер автоматически, добавьте в конец файла /etc/fstab следуюущую строку:

192.168.0.3:/ /media/Share nfs user,rw,noauto 0 0

Опция noauto запрещает автоматическое монтирование во время загрузки, так как сеть может быть недоступна в этот момент. Вместо этого, в файловом менеджере, в левой колонке появится пункт Share, кликнув на который, сетевой ресурс автоматически смонтируется. Однако при таком способе монтирования, есть пара существенных недостатков. Во первых, если в момент выключения компьютера, был открыт какой-либо файл, расположенный на сетевом ресурсе, компьютер откажется выключаться. Во-вторых, такая же ситуация произойдёт в случае пропажи связи между клиентом (компьютером) и сервером (ноутбуком). Для того, чтобы этих проблем не было, существует второй способ монтирования.

Монтирование с помощью AutoFS.

AutoFS - это пакет для обеспечения монтирования съёмных и сетевых накопителей, только при обращении к ним. При отсутствии обращения к сетевому ресурсу или съёмному устройству в течении определённого времени, он автоматически размонтируется, и мгновенно монтируется при первом же обращении к нему. Устанавливаем:

sudo apt install autofs

sudo nano /etc/auto.master

В конец файла добавляем строку:

/mnt /etc/auto.nfs --timeout=60

/mnt - каталог для монтирования сетевого ресурса.
/etc/auto.nfs - путь к файлу, в котором описаны параметры монтирования.
--timeout=60 - время в секундах, после которого произойдёт размонтирование ресурса (можете указать своё).

Сохраняем и переходим к следующему файлу:

sudo nano /etc/auto.nfs

Share -fstype=nfs,rw,noatime,noexec,nosuid,tcp,async,rsize=32768,wsize=32768,intr,nolock,soft,noauto 192.168.0.3:/

Создадим директорию Share в каталоге /mnt, куда будет монтироваться ресурс:

sudo mkdir /mnt/Share

Вот и всё. Теперь в каталоге /mnt/Share, при первом же обращении к нему, будет появляться содержимое удалённого ресурса /media/DATA. Кнопка подключения сетевого диска появится в файловом менеджере.

ping с подсети ..10.0 проходит на адрес ..2.100,а на остальные,например 192.168.2.1 нет.

что еще надо донастроить,чтобы все работало?

на сервере стоит ASPLinux9.2


man ifconfig; man route; желательно посмотреть на тему nat и iptables


для переадресации трафика: echo "1" > /proc/sys/net/ipv4/ip_forward если с сервака все (все две сети) пингуется - настраивай таблицу маршрутизации (route).

по поводу nat'a - мне кажеться он здесь не уместен, на кой скрывать реальные ip?

А маршруты в сетях ты прописал?

Надо чтобы хосты из 192.168.2.0 знали что для 192.168.10.0 надо слать на 192.168.2.100

Для этого на этих хостах надо прописать маршрут явно, либо по умолчанию

Да и адреса роутера лучше возьми или .254 или .1

ЗЫ: FAQ надо дополнить.

В соединяемых подсетях надо прописать маршрут на настраиваемый роутер. В данном случае лучше не пользовать маршрут по умолчанию, ибо при коннекте по PPP он может измениться и вторая подсеть отвалится.



1 в ip_forward добавил так ping с клиента проходит только при явном задании маршрута на нем,например: route add 192.168.10.0 mask 255.255.255.0 192.168.2.1 metric 2(это в винде)

то есть надо ip сервера поменять на . 254?и маршрут соответственно?

Тебеж сказали прописать маршрут до той сети в которую тебе попасть надо! под виндой: route add -p 192.168.X.0 mask 255.255.255.0 192.168.Y.N где X другая подсеть, Y подсеть клиента, N роутер.


сделал это уже давно,роутер я пингую и 1ю и 2ю подсеть,а вот остальные машины нет,то есть ping 192.168.Y.роутер с сети X проходит,а дальше нет.

Тоесть ты маршрут который я те сказал у каждого клиента прописал?


я пока на одном все настраиваю,но он там и раньше был,только адрес роутера поменял.тоже самое дальше роутера не идет.


кстати машины с сети Х без прописаного маршрута видят имя машины с сети У но зайти на нее не могут.

Попробуй добавить в /etc/sysctl.conf:

и перезапустить сеть.

Думается поможет. И вообще читайте документацию - это полезно, особенно на темы статической маршрутизации.


спасибо огомное все заработало,а можно ссылку на толковую документацию?

Потом документацию, относящуюся к сетевой подсистеме ядра.
Найти ее можно в дереве исходников ядра :)

Читайте также: