LINUX.ORG.RU
решено ФорумAdmin

Три интернет канала к одному серверу + балансировка

 , ,


2

1

Дано:
1) Ubuntu 16 (ubuntu-16.04.4-server-amd64) – почти чистая, установлена только CP Vesta.
2) Три интернет кабеля, каждый со скоростью 100 Мбит/с и статическими IP.
3) Три маршрутизатора (один ZyXEL Kinetic Giga II + два TP-Link TL-WR1045ND).
4) Три сетевые карты (enp33s0 + enp38s0 + enp39s0).

#ifconfig:
enp33s0 Link encap:Ethernet
inet addr:10.0.0.101 Bcast:10.0.0.255 Mask:255.255.255.0

enp38s0 Link encap:Ethernet
inet addr:10.0.1.101 Bcast:10.0.1.255 Mask:255.255.255.0

enp39s0 Link encap:Ethernet
inet addr:10.0.2.101 Bcast:10.0.2.255 Mask:255.255.255.0

lo Link encap:Локальная петля (Loopback)
inet addr:127.0.0.1 Mask:255.0.0.0


#interfaces:
source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

auto enp33s0
iface enp33s0 inet static
address 10.0.0.101
gateway 10.0.0.1
netmask 255.255.255.0
network 10.0.0.0
broadcast 10.0.0.255

auto enp38s0
iface enp38s0 inet static
address 10.0.1.101
gateway 10.0.1.1
netmask 255.255.255.0
network 10.0.1.0
broadcast 10.0.1.255

auto enp39s0
iface enp39s0 inet static
address 10.0.2.101
gateway 10.0.2.1
netmask 255.255.255.0
network 10.0.2.0
broadcast 10.0.2.255


#ip route:
default via 10.0.1.1 dev enp38s0 onlink
10.0.0.0/24 dev enp33s0 proto kernel scope link src 10.0.0.101
10.0.1.0/24 dev enp38s0 proto kernel scope link src 10.0.1.101
10.0.2.0/24 dev enp39s0 proto kernel scope link src 10.0.2.101


Схема подключения:
Первый интернет канал --->> Kinetic Giga II --->> enp33s0
Второй --->> TP- WR1045ND --->> enp38s0
Третий --->> TP- WR1045ND --->> enp39s0


Цель:
Доступность сервера по всем трём внешним IP адресам и равномерное распределение нагрузки между тремя интернет каналами. На сервере будет располагаться сайт который должен быть доступен по всем трём внешним IP.


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


PS:
Перед написание этого сообщения переустановил ОС + CP Vesta.

Может быть стоит попробовать перевести сервер на использование SCTP? Вообще непонятно, почему никто не использует... Принципиально правильным будет применение SCTP. Что с этим на практике - ХЗ. Не ясно что вообще с готовностью использовать sctp на стороне существующего (зоо)парка.

Знаю, что неправильно... Не могу настроить, уже третьи сутки вожусь, а результата ноль... Поэтому сюда обращаюсь, опыта в настройке сетей нет. Порты на всех трёх маршрутизаторах переброшены.

а что, собственно, настроить-то? Ни tcp, ни udp не умеют multipath, сейчас народ такую же задачу решает всякими костылями типа промежуточных прокси- и HA-северов

targitaj ★★★★★ ()
Последнее исправление: targitaj (всего исправлений: 2)
Ответ на: комментарий от targitaj

На вики написано, что недостатком SCTP является «большая занимаемая полоса, то есть относительный объём служебного трафика больше, чем при использовании TCP/UDP», а этого я себе позволить не могу. Для этого и три канала провёл.

IGORRR ()
Ответ на: комментарий от targitaj

а что, собственно, настроить-то?

Хотя бы, что бы были видны три IP из вне. Там если допустим сделать настройку DHCP то внешне видно только один IP, ну вообще сетевая карта только одна начинает работать (хотя со статиком так же)

IGORRR ()
Ответ на: комментарий от targitaj

что означает эта фраза?

Набрав в адресной строке внешний IP (выданный провайдером) попасть на сайт, по всем трём разным IP.

IGORRR ()
Ответ на: комментарий от IGORRR

Так тебе сайт штоль поднять надо? Можно просто на dns на одну A-запись повесить все три ip адреса. Нагрузка будет не очень равномерно распределяться, но это работать будет.

Второй вариант - использовать третью сторону. Какой-нибудь CDN или просто web-прокси, который уже будет распределять трафик.

targitaj ★★★★★ ()
Ответ на: комментарий от targitaj

Да сайт будет. с DNS и А-записью то понятно. Проблема в том, что доступ идёт только по одному IP а остальные два недоступны. Т.е. когда одна сетевая карта включена всё работает, если включить две или три то работает всё равно одна из трёх. Соответственно и доступ идет только по одному IP.

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

IGORRR ()
Ответ на: комментарий от Black_Shadow

Спасибо большое! = )

Теперь другая проблема, после перезагрузки ОС все прописанные мной rule и route слетают...

