LINUX.ORG.RU
ФорумAdmin

Ubuntu, две сетевухи, два разных провайдера

 ,


0

1

Хочу настроить сервак с двумя разными интернет провайдерами. На машине стоит Ubuntu 20.04 и две сетевухи подключённые к двум разным ISP1 и ISP2 через разные роутеры. Каждая сетевуха в своей подсети - 192.168.2.2/30 и 192.168.3.2/30 соответственно.

Был куплен домен на reg.ru и у него были прописанны два IP от ISP1 и ISP2. Проблема в том, что машина доступна или через одну сетевуху или через другую. Нельзя одновременно пинговать оба IP адреса или обращаться по домену на разные сетевухи (reg.ru использует что-то типа round-robin). Всегда одна из сетевух не отвечает.

Если я пингую сетевуху 1 и она успешно отвечает то сайт запущенный на этом серваке успешно открывается через IP этой сетевухи. Если я пингую другую сетевуху и она не отвечает то сайт не открывается.

Wireshark показывает, что «рабочая» в данный момент сетевуха если её пинговать отвечает в ответ, но что интересно «не рабочая» сетевуха если её пинговать получает пакеты и даже на них отвечает, но они не приходят. Похоже что-то с роутингом или т.п. На машине есть два дефолтных гейтвея т.е. с виду всё нормально. Тема немного пересекается с https://askubuntu.com/questions/1211096/two-network-cards-which-provides-internet Но я не спец по Linux и не могу сам разобраться, как это настроить.

Вопрос, кто нибудь смог заставить одновременно работать две сетевухи? И как это можно сделать?

Ответ на: комментарий от Oleg_Iu

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

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

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

Ссылку можно хотя бы на один пример? Всё что лежит в интернете не работает.

Ну, искать надо тренироваться. :)

Там все просто. Узел называется по нашему «ёжик» :)

https://unix.stackexchange.com/questions/22770/two-interfaces-two-addresses-two-gateways

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

Захотите обсудить тему «что там делается», дайте знать.

Oleg_Iu ()

«не рабочая» сетевуха если её пинговать получает пакеты и даже на них отвечает, но они не приходят.

Потому, что операторы последней мили, как правило, не пропускают пакеты с чужими src ip, а пакет пытается уйти на default gw. Способ борьбы с этим подсказали уже.

Ещё просто в Linux есть rp_filter, может даже к оператору и не уходит.

reg.ru использует что-то типа round-robin

Нет, это не reg.ru использует. reg.ru никак не может влиять на то, что отдаёт твой DNS (ну или провайдера). round-robin - это стандартное поведение любого нормального DNS.

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

Дело даже не в чужом src. Удалённый хост зовёт Васю из первого подъезда, а ему вместо этого отзывается Коля из второго. Естественно, что оно так не работает.

Выше @Oleg_Iu правильную ссылку дал.

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

Удалённый хост зовёт Васю из первого подъезда, а ему вместо этого отзывается Коля из второго.

Нет, как раз Вася и отзывается, только выйти не через свой подъезд пытается, а через Колин. Я об этом.

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

Вася и Коля - это eth{0,1}. Что у них у обоих один и тот же номер Комсомольской правды в руках лежит - фиолетово.

Чтобы из eth1 ушёл пакет с адресом eth0, это нужно специально настраивать.

По-дефолту сервер поставит исходящему пакету в src адрес интерфейса с которого пакет уйдёт.

Судя по описанию, у него шлюзом по-умолчаню висит eth0, а defgw via eth1 у него или отсутствует, или не активен, т.к. имеется более приоритетный маршрут через eth0. Скорее второе.

И у него там, похоже, ещё два роутера стоят, у которых в NAT прописаны соответствующие локальным подсетям роутеров адреса сервера.

Так что даже если он научит Васю через общий балкон выходить из чужого подъезда, ему это всё-равно не поможет.

Правильно - отвечать в тот же интерфейс, откуда запрос поступил, если клиент не ожидает иного.

Так что ссылка таки правильная.

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

Чтобы из eth1 ушёл пакет с адресом eth0, это нужно специально настраивать.

Совсем нет. Надо всего лишь default gw через eth1, если не использовать source policy routing.

По-дефолту сервер поставит исходящему пакету в src адрес интерфейса с которого пакет уйдёт.

Нет. По дефолту сервер (точнее не сервер, а приложение) поставит исходящему пакету в src адрес, на который пришёл запрос. Это вот если это не ответ на запрос, то да, тогда адрес интерфейса, с которого пакет уйдёт.

Правильно - отвечать в тот же интерфейс, откуда запрос поступил,

