28 марта 2024, 16:39

Цитата дня:

UNIX прост. Но надо быть гением, чтобы понять его простоту. Деннис Ритчи


Настройка трех сетевых интерфейсов+PPTP на Ubuntu 12.04

Автор Slava, 02 июня 2020, 01:45

« предыдущая тема - следующая тема »

0 Пользователей и 1 Гость просматривают эту тему.

Вниз

Slava

02 июня 2020, 01:45 Последнее редактирование: 02 июня 2020, 01:55 от Slava
Сразу скажу, что я скорее домашний пользователь.


Дано:
- сетевой интерфейс eth3 - ip 192.168.0.10 подключен к маршрутизатору 192.168.0.1 раздающему проводной интернет
- сетевой интерфейс eth2 - ip 192.168.8.100 подключен к маршрутизатору 192.168.8.1 (usb 4G модем с маршрутизатором внутри)
- сетевой интерфейс eth1 - ip 192.168.5.1
- PPTP клиент настроенный по https://interface31.ru/tech_it/2013/07/nastroyka-pptp-podklyucheniya-v-ubuntu-server.html

Требуется:
- раздать интернет с eth2 на eth1 (сохранив дефолтным шлюзом 192.168.0.1),
- коннектить PPTP через eth2 (не разобрался через что он вообще соединяется, полагаю что через дефолтный шлюз),
- обеспечить доступ с сервера PPTP к веб серверу на localhost  на порту 3185 (принципиально через eth2, поскольку eth3 отключается порой)

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

P.S. может чуть проще так получится объяснить что нужно. На Ubuntu крутиться два вэб сервера, один на порту 80, другой на порту 3185. Роутер 192.168.0.1 и PPTP сервер имеют белые IP адреса. Так вот вэб сервер на порту 80 достаточно видеть через роутер, а вот на порту 3185 должен быть виден с двух белых IP адресов на случай если один из провайдеров отвалился. Ну и поскольку есть второй канал интернет - его тоже разумно раздавать.

Уваров А.С.

Вариант 1 - простой. Поднимаете два канала, через разных провайдеров, затем на стороне внешнего сервера настраиваете балансировку и/или обработку отказа на HAProxy.

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

Slava

Судя по ответу, ничего из того, что я написал не понятно. Либо мне не понятно, что написано в ответе.
1. Внешнего сервера нет, есть клиенты. Клиенты способны обрабатывать отказ доступа по одному белому ip и переключаться на другой белый ip
2. Проблема в том, что я не могу обеспечить доступ к внутреннему серверу с двух белых IP. С одного запросто, а сразу с двух никак.

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

Уваров А.С.

1. Внешнего сервера нет
Роутер 192.168.0.1 и PPTP сервер имеют белые IP адреса.
Клиенты способны обрабатывать отказ доступа по одному белому ip и переключаться на другой белый ip
В этом случае настраиваете две таблицы маршрутизации, соединение к PPTP-серверу пускаете через мобильного оператора. Веб-сервер пробрасываете на первый роутер и PPTP-сервер, затем маркируете входящие соединения и на основании меток направляете исходящий трафик его в ту или иную таблицу маршрутизации по принципу откуда пришел - туда и уходит.

Slava

Вот это я похоже реализовал на iproute 2 (ниже написано как)
Теперь осталось две вещи:
1. Раздать интернет с eth2 на eth1
          echo 101 eth1-route >>/etc/iproute2/rt_tables
          sudo ip route add default via 192.168.8.1 dev eth1 table eth1-route
          в interfaces дописать для eth 1:
              post-up ip route add default via 192.168.8.1 dev eth3 table eth3-route
              post-up ip rule  add from 192.168.5.1 lookup eth3-route   
    Это будет работать или я вообще не прав.
   

2. разобраться с PPTP как принять пакет и отправить его обратно по PPTP
     вообще темный лес... не пойму даже с чего начать.....

Буду крайне благодарен за помощь


sudo ip rule  add from 192.168.8.100 lookup eth2-route
sudo ip rule  add from 192.168.0.10 lookup eth3-route

auto lo
iface lo inet loopback

# The primary network interface
auto eth1
iface eth1 inet static
address 192.168.5.1
netmask 255.255.255.0
network 192.168.5.0
broadcast 192.168.5.255


auto eth2
iface eth2 inet static
address 192.168.8.100
netmask 255.255.255.0
broadcast 192.168.8.255
post-up ip route add default via 192.168.8.1 dev eth2 table eth2-route
post-up ip rule  add from 192.168.8.100 lookup eth2-route
#pre-up iptables-restore < /etc/iptables.up.rules


auto eth3
iface eth3 inet static
address 192.168.0.10
netmask 255.255.255.0
broadcast 192.168.0.255
post-up ip route add default via 192.168.0.1 dev eth3 table eth3-route
post-up ip rule  add from 192.168.0.10 lookup eth3-route


