Сначала небольшое описание. Есть машина с двумя интерфейсами: на eth0 (3 адреса) 10.1.1.1/24, 10.2.1.1/24, 10.3.1.1/24, на eth1 10.10.1.1/24.Далее, делается DNAT с помощью iptables с внешнего интерфейса на сеть за eth1. Соединение может придти с трёх разных роутеров (10.1.1.2, 10.2.1.2, 10.3.1.2), за этирми роутерами внешний мир (192.168.0.0/24). Классически это решается с помощью policy route (пакет iproute2).
Итак, путь первого пакета:
1. Syn 192.168.0.1->10.1.1.1
2. Syn 10.10.1.1->10.10.1.10
3. Syn,Ack 10.10.1.10->10.10.1.1
4. Syn,Ack 10.10.1.1->????Куда? Ибо если на первом шаге отработал DNAT, после него было принято решении о роутинге. А вот на 4 шаге адрес 10.10.1.1 будет внесён в пакет, уже после принятия решения о роутинге. Т.е. policy routing будет видеть ещё внутренний адрес.
Поэтому будет принято не верное решение о роутинге.
1. Да, есть модуль CONNTRACK для iptables, решающий данную проблему. Но, у меня нет возможности его поставить.
2. Отправлять на какой либо другой маршрутер с тем, что бы он уже делал policy routing. Тоже не подходит, ввиду его отсутствия.
3. Можно сделать маршрут на 127.0.0.1 для пакетов с source адресом из 10.10.1.0/24, с тем, что бы пакет прошёл ещё раз цепочки и было принято правильное решение о роутинге. Но почему-то это приводит к тому, что на lo пакету цикляться, и умирают в виду истечения ttl.Вопрос? Ввиду отсутствия других очевидных вариантов, как поправить вариант 3. Или хотя бы объясните где проблема, я уже сам додумаю решение.
По мылу готов предоставить более развёрнутое описание и сам файл конфигурации iptables.
Добрый день,
Люди неужели ждесь нету спецов, способных оказать помощь?
>Добрый день,
>Люди неужели ждесь нету спецов, способных оказать помощь?
Не понял проблемы. Ну DNAT, а полиси-роутинг причем?
>>Добрый день,
>>Люди неужели ждесь нету спецов, способных оказать помощь?
>Не понял проблемы. Ну DNAT, а полиси-роутинг причем?
Тогда скажи куда пойдёт пакет на шаге 4?
>>>Добрый день,
>>>Люди неужели ждесь нету спецов, способных оказать помощь?
>>Не понял проблемы. Ну DNAT, а полиси-роутинг причем?
>Тогда скажи куда пойдёт пакет на шаге 4?Если не отвлекаться на полиси-роутинг, то на адрес заданный в цепочке DNAT
>>>>Добрый день,
>>>>Люди неужели ждесь нету спецов, способных оказать помощь?
>>>Не понял проблемы. Ну DNAT, а полиси-роутинг причем?
>>Тогда скажи куда пойдёт пакет на шаге 4?
>
>Если не отвлекаться на полиси-роутинг, то на адрес заданный в цепочке DNAT
>
Угум. Вот только при DNAT'е сначало будет принято решение о роутинге, а только потом будет подменён адрес. Соответственно, пакет будет роутиться , а полиси роутинг принимать решение, по неправильному соурс адресу.
>>>>>Добрый день,
>>>>>Люди неужели ждесь нету спецов, способных оказать помощь?
>>>>Не понял проблемы. Ну DNAT, а полиси-роутинг причем?
>>>Тогда скажи куда пойдёт пакет на шаге 4?
>>
>>Если не отвлекаться на полиси-роутинг, то на адрес заданный в цепочке DNAT
>>
>Угум. Вот только при DNAT'е сначало будет принято решение о роутинге, а
>только потом будет подменён адрес. Соответственно, пакет будет роутиться , а
>полиси роутинг принимать решение, по неправильному соурс адресу.
Весь вопрос в том, как ещё раз принять решение о роутинге, после замены соурс адреса.
>>>>>Добрый день,
>>>>>Люди неужели ждесь нету спецов, способных оказать помощь?
>>>>Не понял проблемы. Ну DNAT, а полиси-роутинг причем?
>>>Тогда скажи куда пойдёт пакет на шаге 4?
>>
>>Если не отвлекаться на полиси-роутинг, то на адрес заданный в цепочке DNAT
>>
>Угум. Вот только при DNAT'е сначало будет принято решение о роутинге, а
>только потом будет подменён адрес. Соответственно, пакет будет роутиться , а
>полиси роутинг принимать решение, по неправильному соурс адресу.Внимательно читаем... да хоть правило iptables! DNAT помещается в цепочку PREROUTING (PRE значит ДО, ROUTING - маршрутизация). Вопрос снят?
>>>>>>Добрый день,
>>>>>>Люди неужели ждесь нету спецов, способных оказать помощь?
>>>>>Не понял проблемы. Ну DNAT, а полиси-роутинг причем?
>>>>Тогда скажи куда пойдёт пакет на шаге 4?
>>>
>>>Если не отвлекаться на полиси-роутинг, то на адрес заданный в цепочке DNAT
>>>
>>Угум. Вот только при DNAT'е сначало будет принято решение о роутинге, а
>>только потом будет подменён адрес. Соответственно, пакет будет роутиться , а
>>полиси роутинг принимать решение, по неправильному соурс адресу.
>
>Внимательно читаем... да хоть правило iptables! DNAT помещается в цепочку PREROUTING (PRE
>значит ДО, ROUTING - маршрутизация). Вопрос снят?НЕА:)
Проблема в том, что да DNAT подменяет адрес получателя в ценочке PREROUTING, всё ок. Но вот обратный пакет когда идёт, он менятеся в цепочке POSTROUTING! Этого нигде нет, но это так. Проверено экспериментом и здравым смыслом. И вот тут, то и возникает проблема!
>>>>>>>Добрый день,
>>>>>>>Люди неужели ждесь нету спецов, способных оказать помощь?
>>>>>>Не понял проблемы. Ну DNAT, а полиси-роутинг причем?
>>>>>Тогда скажи куда пойдёт пакет на шаге 4?
>>>>
>>>>Если не отвлекаться на полиси-роутинг, то на адрес заданный в цепочке DNAT
>>>>
>>>Угум. Вот только при DNAT'е сначало будет принято решение о роутинге, а
>>>только потом будет подменён адрес. Соответственно, пакет будет роутиться , а
>>>полиси роутинг принимать решение, по неправильному соурс адресу.
>>
>>Внимательно читаем... да хоть правило iptables! DNAT помещается в цепочку PREROUTING (PRE
>>значит ДО, ROUTING - маршрутизация). Вопрос снят?
>
>НЕА:)
>
>Проблема в том, что да DNAT подменяет адрес получателя в ценочке PREROUTING,
>всё ок. Но вот обратный пакет когда идёт, он менятеся в
>цепочке POSTROUTING! Этого нигде нет, но это так. Проверено экспериментом и
>здравым смыслом. И вот тут, то и возникает проблема!Обратный пакет не меняется! Поскольку у запроса исходящий адрес не меняется, то ответ изначально направлен на правильный адрес и через SNAT не проходит
>>>>>>>>Добрый день,
>>>>>>>>Люди неужели ждесь нету спецов, способных оказать помощь?
>>>>>>>Не понял проблемы. Ну DNAT, а полиси-роутинг причем?
>>>>>>Тогда скажи куда пойдёт пакет на шаге 4?
>>>>>
>>>>>Если не отвлекаться на полиси-роутинг, то на адрес заданный в цепочке DNAT
>>>>>
>>>>Угум. Вот только при DNAT'е сначало будет принято решение о роутинге, а
>>>>только потом будет подменён адрес. Соответственно, пакет будет роутиться , а
>>>>полиси роутинг принимать решение, по неправильному соурс адресу.
>>>
>>>Внимательно читаем... да хоть правило iptables! DNAT помещается в цепочку PREROUTING (PRE
>>>значит ДО, ROUTING - маршрутизация). Вопрос снят?
>>
>>НЕА:)
>>
>>Проблема в том, что да DNAT подменяет адрес получателя в ценочке PREROUTING,
>>всё ок. Но вот обратный пакет когда идёт, он менятеся в
>>цепочке POSTROUTING! Этого нигде нет, но это так. Проверено экспериментом и
>>здравым смыслом. И вот тут, то и возникает проблема!
>
>Обратный пакет не меняется! Поскольку у запроса исходящий адрес не меняется, то
>ответ изначально направлен на правильный адрес и через SNAT не проходит
>
Это так. Но ведь для исходящего пакета в п. 3. SRC адрес будет 10.10.1.10. Так? Соответственно, где то этот адрес должен будет замениться на 10.1.1.1. Где это произойдёт?
>>>>>>>>>Добрый день,
>>>>>>>>>Люди неужели ждесь нету спецов, способных оказать помощь?
>>>>>>>>Не понял проблемы. Ну DNAT, а полиси-роутинг причем?
>>>>>>>Тогда скажи куда пойдёт пакет на шаге 4?
>>>>>>
>>>>>>Если не отвлекаться на полиси-роутинг, то на адрес заданный в цепочке DNAT
>>>>>>
>>>>>Угум. Вот только при DNAT'е сначало будет принято решение о роутинге, а
>>>>>только потом будет подменён адрес. Соответственно, пакет будет роутиться , а
>>>>>полиси роутинг принимать решение, по неправильному соурс адресу.
>>>>
>>>>Внимательно читаем... да хоть правило iptables! DNAT помещается в цепочку PREROUTING (PRE
>>>>значит ДО, ROUTING - маршрутизация). Вопрос снят?
>>>
>>>НЕА:)
>>>
>>>Проблема в том, что да DNAT подменяет адрес получателя в ценочке PREROUTING,
>>>всё ок. Но вот обратный пакет когда идёт, он менятеся в
>>>цепочке POSTROUTING! Этого нигде нет, но это так. Проверено экспериментом и
>>>здравым смыслом. И вот тут, то и возникает проблема!
>>
>>Обратный пакет не меняется! Поскольку у запроса исходящий адрес не меняется, то
>>ответ изначально направлен на правильный адрес и через SNAT не проходит
>>
>Это так. Но ведь для исходящего пакета в п. 3. SRC адрес
>будет 10.10.1.10. Так? Соответственно, где то этот адрес должен будет замениться
>на 10.1.1.1. Где это произойдёт?
В цепочке POSTROUTING. Я не понял задачи. В чем проблема? В процессе маршрутизации используется адрес хоста с которого идет пакет 10.10.1.10 и адрес на который идет хх.хх.хх.хх.
>>>>>>>>>>Добрый день,
>>>>>>>>>>Люди неужели ждесь нету спецов, способных оказать помощь?
>>>>>>>>>Не понял проблемы. Ну DNAT, а полиси-роутинг причем?
>>>>>>>>Тогда скажи куда пойдёт пакет на шаге 4?
>>>>>>>
>>>>>>>Если не отвлекаться на полиси-роутинг, то на адрес заданный в цепочке DNAT
>>>>>>>
>>>>>>Угум. Вот только при DNAT'е сначало будет принято решение о роутинге, а
>>>>>>только потом будет подменён адрес. Соответственно, пакет будет роутиться , а
>>>>>>полиси роутинг принимать решение, по неправильному соурс адресу.
>>>>>
>>>>>Внимательно читаем... да хоть правило iptables! DNAT помещается в цепочку PREROUTING (PRE
>>>>>значит ДО, ROUTING - маршрутизация). Вопрос снят?
>>>>
>>>>НЕА:)
>>>>
>>>>Проблема в том, что да DNAT подменяет адрес получателя в ценочке PREROUTING,
>>>>всё ок. Но вот обратный пакет когда идёт, он менятеся в
>>>>цепочке POSTROUTING! Этого нигде нет, но это так. Проверено экспериментом и
>>>>здравым смыслом. И вот тут, то и возникает проблема!
>>>
>>>Обратный пакет не меняется! Поскольку у запроса исходящий адрес не меняется, то
>>>ответ изначально направлен на правильный адрес и через SNAT не проходит
>>>
>>Это так. Но ведь для исходящего пакета в п. 3. SRC адрес
>>будет 10.10.1.10. Так? Соответственно, где то этот адрес должен будет замениться
>>на 10.1.1.1. Где это произойдёт?
>
>
>В цепочке POSTROUTING. Я не понял задачи. В чем проблема? В процессе
>маршрутизации используется адрес хоста с которого идет пакет 10.10.1.10 и адрес
>на который идет хх.хх.хх.хх.правильно, поэтому будет использоват шлюз по умолчанию (т.к. xx.xx.xx.xx нет в нашей таблице). А хочется, что бы пакет ушёл с через то же роутер, через который пришёл!!!
>>>>>>>>>>>Добрый день,
>>>>>>>>>>>Люди неужели ждесь нету спецов, способных оказать помощь?
>>>>>>>>>>Не понял проблемы. Ну DNAT, а полиси-роутинг причем?
>>>>>>>>>Тогда скажи куда пойдёт пакет на шаге 4?
>>>>>>>>
>>>>>>>>Если не отвлекаться на полиси-роутинг, то на адрес заданный в цепочке DNAT
>>>>>>>>
>>>>>>>Угум. Вот только при DNAT'е сначало будет принято решение о роутинге, а
>>>>>>>только потом будет подменён адрес. Соответственно, пакет будет роутиться , а
>>>>>>>полиси роутинг принимать решение, по неправильному соурс адресу.
>>>>>>
>>>>>>Внимательно читаем... да хоть правило iptables! DNAT помещается в цепочку PREROUTING (PRE
>>>>>>значит ДО, ROUTING - маршрутизация). Вопрос снят?
>>>>>
>>>>>НЕА:)
>>>>>
>>>>>Проблема в том, что да DNAT подменяет адрес получателя в ценочке PREROUTING,
>>>>>всё ок. Но вот обратный пакет когда идёт, он менятеся в
>>>>>цепочке POSTROUTING! Этого нигде нет, но это так. Проверено экспериментом и
>>>>>здравым смыслом. И вот тут, то и возникает проблема!
>>>>
>>>>Обратный пакет не меняется! Поскольку у запроса исходящий адрес не меняется, то
>>>>ответ изначально направлен на правильный адрес и через SNAT не проходит
>>>>
>>>Это так. Но ведь для исходящего пакета в п. 3. SRC адрес
>>>будет 10.10.1.10. Так? Соответственно, где то этот адрес должен будет замениться
>>>на 10.1.1.1. Где это произойдёт?
>>
>>
>>В цепочке POSTROUTING. Я не понял задачи. В чем проблема? В процессе
>>маршрутизации используется адрес хоста с которого идет пакет 10.10.1.10 и адрес
>>на который идет хх.хх.хх.хх.
>
>правильно, поэтому будет использоват шлюз по умолчанию (т.к. xx.xx.xx.xx нет в нашей
>таблице). А хочется, что бы пакет ушёл с через то же
>роутер, через который пришёл!!!
Помещай его в SNAT на роутерах. Будешь иметь такой результат.
>>>>>>>>>>>>Добрый день,
>>>>>>>>>>>>Люди неужели ждесь нету спецов, способных оказать помощь?
>>>>>>>>>>>Не понял проблемы. Ну DNAT, а полиси-роутинг причем?
>>>>>>>>>>Тогда скажи куда пойдёт пакет на шаге 4?
>>>>>>>>>
>>>>>>>>>Если не отвлекаться на полиси-роутинг, то на адрес заданный в цепочке DNAT
>>>>>>>>>
>>>>>>>>Угум. Вот только при DNAT'е сначало будет принято решение о роутинге, а
>>>>>>>>только потом будет подменён адрес. Соответственно, пакет будет роутиться , а
>>>>>>>>полиси роутинг принимать решение, по неправильному соурс адресу.
>>>>>>>
>>>>>>>Внимательно читаем... да хоть правило iptables! DNAT помещается в цепочку PREROUTING (PRE
>>>>>>>значит ДО, ROUTING - маршрутизация). Вопрос снят?
>>>>>>
>>>>>>НЕА:)
>>>>>>
>>>>>>Проблема в том, что да DNAT подменяет адрес получателя в ценочке PREROUTING,
>>>>>>всё ок. Но вот обратный пакет когда идёт, он менятеся в
>>>>>>цепочке POSTROUTING! Этого нигде нет, но это так. Проверено экспериментом и
>>>>>>здравым смыслом. И вот тут, то и возникает проблема!
>>>>>
>>>>>Обратный пакет не меняется! Поскольку у запроса исходящий адрес не меняется, то
>>>>>ответ изначально направлен на правильный адрес и через SNAT не проходит
>>>>>
>>>>Это так. Но ведь для исходящего пакета в п. 3. SRC адрес
>>>>будет 10.10.1.10. Так? Соответственно, где то этот адрес должен будет замениться
>>>>на 10.1.1.1. Где это произойдёт?
>>>
>>>
>>>В цепочке POSTROUTING. Я не понял задачи. В чем проблема? В процессе
>>>маршрутизации используется адрес хоста с которого идет пакет 10.10.1.10 и адрес
>>>на который идет хх.хх.хх.хх.
>>
>>правильно, поэтому будет использоват шлюз по умолчанию (т.к. xx.xx.xx.xx нет в нашей
>>таблице). А хочется, что бы пакет ушёл с через то же
>>роутер, через который пришёл!!!
>Помещай его в SNAT на роутерах. Будешь иметь такой результат.О каком SNATE речь??? Пакет пойдёт на дефаулт роутер. Т.е. на единственный роутер для всех трёх диапазонов (10.1.1.1/24, 10.2.1.1/24, 10.3.1.1/24). Но роутеров три, и не случайно. А для увеличения надёжности. Поэтому хочется что бы пакет сразу уходил куда нужно.
>>>>>>>>>>>>>Добрый день,
>>>>>>>>>>>>>Люди неужели ждесь нету спецов, способных оказать помощь?
>>>>>>>>>>>>Не понял проблемы. Ну DNAT, а полиси-роутинг причем?
>>>>>>>>>>>Тогда скажи куда пойдёт пакет на шаге 4?
>>>>>>>>>>
>>>>>>>>>>Если не отвлекаться на полиси-роутинг, то на адрес заданный в цепочке DNAT
>>>>>>>>>>
>>>>>>>>>Угум. Вот только при DNAT'е сначало будет принято решение о роутинге, а
>>>>>>>>>только потом будет подменён адрес. Соответственно, пакет будет роутиться , а
>>>>>>>>>полиси роутинг принимать решение, по неправильному соурс адресу.
>>>>>>>>
>>>>>>>>Внимательно читаем... да хоть правило iptables! DNAT помещается в цепочку PREROUTING (PRE
>>>>>>>>значит ДО, ROUTING - маршрутизация). Вопрос снят?
>>>>>>>
>>>>>>>НЕА:)
>>>>>>>
>>>>>>>Проблема в том, что да DNAT подменяет адрес получателя в ценочке PREROUTING,
>>>>>>>всё ок. Но вот обратный пакет когда идёт, он менятеся в
>>>>>>>цепочке POSTROUTING! Этого нигде нет, но это так. Проверено экспериментом и
>>>>>>>здравым смыслом. И вот тут, то и возникает проблема!
>>>>>>
>>>>>>Обратный пакет не меняется! Поскольку у запроса исходящий адрес не меняется, то
>>>>>>ответ изначально направлен на правильный адрес и через SNAT не проходит
>>>>>>
>>>>>Это так. Но ведь для исходящего пакета в п. 3. SRC адрес
>>>>>будет 10.10.1.10. Так? Соответственно, где то этот адрес должен будет замениться
>>>>>на 10.1.1.1. Где это произойдёт?
>>>>
>>>>
>>>>В цепочке POSTROUTING. Я не понял задачи. В чем проблема? В процессе
>>>>маршрутизации используется адрес хоста с которого идет пакет 10.10.1.10 и адрес
>>>>на который идет хх.хх.хх.хх.
>>>
>>>правильно, поэтому будет использоват шлюз по умолчанию (т.к. xx.xx.xx.xx нет в нашей
>>>таблице). А хочется, что бы пакет ушёл с через то же
>>>роутер, через который пришёл!!!
>>Помещай его в SNAT на роутерах. Будешь иметь такой результат.
>
>О каком SNATE речь??? Пакет пойдёт на дефаулт роутер. Т.е. на единственный
>роутер для всех трёх диапазонов (10.1.1.1/24, 10.2.1.1/24, 10.3.1.1/24). Но роутеров три,
>и не случайно. А для увеличения надёжности. Поэтому хочется что бы
>пакет сразу уходил куда нужно.На каждом из этих трех роутеров поставь SNAT или MASQUERADE. Не на том над которым ты ломаешь голову. Не получается все сделать в 1 ящике - расширяй поле деятельности
>>>>>>>>>>>>>>Добрый день,
>>>>>>>>>>>>>>Люди неужели ждесь нету спецов, способных оказать помощь?
>>>>>>>>>>>>>Не понял проблемы. Ну DNAT, а полиси-роутинг причем?
>>>>>>>>>>>>Тогда скажи куда пойдёт пакет на шаге 4?
>>>>>>>>>>>
>>>>>>>>>>>Если не отвлекаться на полиси-роутинг, то на адрес заданный в цепочке DNAT
>>>>>>>>>>>
>>>>>>>>>>Угум. Вот только при DNAT'е сначало будет принято решение о роутинге, а
>>>>>>>>>>только потом будет подменён адрес. Соответственно, пакет будет роутиться , а
>>>>>>>>>>полиси роутинг принимать решение, по неправильному соурс адресу.
>>>>>>>>>
>>>>>>>>>Внимательно читаем... да хоть правило iptables! DNAT помещается в цепочку PREROUTING (PRE
>>>>>>>>>значит ДО, ROUTING - маршрутизация). Вопрос снят?
>>>>>>>>
>>>>>>>>НЕА:)
>>>>>>>>
>>>>>>>>Проблема в том, что да DNAT подменяет адрес получателя в ценочке PREROUTING,
>>>>>>>>всё ок. Но вот обратный пакет когда идёт, он менятеся в
>>>>>>>>цепочке POSTROUTING! Этого нигде нет, но это так. Проверено экспериментом и
>>>>>>>>здравым смыслом. И вот тут, то и возникает проблема!
>>>>>>>
>>>>>>>Обратный пакет не меняется! Поскольку у запроса исходящий адрес не меняется, то
>>>>>>>ответ изначально направлен на правильный адрес и через SNAT не проходит
>>>>>>>
>>>>>>Это так. Но ведь для исходящего пакета в п. 3. SRC адрес
>>>>>>будет 10.10.1.10. Так? Соответственно, где то этот адрес должен будет замениться
>>>>>>на 10.1.1.1. Где это произойдёт?
>>>>>
>>>>>
>>>>>В цепочке POSTROUTING. Я не понял задачи. В чем проблема? В процессе
>>>>>маршрутизации используется адрес хоста с которого идет пакет 10.10.1.10 и адрес
>>>>>на который идет хх.хх.хх.хх.
>>>>
>>>>правильно, поэтому будет использоват шлюз по умолчанию (т.к. xx.xx.xx.xx нет в нашей
>>>>таблице). А хочется, что бы пакет ушёл с через то же
>>>>роутер, через который пришёл!!!
>>>Помещай его в SNAT на роутерах. Будешь иметь такой результат.
>>
>>О каком SNATE речь??? Пакет пойдёт на дефаулт роутер. Т.е. на единственный
>>роутер для всех трёх диапазонов (10.1.1.1/24, 10.2.1.1/24, 10.3.1.1/24). Но роутеров три,
>>и не случайно. А для увеличения надёжности. Поэтому хочется что бы
>>пакет сразу уходил куда нужно.
>
>На каждом из этих трех роутеров поставь SNAT или MASQUERADE. Не на
>том над которым ты ломаешь голову. Не получается все сделать в
>1 ящике - расширяй поле деятельностиТаки проблема в том, что например роутер 10.1.1.1 установлен как роутер по умолчанию для моего. Соответственно все пакеты будут уходить на него. Но не на остальные два!
>>>>>>>>>>>>>>>Добрый день,
>>>>>>>>>>>>>>>Люди неужели ждесь нету спецов, способных оказать помощь?
>>>>>>>>>>>>>>Не понял проблемы. Ну DNAT, а полиси-роутинг причем?
>>>>>>>>>>>>>Тогда скажи куда пойдёт пакет на шаге 4?
>>>>>>>>>>>>
>>>>>>>>>>>>Если не отвлекаться на полиси-роутинг, то на адрес заданный в цепочке DNAT
>>>>>>>>>>>>
>>>>>>>>>>>Угум. Вот только при DNAT'е сначало будет принято решение о роутинге, а
>>>>>>>>>>>только потом будет подменён адрес. Соответственно, пакет будет роутиться , а
>>>>>>>>>>>полиси роутинг принимать решение, по неправильному соурс адресу.
>>>>>>>>>>
>>>>>>>>>>Внимательно читаем... да хоть правило iptables! DNAT помещается в цепочку PREROUTING (PRE
>>>>>>>>>>значит ДО, ROUTING - маршрутизация). Вопрос снят?
>>>>>>>>>
>>>>>>>>>НЕА:)
>>>>>>>>>
>>>>>>>>>Проблема в том, что да DNAT подменяет адрес получателя в ценочке PREROUTING,
>>>>>>>>>всё ок. Но вот обратный пакет когда идёт, он менятеся в
>>>>>>>>>цепочке POSTROUTING! Этого нигде нет, но это так. Проверено экспериментом и
>>>>>>>>>здравым смыслом. И вот тут, то и возникает проблема!
>>>>>>>>
>>>>>>>>Обратный пакет не меняется! Поскольку у запроса исходящий адрес не меняется, то
>>>>>>>>ответ изначально направлен на правильный адрес и через SNAT не проходит
>>>>>>>>
>>>>>>>Это так. Но ведь для исходящего пакета в п. 3. SRC адрес
>>>>>>>будет 10.10.1.10. Так? Соответственно, где то этот адрес должен будет замениться
>>>>>>>на 10.1.1.1. Где это произойдёт?
>>>>>>
>>>>>>
>>>>>>В цепочке POSTROUTING. Я не понял задачи. В чем проблема? В процессе
>>>>>>маршрутизации используется адрес хоста с которого идет пакет 10.10.1.10 и адрес
>>>>>>на который идет хх.хх.хх.хх.
>>>>>
>>>>>правильно, поэтому будет использоват шлюз по умолчанию (т.к. xx.xx.xx.xx нет в нашей
>>>>>таблице). А хочется, что бы пакет ушёл с через то же
>>>>>роутер, через который пришёл!!!
>>>>Помещай его в SNAT на роутерах. Будешь иметь такой результат.
>>>
>>>О каком SNATE речь??? Пакет пойдёт на дефаулт роутер. Т.е. на единственный
>>>роутер для всех трёх диапазонов (10.1.1.1/24, 10.2.1.1/24, 10.3.1.1/24). Но роутеров три,
>>>и не случайно. А для увеличения надёжности. Поэтому хочется что бы
>>>пакет сразу уходил куда нужно.
>>
>>На каждом из этих трех роутеров поставь SNAT или MASQUERADE. Не на
>>том над которым ты ломаешь голову. Не получается все сделать в
>>1 ящике - расширяй поле деятельности
>
>Таки проблема в том, что например роутер 10.1.1.1 установлен как роутер по
>умолчанию для моего. Соответственно все пакеты будут уходить на него. Но
>не на остальные два!То есть 10.2.1.1/24 тоже прописан через 10.1.1.1?
Я ушел.
>>>На каждом из этих трех роутеров поставь SNAT или MASQUERADE. Не на
>>>том над которым ты ломаешь голову. Не получается все сделать в
>>>1 ящике - расширяй поле деятельности
>>
>>Таки проблема в том, что например роутер 10.1.1.1 установлен как роутер по
>>умолчанию для моего. Соответственно все пакеты будут уходить на него. Но
>>не на остальные два!
>
>То есть 10.2.1.1/24 тоже прописан через 10.1.1.1?
>Я ушел.
нет. Но т.к. стандартный алгоритм роутинга не может найди пути к xx.xx.xx.xx, то он отправляет в default. А для того что бы раскидать по двум остальным нужен пакет с уже подменённым src адресом и тот самы policy routing.
Если я все правильно понял, то
http://linux-ip.net/html/adv-multi-internet.html
Вся разница, что там два разных интерфейса со своими ip, а у тебя один и на нем несколько ip.
>Если я все правильно понял, то
>http://linux-ip.net/html/adv-multi-internet.html
>Вся разница, что там два разных интерфейса со своими ip, а у
>тебя один и на нем несколько ip.
Да! Это решение:) Спасибо, огромное. Добавил в копилку.
Я ещё попробую побороть своё решение с lo интерфейсом, может чего и получиться.
Я еще раз подумал над твоей задачей и теперь сомневаюсь, что предложенный мной вариант будет работать. Я пробовал policy route и NAT на РАЗНЫХ машинах, а у тебя на одной. Поэтому предлагаю другое решение. Повесить на eth1 несколько адресов, например:
10.10.1.1/24
10.10.1.2/24
10.10.1.3/24
Далее правила DNAT
iptables -t nat -A PREROUTING -d 10.1.1.1 -j DNAT --to-destination 10.10.1.1
iptables -t nat -A PREROUTING -d 10.2.1.1 -j DNAT --to-destination 10.10.1.2
iptables -t nat -A PREROUTING -d 10.3.1.1 -j DNAT --to-destination 10.10.1.3
Т.о. в policy route можно раскидывать по таблицам на основе src 10.10.1.1, 10.10.1.2 и 10.10.1.3.
Попробуй.
>Я еще раз подумал над твоей задачей и теперь сомневаюсь, что предложенный
>мной вариант будет работать. Я пробовал policy route и NAT на
>РАЗНЫХ машинах, а у тебя на одной. Поэтому предлагаю другое решение.
>Повесить на eth1 несколько адресов, например:
>10.10.1.1/24
>10.10.1.2/24
>10.10.1.3/24
>Далее правила DNAT
>iptables -t nat -A PREROUTING -d 10.1.1.1 -j DNAT --to-destination 10.10.1.1
>iptables -t nat -A PREROUTING -d 10.2.1.1 -j DNAT --to-destination 10.10.1.2
>iptables -t nat -A PREROUTING -d 10.3.1.1 -j DNAT --to-destination 10.10.1.3
>Т.о. в policy route можно раскидывать по таблицам на основе src 10.10.1.1,
>10.10.1.2 и 10.10.1.3.
>Попробуй.Да, но это значит, что на каждой машине, что за интерфейсом eth1 требуется, по три ip адреса. А этого хотелось избежать.
Поэтому-то и возникла идея, что пакет с src из 10.10.1.0/24 роутить по дефаулту на 127.0.0.1, с тем что бы он ещё раз прошел всё цепочку PRE-FORWARD-POST без каких либо изменения в пакете. Соответственно будет принято правильное решение о маршрутизации. Так сказать cisco way.
Сори, но я тогда не понял задачи. Ты хочешь DNAT-ить всю подсеть 10.10.1.0/24? Зачем вообще тогда нужен NAT?
>Сори, но я тогда не понял задачи. Ты хочешь DNAT-ить всю подсеть
>10.10.1.0/24? Зачем вообще тогда нужен NAT?Есть сеть 10.10.1.0/24 в ней находяться всякие разные машины, типа вэб-серверов, и прочих серверов (на каждом сервере один ip). Есть очень важные и нужные торговые сервера. Есть три провайдера. Для каждого провайдера своя циска. Все они приходят на машуну которую мы сейчас обсуждаем. Есть публичные адреса серверов в сети каждого провайдера. Эти адреса подняты на eth0 моей машины. Поэтому нужен DNAT. Соответственно, что бы пакеты уходили туда откуда пришли нужен policy routing.
Понятно. Пока вижу два варианта.
1. Поставить второй роутер перед этим. На одном - policy routing, на другом - DNAT.
2. Использовать какой-нибудь редиректор и policy routing. Например, в xinetd есть redirect. Но тогда сервера в локалке будут видеть только локальный ip шлюза. Если нужны реальные ip в логах, то этот вариант не подходит.
Если еще что придумаю - сообщю. Найдешь свое решение - опиши, плиз.
>Понятно. Пока вижу два варианта.
>1. Поставить второй роутер перед этим. На одном - policy routing, на
>другом - DNAT.
>2. Использовать какой-нибудь редиректор и policy routing. Например, в xinetd есть redirect.
>Но тогда сервера в локалке будут видеть только локальный ip шлюза.
>Если нужны реальные ip в логах, то этот вариант не подходит.
>
>Если еще что придумаю - сообщю. Найдешь свое решение - опиши, плиз.
>
Оба пройдены.
Хорошо. Как найду решение свистну.
Посмотри еще здесь.
http://www.netfilter.org/patch-o-matic/pom-extra.html#pom-ex...This option adds a `ROUTE' target, which enables you to setup unusual
routes. For example, the ROUTE lets you route a received packet through
an interface or towards a host, even if the regular destination of the
packet is the router itself. The ROUTE target is also able to change the
incoming interface of a packet.
>Посмотри еще здесь.
>http://www.netfilter.org/patch-o-matic/pom-extra.html#pom-ex...
>
>This option adds a `ROUTE' target, which enables you to setup unusual
>
>routes. For example, the ROUTE lets you route a received packet through
>
>an interface or towards a host, even if the regular destination of
>the
>packet is the router itself. The ROUTE target is also able to
>change the
>incoming interface of a packet.Тоже видел. У меня в системе нет этого модуля. А компилить, не могу.
>>Сори, но я тогда не понял задачи. Ты хочешь DNAT-ить всю подсеть
>>10.10.1.0/24? Зачем вообще тогда нужен NAT?
>
>Есть сеть 10.10.1.0/24 в ней находяться всякие разные машины, типа вэб-серверов, и
>прочих серверов (на каждом сервере один ip). Есть очень важные и
>нужные торговые сервера. Есть три провайдера. Для каждого провайдера своя циска.
>Все они приходят на машуну которую мы сейчас обсуждаем. Есть публичные
>адреса серверов в сети каждого провайдера. Эти адреса подняты на eth0
>моей машины. Поэтому нужен DNAT. Соответственно, что бы пакеты уходили туда
>откуда пришли нужен policy routing.
Мдя...
А не проще поднять нормальную маршрутизацию? Тогда и уходить будет нормально, без всяких приблуд. Или там такие мраки что понять невозможно.
Или железо настолько слабое что не потянет?
>>>Сори, но я тогда не понял задачи. Ты хочешь DNAT-ить всю подсеть
>>>10.10.1.0/24? Зачем вообще тогда нужен NAT?
>>
>>Есть сеть 10.10.1.0/24 в ней находяться всякие разные машины, типа вэб-серверов, и
>>прочих серверов (на каждом сервере один ip). Есть очень важные и
>>нужные торговые сервера. Есть три провайдера. Для каждого провайдера своя циска.
>>Все они приходят на машуну которую мы сейчас обсуждаем. Есть публичные
>>адреса серверов в сети каждого провайдера. Эти адреса подняты на eth0
>>моей машины. Поэтому нужен DNAT. Соответственно, что бы пакеты уходили туда
>>откуда пришли нужен policy routing.
>
>
>Мдя...
>А не проще поднять нормальную маршрутизацию? Тогда и уходить будет нормально, без
>всяких приблуд. Или там такие мраки что понять невозможно.
>Или железо настолько слабое что не потянет?
А что значит нормальная маршрутизация??? Не понимаю?
А ты не рассматривал вариант получения у провайдеров реальных адресов для серверов? Если да, то в чем причина отказа?
>А ты не рассматривал вариант получения у провайдеров реальных адресов для серверов?
>Если да, то в чем причина отказа?По моему трэд пошёл в неправильную сторону. Да у меня есть 3 сети, по одной от каждого провайдена и есть PI адреса.
Но беда в том, что Windows сервера не умеют полиси роутинг, поэтому мой девайс по прежнему будет нужен. Ну и плюс что бы не выставлять винды напрямую в инет.
Имея реальные ip никто не мешает тебе использовать роутер между Инетом и windows-серверами. Некоторые провайдеры специально выделяют дополнительную подсеть с маской 30 (для связи между cisco и роутером) помимо основной. Например, один из наших двух провайдеров sovintel сразу это предложил. Если пров дает одну подсеть используй на роутере proxy_arp (используем для второго провайдера). Проблем не вижу.
>Имея реальные ip никто не мешает тебе использовать роутер между Инетом и
>windows-серверами. Некоторые провайдеры специально выделяют дополнительную подсеть с маской 30 (для
>связи между cisco и роутером) помимо основной. Например, один из наших
>двух провайдеров sovintel сразу это предложил. Если пров дает одну подсеть
>используй на роутере proxy_arp (используем для второго провайдера). Проблем не вижу.
>
:)
Я в курсе:) Но не хочу.:) Как профессор Преображенский. Не хочу.
Грубо говоря это будет не правильно. Нефиг в DMZ делать реальным адресам.
Дело хозяйское :)
Только вот почему реальные адреса в DMZ - неправильно, для меня загадка.