Это так не работает, если специально не настраивать.

если клиент не ожидает иного.

Откуда ты можешь знать ожидание клиента, который не известно кто и не известно где?

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

По дефолту сервер (точнее не сервер, а приложение) поставит исходящему пакету в src адрес

А, кажется, да… я тупанул, мозг не ту диаграмму подсунул в память.

Откуда ты можешь знать ожидание клиента, который не известно кто и не известно где?

Если клиент не сказал, что примет ответ на этот адрес и порт от любого, то воспринимать как «жду ответ оттуда же, куда спросил».

mogwai ★★★★ ()
Последнее исправление: mogwai (всего исправлений: 1)

Мои настройки

user@user-desktop:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: ens2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 76:7c:26:8d:f2:2b brd ff:ff:ff:ff:ff:ff
    altname enp1s0
    inet 192.168.2.2/30 brd 192.168.2.3 scope global noprefixroute ens2
       valid_lft forever preferred_lft forever
3: enp5s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 7a:05:ae:b5:d6:cd brd ff:ff:ff:ff:ff:ff
    inet 192.168.3.2/30 brd 192.168.3.3 scope global noprefixroute enp5s0
       valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:04:48:d3:22 brd ff:ff:ff:ff:ff:ff


user@user-desktop:~$ route -n
Таблица маршутизации ядра протокола IP
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0         192.168.2.1     0.0.0.0         UG    100    0        0 ens2
0.0.0.0         192.168.3.1     0.0.0.0         UG    101    0        0 enp5s0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 ens2
192.168.2.0     0.0.0.0         255.255.255.252 U     100    0        0 ens2
192.168.3.0     0.0.0.0         255.255.255.252 U     101    0        0 enp5s0


user@user-desktop:~$ ip route
default via 192.168.2.1 dev ens2 proto static metric 100 
default via 192.168.3.1 dev enp5s0 proto static metric 101 
169.254.0.0/16 dev ens2 scope link metric 1000 
192.168.2.0/30 dev ens2 proto kernel scope link src 192.168.2.2 metric 100 
192.168.3.0/30 dev enp5s0 proto kernel scope link src 192.168.3.2 metric 101

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

Потому, что операторы последней мили, как правило, не пропускают пакеты с чужими src ip, а пакет пытается уйти на default gw.

У меня два default gw

Ещё просто в Linux есть rp_filter, может даже к оператору и не уходит.

в sysctl.conf прописано

net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1

Нет, это не reg.ru использует. reg.ru никак не может влиять на то, что отдаёт твой DNS

Я использую DNS reg.ru, у них есть бесплатные DNS для тех кто купил домен у них. Они периодически меняют местами положение IP при выдаче nslookup т.е. получается round robin.

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

Так как что-то, всё же, работает, полагаю, что речь не про эти адреса на самом деле?

Конечно. Cервак к обоим ISP подключен через отдельный роутер т.е. схема такая

ISP1---[router 1]---[server]----[router 2]---ISP2

У одного ISP IP начинается на 178, у другого на 77.

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

Дело даже не в чужом src. Удалённый хост зовёт Васю из первого подъезда, а ему вместо этого отзывается Коля из второго. Естественно, что оно так не работает.

Нет. Удалённый хост зовёт Васю и Вася или не отвечает или отвечает, но ответы не приходят (последнее точно имеет место с роутером 1, про второй роутер не могу сказать т.к. он сам на пинги отвечает, это не отключается, точнее смогу сказать позже). Коля вместо Васи не отвечает.

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

Нет, как раз Вася и отзывается, только выйти не через свой подъезд пытается, а через Колин. Я об этом.

Судя по wireshark пинги приходят к Васи, а Вася не отвечает

37	13.312055861	123.27.01.68	192.168.2.2	ICMP	98	Echo (ping) request  id=0x0001, seq=62/15872, ttl=53 (no response found!)
38	14.335995807	123.27.01.68	192.168.2.2	ICMP	98	Echo (ping) request  id=0x0001, seq=63/16128, ttl=53 (no response found!)
39	15.359980098	123.27.01.68	192.168.2.2	ICMP	98	Echo (ping) request  id=0x0001, seq=64/16384, ttl=53 (no response found!)
40	16.384039643	123.27.01.68	192.168.2.2	ICMP	98	Echo (ping) request  id=0x0001, seq=65/16640, ttl=53 (no response found!)

Коля при этом вообще ничего не делает.

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

Судя по описанию, у него шлюзом по-умолчаню висит eth0, а defgw via eth1 у него или отсутствует, или не активен, т.к. имеется более приоритетный маршрут через eth0. Скорее второе.