#auto tunnel
#iface tunnel inet ppp
#provider park-vpn
#up route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.89.250



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


Уваров А.С.

Начнем с того, что нет такого понятия, как "раздать интернет".  Вам нужно иметь две таблицы маршрутизации, для каждого из провайдеров, затем промаркировать все входящие соединения и на основе этих меток принимать решение об обратной маршрутизации пакетов. Маршрут к PPTP-серверу принудительно прибить к одной из таблиц.

Для начала прочитайте вот это http://www.opennet.ru/base/net/debian_multilink.txt.html

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

Slava

Разобраться в этом по-настоящему не получается (образование у меня в другой области).
Но суть я понял, о чем и писал выше.
У меня созданы две таблицы, которые заставляют ходить пакеты туда-обратно именно по тем интерфейсам, по которым они прилетели (https://habr.com/ru/post/107267/ - вот так настроил, но при этом потерялся default gw, не пойму где его определить нужно).

sle@Ubnt:~$ ip rout show
default via 192.168.8.1 dev eth2 - проблема что вот это после рестарта сети приходится включать руками так:  sudo route add default gw 192.168.8.1 eth2, не пойму куда прописать чтоб автоматом поднималось. После этого работает: PPTP соединение, интернет на 192.168.5.1 доступен как и требуется (настроено вот так: https://ubuntu-favorite-os.blogspot.com/2010/11/ubuntu_30.html)
31.171.195.108 via 192.168.8.1 dev eth2  src 192.168.8.100 -это вот белый ip PPTP-сервера и всё что мне по сути осталось, чтоб при наборе 31.171.195.108:3185 я видел веб сервер, который я вижу в локалке. Собственно и вопрос в том как "Маршрут к PPTP-серверу принудительно прибить к одной из таблиц."
192.168.0.0/24 dev eth3  proto kernel  scope link  src 192.168.0.10
192.168.5.0/24 dev eth1  proto kernel  scope link  src 192.168.5.1
192.168.8.0/24 dev eth2  proto kernel  scope link  src 192.168.8.100
192.168.89.1 dev ppp12  proto kernel  scope link  src 192.168.89.250

Slava

И небольшой update предыдущего поста
http://192.168.89.250:3185 - здесь я вполне вижу нужный мне сервер
http://192.168.89.1 - здесь я спокойно захожу в интерфейс роутера, который PPT-сервер и вижу на нем адресацию и даже вижу активность когда со стороннего интернета пытаюсь зайти на 31.171.195.108:3185....

пока писал, кажется осенило... мой сервер пакеты возвращать пытается через "default via 192.168.8.1 dev eth2"

Наверное нужно создать третью таблицу маршрутизации:
echo 104 ppp12-route >>/etc/iproute2/rt_tables
sudo ip route add default via 192.168.89.1 dev ppp12 table ppp12-route

и в interfaces
post-up ip route add default via 192.168.89.1 dev ppp12 table ppp12-route
post-up ip rule  add from 192.168.89.250 lookup ppp12-route

Или нет?

Slava

Для начала прочитайте вот это http://www.opennet.ru/base/net/debian_multilink.txt.html
За ссылку спасибо, завтра постараюсь вникнуть в метки окончательно, сегодня уже голова не работает от слова совсем.

Уваров А.С.

пока писал, кажется осенило... мой сервер пакеты возвращать пытается через "default via 192.168.8.1 dev eth2"
Именно, весь смысл данной схемы в том, что мы рулим маршрутами при помощи меток, ими же прибиваем туннель к нужной таблице.

Грубо говоря в mangle PREROUTING пишем что-то вроде, если источник интерфейс A - поставить на соединение метку IN_A, если B - IN-B. Затем там же, если метка соединения A и пакет идет наружу, поставить на него метку TABLE-A, чтобы он ушел в таблицу маршрутизации А.

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

Хотя, если у вас HTTP-сервис, то я сделал бы по другому.

Настроил бы для сети основного провайдера, потом добавил таблицу маршрутизации для резервного, через него бы пустил PPTP. Затем на PPTP-сервере настроил HA-Proxy и он бы уже отрабатывал отказ, плюс можно дополнительно делать балансировку. Ну и единая точка входа. Хотя маркировка вам понадобится в любом случае.

Slava

Трудно мне в этом ориентироваться.
Я ещё раз наверное озвучу главные задачи, чтоб отсеять множество смежных.
Балансировка нагрузки и прочие прелести не нужны.
У сервера всего две задачи:
1. "раздать" резервный интернет до одного роутера. Сейчас это работает. И меня совершенно устраивает, что доступ в интернет у самого сервера "резервный" и дефолтный шлюз у сервера от резервного интернета.
2. ответить на запросы извне по двум белым ip адресам. По одному адресу это сейчас работает благодаря двум таблицам iproure2. Осталось разобраться с PPTP.
Всё. Других задач нет

Вверх