The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Роутинг на Linux-шлюзе "
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Роутинг на Linux-шлюзе "
Сообщение от Khan emailИскать по авторуВ закладки on 14-Ноя-02, 22:19  (MSK)
Господа гуру! Есть проблема, сам не справляюсь, помогите, плз.
Описание: есть локальная сеть, которая в и-нет ходит по кабелю через линух-гейт на котором два интерфейса, один из которых (ну прямо стихотворение про Джека и его дом) отдан на локальную сеть а в другой воткнут шланг от самого прова. Для машин в сети гейтом, что очевидно, является линух-гейт (чуть не сказал "дом Джека"  и в и-нет они тоже ходят через него. Таблица роутинга на гейте выглядит так:

[root@gate root]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
44.33.22.252    *               255.255.255.252 U     0      0        0 eth0
44.33.23.240    *               255.255.255.240 U     0      0        0 eth1
127.0.0.0         *               255.0.0.0            U     0      0        0 lo
default         44.33.22.253    0.0.0.0            UG   0      0        0 eth0
  
destination - это адреса сетей.
Ядро линуха, в зависимости от маски сети выбирает, через какой интерфейс пойдут пакеты, т.е. в локальную сеть они идут через eth1 (44.33.23.241), а в мир - через eth0 (44.33.23.254)
Но  особенность конфигурации провайдера такова, что сетка 34.33.22.252 - это техническая сеть, (как вы можете заметить - она всего на два реальных IP-адреса), через которую в и-нет попасть можно, но из которой! в и-нет попасть нельзя, т.е. в итоге имеем такую ситуацию, что гейту в и-нет не попасть, потому, как ядро эти пакеты заворачивает на eth0, т.е. в техническую сеть. Надеюсь, я всё понятно обьяснил. А гейту в и-нет ходить очень надо. Т.е. надо заставить в и-нет ходить не по маске сетки, а как все машины в сети, используя eth1 (44.33.23.241) Подскажите, можно ли этого добиться каким-то хитрым роутингом (если можно, с примером таблицы), и если нельзя, то чем можно? Иначе придётся вторую машину гейтом ставить, последовательно :) И ещё, может ли от этого страдать какой нибудь умный софт, потому как мне на эту машину много чего вешать придётся (например сейчас надо и-нет ограничить "рабочей областью" (С) Босс )

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "RE: Роутинг на Linux-шлюзе "
Сообщение от Booter emailИскать по авторуВ закладки on 15-Ноя-02, 04:13  (MSK)
>Но  особенность конфигурации провайдера такова, что сетка 34.33.22.252 - это техническая
>сеть, (как вы можете заметить - она всего на два реальных
>IP-адреса), через которую в и-нет попасть можно, но из которой! в
>и-нет попасть нельзя, т.е. в итоге имеем такую ситуацию, что гейту
>в и-нет не попасть, потому, как ядро эти пакеты заворачивает на
>eth0, т.е. в техническую сеть.

Ж) А противоречия здесь никакого нет?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "RE: Роутинг на Linux-шлюзе "
Сообщение от J Искать по авторуВ закладки on 15-Ноя-02, 11:22  (MSK)
>>Но  особенность конфигурации провайдера такова, что сетка 34.33.22.252 - это техническая
>>сеть, (как вы можете заметить - она всего на два реальных
>>IP-адреса), через которую в и-нет попасть можно, но из которой! в
>>и-нет попасть нельзя, т.е. в итоге имеем такую ситуацию, что гейту
>>в и-нет не попасть, потому, как ядро эти пакеты заворачивает на
>>eth0, т.е. в техническую сеть.
>
>Ж) А противоречия здесь никакого нет?