У меня два default gw, но метрики сейчас разные.

default via 192.168.2.1 dev ens2 proto static metric 100 
default via 192.168.3.1 dev enp5s0 proto static metric 101 

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

И у него там, похоже, ещё два роутера стоят, у которых в NAT прописаны соответствующие локальным подсетям роутеров адреса сервера.

Да. Каждая сетевуха в своей подсети, в 192.168.2.2/30 и 192.168.3.2/30 соотвественно. В интернетах пишут, что именно так и нужно делать, чтобы OS не путала куда, что посылать

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

У всех все работает. Очевидно что надо не прозой описывать, а роутпринт смотреть, трэйсрт и потобными утилитами смотреть.

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

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

Я использую DNS reg.ru, у них есть бесплатные DNS для тех кто купил домен у них. Они периодически меняют местами положение IP при выдаче nslookup т.е. получается round robin.

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

stinky3000 ()

Если я пингую сетевуху 1 и она успешно отвечает то сайт запущенный на этом серваке успешно открывается через IP этой сетевухи. Если я пингую другую сетевуху и она не отвечает то сайт не открывается.

а как ты из Интернет пингуеш свою убунту, которая находится за роутерами?

в твоей схеме все будет работать как ты хочешь если будут выполнены следующие условия:

  1. используется один шлюз по-умолчанию на убунте и на этом шлюзе настроен обычный проброс портов из вне на убунту

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

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

а как ты из Интернет пингуеш свою убунту, которая находится за роутерами?

Тот роутер через который могу пинговать на openWRT, на нём в firewall я разрешил accept icmp и сделал проброс icmp к серваку с Ubuntu.

Второй роутер Asus, у него я не могу настроить проброс пинга, нет такой настройки.

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

У меня два default gw

Скорее всего работает только один (а раз метрики разные, то один без всяких вариантов). Хотя, в принципе, в ядре Linux есть поддержка ECMP, но не помню, чтобы она включалась сама собой.

в sysctl.conf прописано

Сделай 0. И проверь, что оно сработало: /proc/sys/net/ipv4/conf/<интерфейс>/rp_filter

у них есть бесплатные DNS для тех кто купил домен у них.

А как они доступ к ним обеспечивают? Вообще механизмы защиты от использования для DDoS для публичных DNS есть видимо, если на гугледнс посмотреть.

Они периодически меняют местами положение IP при выдаче nslookup

Ну если их DNS, значит их. Только это стандартное поведение любого DNS, как я уже написал.

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

Спасибо за ссылку, почитаю.

Надо не «почитаю когда нибудь потом», а читать и делать как там написано. Все остальные «Мою случай похож вот на это» не имеет смысла рассматривать.

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

Я тут подумал, может не париться с Ubuntu, а просто купить Mikrotic роутер и в нём настроить multiwan, а в сервак с Ubuntu втыкать одну витуху которая из роутера Mikrotic будет выходить. Будет это работать? Сайт будет доступен по обоим IP адресам?

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

Я тут подумал, может не париться с Ubuntu, а просто купить Mikrotic роутер и в нём настроить multiwan, а в сервак с Ubuntu втыкать одну витуху которая из роутера Mikrotic будет выходить. Будет это работать? Сайт будет доступен по обоим IP адресам?

Что угодно можно. В том числе и все роутеры выкинуть и принять напрямую на сервер оба линка. Вопрос в понимании и аккуратности.

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

Разобрался. Вот так это делается - https://iambenjaminlong.com/2018/11/15/multiple-default-routes-in-ubuntu-18-04-and-other-distros-that-use-netplan/

Часть

      routes:
        - to: 0.0.0.0/0
          via: 123.123.123.1
          metric: 500
          table: 1
      routing-policy:
        - from: 123.123.123.123
          table: 1

нужно прописать для каждой сетевухи. И никакой rp_filter изменять не нужно. Как я и предполагал решения мне тут не подскажут.

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

Это у меня дома. Там стоит сервак под столом + рядом ещё десктопный системник + ещё в коридоре wifi роутер + ноутбук и т.д. и т.п. Накрутил так, как получилось. Не только один сервак должен быть в сети.

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

Напрямую на сервер адрес прикидывай и всё будет работать из коробки

Вообще я не спец. Если ты говоришь про статический руотинг то роутер Asus не позволяет прокинуть (хотя настройка такая есть) внешний IP, получается только IP из подсети вида 192.168.x.x. Или я что-то не так делал.

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

Как я и предполагал решения мне тут не подскажут.

Я вам это решение показал с самого начала в 4-м сообщении. Решение в виде ровно двух команд, которые вы запускаете через нетплан.

Ну не увидели, ну и ладно. Легких путей никто не ищет. :)

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

Правильно - отвечать в тот же интерфейс, откуда запрос поступил,

Кто написал это «правильно»? man «Асимитричный роутинг». Cюрпрайз?

если клиент не ожидает иного.

А откуда клиент вообще знает хоть что-то про мои интерфейсы? И какое ему до этого дело?

ЗЫ Чуть более 20-ти лет назад была популярная технология. Входящий трафик через dvb карточку, исходящий через dialup мопед. Ооооченьно клево получалось. Напоминаю, что это времена когда выделенка в 64к была на уровне несбыточной мечты и стоила как чугунный мост. Так вот в части входящей скорости, она нервно курила в сторонке. У меня был интернет зависимый клиент, который кинув очередной раз прова с оптой перешел на этот вариант, благо тарелка уже была в наличии, пользаки просто кипятком писали.

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

ЗЫ Чуть более 20-ти лет назад …

ЗЫ Чуть более 10-ти лет назад, достали перебои у провов, решил взять инет от двух провайдеров. Сделал балансировку нагрузки на каналы. Ко мне подъехали и очень сильно убеждали «это отключить и больше так не делать!»…

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

Сделал балансировку нагрузки на каналы.

Как именно сделали?

Ко мне подъехали и очень сильно убеждали «это отключить и больше так не делать!»…

Кто подъехал?

Хотя попробую вангануть, вы в тупую разделили пакеты «поровну» между провами. Не соединения распределили, а именно пакеты. И не вариант со сборкой в какой-то другой точке, а именно отправку пакетов напрямую получателю. Тогда провы очень даже правы.

ЗЫ Но поскольку вы привели в цитате начало моего сообщения про вариант dvb+dialup то на всякий случай поясню, эту услугу целиком предоставлял один провайдер, а не вариант что dialup от одного, dvb от другого.
Хотяяя вроде существовал же в природе ещё вариант полного разделения, dialup и dvb. Но я его ручонками не щупал, только читал про него.

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

Тред не читай @ сразу отвечай. Выше (для комментария на который ты язвить пытаешься - ниже) с AS мы уже всё обсудили. Сюрпрайз?

ЗЫ на всякий случай уточню: с тем, что фигню в комментарии выше ляпнул - не спорю. Зачем продолжать ветку, если в ней уже сам пользователь написал, что был не прав?

ЗЫ

Ты сибиряку это пишешь. Тут ШПД не больше 10 лет назад стал доступен более-менее. В основном aDSL который больше 512k входящего выдать не мог, т.к. телефонная сеть ушатана. Спасал dvb ресивер и офсетная антенна, если что-то скачать надо было. Комплект до сих пор где-то на чердаке валяется. Только в 2007, кажется, по aDSL можно было хотя бы 8Mbps получить.

mogwai ★★★★ ()
Последнее исправление: mogwai (всего исправлений: 1)
Ответ на: комментарий от stinky3000
...
routing-policy:
...

Как я и предполагал решения мне тут не подскажут.

Тебе первым же комментарием ответ дали, что тебе надо routing policy определить и настроить, и чуть ниже даже где про это прочитать подсказали. И даже не раз и не два. После этого ты припёрся рассказать, что надо было настроить routing policy, а не то, что тут советовали?

И в 2021 году притащив ссылку на пост от 2018 ты не извинился, что ни сразу не погуглил толком, ни после того как @Oleg_Iu тебе правильный ответ дал, не сделал какой-нибудь google://netplan+multiple+interfaces+routing+policy, а упрекаешь других, что они не погуглили за тебя? В наглости тебе не занимать.
Или ты в job задание оставил, чтобы тебе кто-нибудь готовый конфиг дал? Не вижу в ОП сумму, которую ты готов был заплатить за это.

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

Ты сибиряку это пишешь. Тут ШПД не больше 10 лет назад стал доступен более-менее.

Уууу, отчасти знакомая тема. Мы в начале 2к в Березовом одному дяденьке тарелку дуплексную организовывали. Точнее там всё было в комплексе, н-компов самой навернутой конфигурации, больше навернуть ну просто нечего было и организация инета через спутник.
ЗЫ Летали зимой, заболели ещё там, национальные методы не помогли, как вернулись толком не помним, оба в полубреду от температуры за 39. Причем нам так «подфартило», что у него в доме туалет не работал, летним скворечником пользовались. Они привычные, а вот нам теплолюбивым неженкам, мягко говоря было очень даже айс.

anc ★★★★★ ()