|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Daniel Ginsburg 2:5020/400 11 Jan 2005 23:49:35 To : Eugene Grosbein Subject : Re: ICMP errors & NAT -------------------------------------------------------------------------------- Eugene Grosbein <Eugene.Grosbein@f1.n5006.z2.fidonet.org> wrote: > Привет! > > Вопрос на тему "что должен делать NAT и чего он делать не должен". > Возьмем простую схему: > > H-...-B-L-R-...-G-...D > > Здесь H - хост в публичном интернете, B - пограничный роутер > автономной системы AS, в которую входит все, что правее B. Многоточие > между ними - путь в интернете от H до B, он нас не интересует. > L - локальная сеть в системе AS на реальных адресах, R - внутренний > маршрутизатор с NAT. Все что правее его - сеть на приватных адресах, > включающая хост D, а G - один из маршрутизаторов на пути от R до D, > у всех таких роутеров G только серые адреса. > > У D кроме серого адреса есть и отдельный реальный, трафик на этот реальный > адрес приходит извне на R, который его транслирует в серый адрес D > (команда redirect_address для natd). > > Пусть теперь хост H запускает traceroute на реальный адрес машины D. > Пока пакеты идут вплоть до R, система H получает нормальную трассировку > маршрута. Что получается на следующем после R хопе? Пакет от H из-за > redirect_address транслируется и попадает на первый из роутеров G, > который обнаруживает, что TTL уже ноль, прибивает пакет, генерирует > новый пакет ICMP error и посылает его от своего собственного серого > адреса в сторону H. Этот ICMP-пакет попадает снова на R и обрабатывается > NAT'ом. > > natd в FreeBSD 3.x и более старых, а также ранних версий 4.x транслировал > адрес источника в таком пакете и если в конфигурации не сказано иного, > пакет уходил в интернет с адресом источника, заданным аргументом -a или -n, > то есть со стандатным alias address. В результате H видел в трассировке > маршрута несколько строк с одинаковыми адресами - столько, сколько > маршрутизаторов G между R и H. Потом кто-то написал PR и в результате > поведение natd (точнее, libalias) изменили - он перестал транслировать > исходящие ICMP errors и последние версии 4.x и в пятерке такие ICMP-пакеты > уходят в публичный интернет с приватным адресом источника. > > В свое время при переходе с 3.5 сразу на середину ветки 4.x это изменение > мне не понравилось и я сделал патч для libalias, восстанавливающий старое > поведение, с которым успешно прожил больше двух лет. Hе понравилось > это изменение во-первых, потому что структура внутренней сети становится > видна хостам вне автономной системы. Во-вторых, потому что серые адреса > часто режутся в публичном интернете (и это правильно), поэтому трассировка > будет в соответствующих строчках вместо серых адресов рисовать звезды > и тормозить. А со старым поведением просто рисуется несколько строк с > одинаковым адресом и не тормозит. > > Hо в этом случае имеем один минус. Хосты в сети L видят то же самое, > что и хост H. Hо сеть L внутри автономной системы и ей можно показывать > структуру внутренней сети, а кроме того, серые адреса внутри нее можно > не резать. В последнее время этот минус стал сильно мешать. > > Теперь вопрос к сетевикам - как вы считаете, какое поведение более > "правильное" - пропуск исходящих ICMP errors без трансляции или > с трансляцией адреса источника? > Мне представляется, что первый способ лучше и дело даже не в Time Exceeded, а в Destination Unreachable/Fragmentation Needed and Don't Fragment was Set. Посылать их с RFC1918-адресами - значит закладывать себе мину с PMTUD. А что касается сокрытия структуры от сети L, то может быть просто не натить пакеты L<->D, а раздать соответствующие маршруты прямо до B? Тут главное не дать им (маршрутам к RFC1918-сетям) утечь через B в интернет. -- dg --- ifmail v.2.15dev5.3 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/91798abfa565.html, оценка из 5, голосов 10
|