нет, наверное6 транзитные пакеты в инет попадают, а все пакеты с этой сети режутся...
линуксу тут ничего сказать нельзя, по крайней версии стандартными путями
разный соят - mta, httpd, named обычно умеет сам биндиться к нужному порту

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "RE: Роутинг на Linux-шлюзе "
Сообщение от Khan emailИскать по авторуВ закладки on 15-Ноя-02, 13:41  (MSK)
>>>Но  особенность конфигурации провайдера такова, что сетка 34.33.22.252 - это техническая
>>>сеть, (как вы можете заметить - она всего на два реальных
>>>IP-адреса), через которую в и-нет попасть можно, но из которой! в
>>>и-нет попасть нельзя, т.е. в итоге имеем такую ситуацию, что гейту
>>>в и-нет не попасть, потому, как ядро эти пакеты заворачивает на
>>>eth0, т.е. в техническую сеть.
>>
>>Ж) А противоречия здесь никакого нет?
>
>нет, наверное6 транзитные пакеты в инет попадают, а все пакеты с этой
>сети режутся...
>линуксу тут ничего сказать нельзя, по крайней версии стандартными путями
>разный соят - mta, httpd, named обычно умеет сам биндиться к нужному
>порту

к нужному адресу, Вы хотели сказать ;)

Нет, противоречия никакого нет. Было бы противоречие - всё бы работало :) Моё понимание как это всё происходит. Я конечно понимаю, что для кого-то это прописные истины, но всё же... На клиентской машине появляется пакет. Машина по маске сети вытаскивает из него адрес сети, сравнивает со своим и решает: если это в той же сети, то пакет доставляется непосредственно, если из другой сети, то пакет отправляется на межсетевой гейт. Гейт, получив его, проделывает то же самое и смотрит, подключена ли какая-нибудь сетка к нему непосредственно и можно ли доставить пакет прямиком получателю. Если да, то так и происходит, если нет, то и гейт отправляет пакет на другой межсетевой гейт. Я конечно понимаю что всё гораздо сложнее, но чтобы не отклоняться от темы я позволю себе это упрощение. Заметим, что адрес отправителя при этом не меняется. Другой гейт, в данном случае гейт провайдера так же смотрит куда отправить пакет, но перед этим он смотрит "а вообще могу ли я пропускать пакеты от этого отправителя?". Так вот, в моём случае, если отправителем является машина в локальной сети (44.33.23.240-254), то пакеты пропускаются и всё нормально. Но если гейт сам захочет пойти в и-нет, а у него в раблице роутинга прописано, что дефолтный гейт - в сети 44.33.22.252, то пакет отправляется через интерфейс eth0 и адресом отправителя становится 44.33.22.254 и гейт прова решает: "А это что за хрен такой? Его у меня в биллингах нету, пошёл нафиг." и даёт ему отлуп. Так вот если бы отправителем на моем гейте был бы адрес 44.33.23.241, каковой ему присвоен, то всё было бы хорошо. Но это надо как-то объяснить линуху, а я не умею :( В принципе проблема решается, если выделить машину исключительно под гейт, а последовательно с ней включить ещё одну, но это некрасиво и дорого :) Ещё бы проблема решилась бы, если существовала бы софтина с независимой от ядра таблицей роутинга. Тогда бы она слушала интерфейс eth1 (44.33.23.241) и отправляла бы по необходимости на гейт прова через eth0 (44.33.22.253), а в таблице роутинга ядра прописать дефолтным гейтом мой eth1 и всё. Может ли это routed? Или мне туннель нужен? Или может меня спасёт ip route? Пятый день воюю, небритый хожу, сплю плохо, синяки под глазами, коллеги-девчонки заботливо интересуются "Khan, у тебя что-то случилось? С девушкой поругался? Может помочь?" А что я им отвечу? Что мне моя "девушка" через одно место не даёт? ;) И сеть-то для экспериментов доступна только ночью. Коллеги, помогите!

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "RE: Роутинг на Linux-шлюзе "
Сообщение от Sampan Искать по авторуВ закладки on 16-Ноя-02, 02:21  (MSK)
На сколько я понял, проблема в том, что-бы у IP пакетов порожденных локальными процессами (т.е. на самом гейте) при направлении не в локальную сеть, а наружу, в поле источника стояло 44.33.23.241, а не 44.33.22.254
Тяжелый случай!
При нескольких интерфейсах, сколько я не бился, заставить ядро генерить пакеты не с "ближайшего" интерфейса не получилось.