Я пишу вот так:
root@server:~# ip route add default via 10.0.0.1 table 101
root@server:~# ip route add default via 10.0.1.1 table 102
root@server:~# ip route add default via 10.0.2.1 table 103

root@server:~# ip rule add from 10.0.0.101 table 101
root@server:~# ip rule add from 10.0.1.101 table 102
root@server:~# ip rule add from 10.0.2.101 table 103

Куда надо их и как написать, что бы всё работало и после ребута?

IGORRR ()
Ответ на: комментарий от Black_Shadow

Большое человеческое спасибо! Всё работает, я рад!

Заметил еще ошибку, при старте ОС показывает «Failed to start Raise network interfaces.»

Вызываю команду: # systemctl status networking.service


● networking.service - Raise network interfaces
Loaded: loaded (/lib/systemd/system/networking.service; enabled; vendor preset: enabled)
Drop-In: /run/systemd/generator/networking.service.d
└─50-insserv.conf-$network.conf
Active: failed (Result: exit-code) since Вт 2018-03-20 13:32:14 MSK; 6min ago
Docs: man:interfaces(5)
Process: 1072 ExecStart=/sbin/ifup -a --read-environment (code=exited, status=1/FAILURE)
Process: 1048 ExecStartPre=/bin/sh -c [ «$CONFIGURE_INTERFACES» != «no» ] && [ -n «$(ifquery --read-environment --list --exclude=lo)» ] && udevadm s
Main PID: 1072 (code=exited, status=1/FAILURE)

мар 20 13:32:14 ServerATX.example.com ifup[1072]: Failed to bring up enp38s0.
мар 20 13:32:14 ServerATX.example.com ifup[1072]: RTNETLINK answers: File exists
мар 20 13:32:14 ServerATX.example.com ifup[1072]: Failed to bring up enp39s0.
мар 20 13:32:14 ServerATX.example.com ifup[1072]: RTNETLINK answers: File exists
мар 20 13:32:14 ServerATX.example.com ifup[1072]: run-parts: /etc/network/if-up.d/MyNetwork exited with return code 2
мар 20 13:32:14 ServerATX.example.com ifup[1072]: /sbin/ifup: post-up script failed.
мар 20 13:32:14 ServerATX.example.com systemd[1]: networking.service: Main process exited, code=exited, status=1/FAILURE
мар 20 13:32:14 ServerATX.example.com systemd[1]: Failed to start Raise network interfaces.
мар 20 13:32:14 ServerATX.example.com systemd[1]: networking.service: Unit entered failed state.
мар 20 13:32:14 ServerATX.example.com systemd[1]: networking.service: Failed with result 'exit-code'.

IGORRR ()
Ответ на: комментарий от Black_Shadow

Если скрипт удалить то выдаёт следующее:


● networking.service - Raise network interfaces
Loaded: loaded (/lib/systemd/system/networking.service; enabled; vendor preset: enabled)
Drop-In: /run/systemd/generator/networking.service.d
└─50-insserv.conf-$network.conf
Active: failed (Result: exit-code) since Вт 2018-03-20 14:29:05 MSK; 9min ago
Docs: man:interfaces(5)
Process: 1107 ExecStart=/sbin/ifup -a --read-environment (code=exited, status=1/FAILURE)
Process: 1091 ExecStartPre=/bin/sh -c [ «$CONFIGURE_INTERFACES» != «no» ] && [ -n «$(ifquery --read-environment --list --exclude=lo)»
Main PID: 1107 (code=exited, status=1/FAILURE)


мар 20 14:29:04 ServerATX.example.com systemd[1]: Starting Raise network interfaces...
мар 20 14:29:05 ServerATX.example.com ifup[1107]: RTNETLINK answers: File exists
мар 20 14:29:05 ServerATX.example.com ifup[1107]: Failed to bring up enp33s0.
мар 20 14:29:05 ServerATX.example.com ifup[1107]: RTNETLINK answers: File exists
мар 20 14:29:05 ServerATX.example.com ifup[1107]: /sbin/ifup: waiting for lock on /run/network/ifstate.enp39s0
мар 20 14:29:05 ServerATX.example.com ifup[1107]: Failed to bring up enp38s0.
мар 20 14:29:05 ServerATX.example.com systemd[1]: networking.service: Main process exited, code=exited, status=1/FAILURE
мар 20 14:29:05 ServerATX.example.com systemd[1]: Failed to start Raise network interfaces.
мар 20 14:29:05 ServerATX.example.com systemd[1]: networking.service: Unit entered failed state.
мар 20 14:29:05 ServerATX.example.com systemd[1]: networking.service: Failed with result 'exit-code'.

Такое стало отображаться когда я прописал в файле «interfaces» статические IP и всех трёх интерфейсов, если поставить DHCP то нормально, но мне надо статик для того что бы работали rule и route.

IGORRR ()
Ответ на: комментарий от IGORRR

В файле «interfaces» надо все «auto» заменить на "allow-hotplug".

В этом случае отображается красным только «code=exited, status=1/FAILURE».

IGORRR ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.