Есть пара экспериментальных идей.

Во-первых, в последнем patch-o-matic есть такая фича
NAT of local connections
Вроде "тепло". Не уверен. Сам еще не пробовал.

Второй вариант более похож на решение.
Сделать SNAT на 44.33.23.241 только при адресе источника 44.33.22.254
iptables -t nat -A POSTROUTING -s 44.33.22.254 -j SNAT --to-source 44.33.23.241

NAT POSTROUTING работает после всех таблиц (фильтрация, маршрутизация). Пакет от локального процесса уже будет направлен роутером на выход eth0, когда в последний момент адрес источника у него будет подменен на 44.33.23.241, соответственно, заново таблицу маршрутизации и, неизбежный в этом случае, форвардинг проходить он не будет (не должен!). А то у роутера мозги съедут.
По идее, работать должно.

Если будешь пробовать - дай знать результаты. Интересно!

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "RE: Роутинг на Linux-шлюзе "
Сообщение от Squid emailИскать по авторуВ закладки on 16-Ноя-02, 12:27  (MSK)
Позвольте и мне 5 копеек добавить.
Просьба ногами не пинать... Я просто хочу помочь.

Никто не обязывает тебя иметь на выходе роутера IP "технической сетки".
Из внутренней сетки вырежь для эксперимента /30 - и поставь адресс из этого "кусочка" на внешнюю карточку.
Главное при описании дефолта провайдера указать интерфейс, на котором его искать. (делаются ли такие вещи на Линуксе, я незнаю, должны!!!).

./squid

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "RE: Роутинг на Linux-шлюзе "
Сообщение от Khan emailИскать по авторуВ закладки on 17-Ноя-02, 03:04  (MSK)
>Никто не обязывает тебя иметь на выходе роутера IP "технической сетки".
>Из внутренней сетки вырежь для эксперимента /30 - и поставь адресс из
>этого "кусочка" на внешнюю карточку.
>Главное при описании дефолта провайдера указать интерфейс, на котором его искать. (делаются
>ли такие вещи на Линуксе, я незнаю, должны!!!).
>
>./squid

Ув. Squid. И Ваш способ оказался работоспособным! На провайдерский (eth0) интерфейс ставил адрес из внутренней сетки и все тоже заработало. Правда таблица роутинга выглядела несколько странно. Логично, но странно. В процессе моих одиночных размышлений мне приходила в голову подобная мысль, но времени проверить ее не было, а потом она затерялсь. Правда от этого варианта отказался - вариант от Sampan'а показался более красивым, да и фиг его этого прова знает - может он абонента привязывает не только к MAC'у, но и к IP, да и 1 IP при этом из 16 расходуется. Спасибо за помощь. Не справился бы без вас двоих.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "RE: Роутинг на Linux-шлюзе "
Сообщение от Khan emailИскать по авторуВ закладки on 17-Ноя-02, 02:54  (MSK)
>Второй вариант более похож на решение.
>Сделать SNAT на 44.33.23.241 только при адресе источника 44.33.22.254
>iptables -t nat -A POSTROUTING -s 44.33.22.254 -j SNAT --to-source 44.33.23.241
>

Огромное спасибо! Сделал через nat и все получилось так как Вы сказали. Пишу из X-ов, из Мозиллы :) Съездил домой, побрился :))) Без Вашего совета савсем бы зарос, люди бы шарахаться начали ;) Еще раз спасибо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Вот и славно :)"
Сообщение от Sampan Искать по авторуВ закладки on 18-Ноя-02, 10:44  (MSK)

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру