на маршрутизатор (под управлением FreeBSD) приходит пакет из сети 10.10.10.0необходимо заменить source этого пакета соответствующим адресом (к примеру есть некая таблица, где определенные IP из сети 10.10.10.0 сответствуют внешним адресам, все статично, никакой динамики !)
средствами natd сделать такого нельзя, вот вообщем-то и инетересуюсь, а нет ли под bsd каких-нибудь других средств маскарадинга (или спуфинга).
теперь обьясню зачем мне все это нужно: есть технология mitris (принцип очень похож на спутниковый инет, только прием валится не со спутника а с телевышки, а отправка через модем)
это значит, что ответ должен приходить не на ip который назначается модему а на айпишник сетевой карточки.
Решение:
Пользователь имеет у себя сетевую плату (на неё через тюнер все и сваливается) и нужно сделать так чтобы ответ на запрос (идущий через модем которому NAS выдает IP, к примеру 10.10.10.1) приходил на ip сетевухи.Если на маршрутизаторе подменять source пакета (грубо говоря найти соответствие и заменить ip модема -> ip карты) и выкидывать его дальше в сеть, то когда он достигнит destination ответ придет как раз на карточку нашего пользователя.
на линуксе, провернуть такую чтуку получается, но мне нужно сделать такое именно на bsd. Впринципе я слышал про vpn и осознаю что метод приведенный мною не самый лутший, но это временно, а кроме того необходимо сделать в кратчайшие сроки.
Почему natd нельзя?
если один интерфейс 10.10.10.x
второй 20.20.20.x
поднимаешь НАТ на 20.20.20.x
и пакеты транслируются с 10... в 20...клиент диалапиться куда? на любого провайдера или к вам?
клиент дайлапится к нам, но прикол то в том, что мне не нужно подставлять ипишкам из сети 10.10.10.0 ип 20.20.20.0, мне нужно не просто менять сорс у пакета, а подставлять соответсвующий.тоесть у чувака на сетевой карточке прописывается ип, скажем 217.x.y.82.
Он звонит к нам и NAS (основываясь на его логине) выдает его модему ип 10.10.10.82 (например). и гейтвэй ставит дефолтовым на наш маршрутизатор,
на котором сидит демон и смотрит, если пришел пакет с сорсом 10.10.10.82,
значит его надо поменять на 217.x.y.82 и послать дальше....исходя из этого, ответ придет на сетевую карточку клиента.
IMHO
natd -redirect_address local_ip public_ip
public_ip -- alias
t.e.
natd -redirect_address 10.10.10.5 217.10.10.5natd -redirect_address 10.10.10.6 217.10.10.6
...or man ipnat
Вырезка из мана:"redirect_address 10.0.0.8 0.0.0.0
The above command would redirect all incoming traffic to
machine 10.0.0.8."мне нужно чтобы просто у пакета заменялся src на указанный мною, в твоем же примере этого не происходит...
насчет ipnat и ipfilters вцелом, может кто знает как спомощью этих фильтров менять сорсы и можна ли такое вообще,
просто использование ipnat ничего не дало, так как это всеголиш более удобный natd
>Вырезка из мана:
>
>"redirect_address 10.0.0.8 0.0.0.0
>
>The above command would redirect all incoming traffic to
>machine 10.0.0.8."
>
>мне нужно чтобы просто у пакета заменялся src на указанный мною, в
>твоем же примере этого не происходит...
>
>насчет ipnat и ipfilters вцелом, может кто знает как спомощью этих фильтров
>менять сорсы и можна ли такое вообще,
>
>просто использование ipnat ничего не дало, так как это всеголиш более удобный
>natdНе уверен, что правильно тебя понял..
-alias_address | -a address
Use address as the aliasing address. If this option is not specified, the -interface option must be used. The specified address is usually the address assigned to the ``public'' network interface. All data passing out will be rewritten with a source address equal to address.Не оно?
>Не уверен, что правильно тебя понял..
>
>-alias_address | -a address
>Use address as the aliasing address. If this option is not
>specified, the -interface option must be used. The specified address
>is usually the address assigned to the ``public'' network interface. All
>data passing out will be rewritten with a source address equal
>to address.
>
>Не оно?для еденичного случая... а мне нужно чтобы демон заменял сорсы в соответствии с заданными правилами.
к примеру есть файл, в котором указанно:
10.10.10.1 217.x.y.83
10.10.10.2 217.x.y.84
10.10.10.3 217.x.y.85
и т.д.внешние адреса - это адреса на сетевых адаптерах у юзера, внутрение - адреса, которые получает этот юзер, когда дайл-апится к нам.
(зачем это нужно описанно выше)Твой пример заменяет у ВСЕХ пакетов сорс на ОДИН ип, который и есть алиасом....
>>Не уверен, что правильно тебя понял..
>>
>>-alias_address | -a address
>>Use address as the aliasing address. If this option is not
>>specified, the -interface option must be used. The specified address
>>is usually the address assigned to the ``public'' network interface. All
>>data passing out will be rewritten with a source address equal
>>to address.
>>
>>Не оно?
>
>для еденичного случая... а мне нужно чтобы демон заменял сорсы в соответствии
>с заданными правилами.
>
>к примеру есть файл, в котором указанно:
>
>10.10.10.1 217.x.y.83
>10.10.10.2 217.x.y.84
>10.10.10.3 217.x.y.85
>и т.д.
>
>внешние адреса - это адреса на сетевых адаптерах у юзера, внутрение -
>адреса, которые получает этот юзер, когда дайл-апится к нам.
>(зачем это нужно описанно выше)
>
>Твой пример заменяет у ВСЕХ пакетов сорс на ОДИН ип, который и
>есть алиасом....Идем к доктору, и слушаем установку:
Я НЕ ЛОХ, Я НЕ ЛОХ ....а потом идем и ВНИМАТЕЛЬНО читаем доку
http://www.freebsd.org.ru/handbook/natd.htmlОсобенно внимательно этот момент:
------------------------------------------------
Синтаксис для -redirect_address таков:-redirect_address localIP publicIP
localIP Внутренний IP-адрес клиента локальной сети.
publicIP Внешний IP, соответствующий клиенту локальной сети.
В примере этот аргумент будет выглядеть так:-redirect_address 192.168.0.2 128.1.1.2 -redirect_address 192.168.0.3 128.1.1.3
Как и для -redirect_port, эти аргументы также помещаются в строку natd_flags файла /etc/rc.conf.
------------------------
Иду и читаю:Особенно внимательно этот момент:
"Затем natd(8) преобразует исходящие от клиентов локальной сети пакеты, заменяя IP-адреса на соответствующие внешние"
пока вроде то что нужно....
"входящий на некоторый IP-адрес, обратно конкретному клиенту локальной сети"
А ВОТ ЭТО МНЕ НАФИГ НЕ НУЖНО !!!
грубо говоря, на маршрутизаторе есть запись о том что сеть (из которой и берутся ип) доступна через радио (ну интерфэйс такой)...поэтому когда придет пакет с таким сорсом, его туда и пошлют, если я сделаю все через нат.... а неполучится ли того, что нат заметит, что этот адрес использовался и перетранслирует его назад на внутренний! Тоетсь ответ придет на модем, а нужно что бы он сваливался с неба на карточку.
P.S. Я понимаю что вы все тут нев:@#$%^&тся пацаны, но ради прикола читайте тему с самого начала...
>"входящий на некоторый IP-адрес, обратно конкретному клиенту локальной сети"
>
>А ВОТ ЭТО МНЕ НАФИГ НЕ НУЖНО !!!
Дык правила ipfw рисуем так, чтоб попадало все куда надо.
>P.S. Я понимаю что вы все тут нев:@#$%^&тся пацаны, но ради прикола
>читайте тему с самого начала...Прочитал, изложено так, что не очень понятна вся схема.
>Прочитал, изложено так, что не очень понятна вся схема.Ну я не доктор, попробую нарисовать:
INTERNET
|
|
|
|
NAS------- Router --------- Radio (доступ к сети 217.x.y.0)
| |
| |
| |
client-------------------------- radio (217.x.y.83)
modem (10.10.10.83)Вся это байда называется Mitris.
Принцип действия: есть антена (излучения дикого, мертвецов наверно сможет поднять :))), она покрывает средних размеров город.у конечного пользователя есть: модем, через который он будет посылать запрос, и тарелка (маленькая) с тюнером (у тюнера есть сетевой выход, который заведен к его сетевой карте).
Вот на роутере я и хочу повесить нечто, что сможет заменять сорс пакета, который приходит с NAS (в нашем примере пакет 10.10.10.83 -> 217.x.y.83)
>Вот на роутере я и хочу повесить нечто, что сможет заменять сорс пакета, который приходит с NAS (в нашем примере пакет 10.10.10.83 -> 217.x.y.83)
Вешаем на роутере НАТ со статической трансляцией 10.10.10.83 -> 217.x.y.83
Настраиваем ipfw
1. divert natd from 10.10.10.83 to any out via внешний_интерфейс
2. fwd RADIO from any to 217.x.y.83 in via внешний_интерфейс
Вот тут вопрос, вообще-то. Тарелка в роутеру подключается или это отдельный девайс ? То есть пришел пакет на адрес 217.x.y.83, его нужно клиенту отправить. И потом у клиента специальный софт стоит ? И его сетевуха имеет какой адрес ?
>Вот тут вопрос, вообще-то. Тарелка в роутеру подключается или это отдельный девайс
>? То есть пришел пакет на адрес 217.x.y.83, его нужно клиенту
>отправить. И потом у клиента специальный софт стоит ? И его
>сетевуха имеет какой адрес ?нет к роутеру подклечена антена (она просто широковещательно раскидывает пакеты для сети 217.x.y.0)
у клиента стоит:
NAS Radio
/|\ |
| |
| |
| \|/
modem <---- Client <-----eth <----- tuner
(10.10.10.83) (217.x.y.83)у клиента есть два адреса, один на сетевой карте, "внешний".
вотрой у модема "внутрений".под внешним он виден для всего мира, а внутрений используется только для того, чтобы он мог кинуть запрос ко мне на роутер, где и произойдет трансляция.
софта у него нет совершенно никакого, только все стандартное.
>>Вот тут вопрос, вообще-то. Тарелка в роутеру подключается или это отдельный девайс
>>? То есть пришел пакет на адрес 217.x.y.83, его нужно клиенту
>>отправить. И потом у клиента специальный софт стоит ? И его
>>сетевуха имеет какой адрес ?
>
>нет к роутеру подклечена антена (она просто широковещательно раскидывает пакеты для сети
>217.x.y.0)
>у клиента есть два адреса, один на сетевой карте, "внешний".
>вотрой у модема "внутрений".
И как он работает например со стандартной виндой 98 ? два IP исходящие пакеты с одного интерфейса, входящие на другой. TCP-сессия невозможна.
>
>под внешним он виден для всего мира, а внутрений используется только для
>того, чтобы он мог кинуть запрос ко мне на роутер, где
>и произойдет трансляция.
>софта у него нет совершенно никакого, только все стандартное.
На тарелку документация должна быть от производителя .
>И как он работает например со стандартной виндой 98 ? два IP
>исходящие пакеты с одного интерфейса, входящие на другой. TCP-сессия невозможна.
>>а очень даже просто, в винде есть такая штука как метрика, по умолчанию модемное соединение, является приорететным, тоесть default gateway.
все пакеты будут ити через него, но поскольку на своем пути они изменяют сорс (нат на маршрутизаторе), возвращатся они будут не по модему, а через радио.
прикол то в том что на тюнер и соответсвенно карту (сетевую) пользователся поподет весь трафик (рассылка то широковещательная), но одбирать нужные пакеты карта будет по своему ип, который и ставится на маршрутизаторе.
------------------------------------------------------------------------P.S.
Впринципе, это все только пока в теории, проводились конечно испытания на линухе, трейсроут и пинги, работали....покрайней мере, на модеме мигала только одна лампочка (на отправку), тоесть ответ шел на сетевуху.Ну и потом, простой пример: у меня сервер имеет два канала, спутник (только входящий, по понятным причинам), и выделенка (для исходящего трафика). Интерфрейсы разные, адреса разные, но работает ведь :)
>Ну и потом, простой пример: у меня сервер имеет два канала, спутник
>(только входящий, по понятным причинам), и выделенка (для исходящего трафика). Интерфрейсы
>разные, адреса разные, но работает ведь :)
ОС какая, софт специальный наверняка стоит.
ты знаеш...прикол в том, что работают ТОЛЬКО ping и traceroute :)
http и прочее не валит :(наверно, потому что приложение ждет ответ с того интерфейса, с какого послало запрос...а пингу по барабану...
м-да...чувствую, что придется делать все через vpn.
или может кто знает какой-нить другой способ....
>>Не уверен, что правильно тебя понял..
>>
>>-alias_address | -a address
>>Use address as the aliasing address. If this option is not
>>specified, the -interface option must be used. The specified address
>>is usually the address assigned to the ``public'' network interface. All
>>data passing out will be rewritten with a source address equal
>>to address.
>>
>>Не оно?
>
>для еденичного случая... а мне нужно чтобы демон заменял сорсы в соответствии
>с заданными правилами.
>
>к примеру есть файл, в котором указанно:
>
>10.10.10.1 217.x.y.83
>10.10.10.2 217.x.y.84
>10.10.10.3 217.x.y.85
>и т.д.
>
>внешние адреса - это адреса на сетевых адаптерах у юзера, внутрение -
>адреса, которые получает этот юзер, когда дайл-апится к нам.
>(зачем это нужно описанно выше)
>
>Твой пример заменяет у ВСЕХ пакетов сорс на ОДИН ип, который и
>есть алиасом....Ну, в принципе, ты можешь запустить столько копий natd сколько нужно, и для каждого задать свой сокет и свой адрес. Маразм, правда, но другого что-то навскидку в голову не приходит.
>Ну, в принципе, ты можешь запустить столько копий natd сколько нужно, и
>для каждого задать свой сокет и свой адрес. Маразм, правда, но
>другого что-то навскидку в голову не приходит.Единственный выход который я вижу, написать самому програмку, которая будет слушать интерфейс, вылавливать пакеты с сорсами 10.10.10.0/24 (с помощью libpcap) и на основе файлика заменять им сорсы (с помощью libnet)
И ну этот "нат" в печень !
>Единственный выход который я вижу, написать самому програмку, которая будет слушать интерфейс,
>вылавливать пакеты с сорсами 10.10.10.0/24 (с помощью libpcap) и на основе
>файлика заменять им сорсы (с помощью libnet)
Да, супер решение.
>
>И ну этот "нат" в печень !
А то что в nat пакеты попадают из ipfw знать совсем не надо. И уж совсем нет необходимости помнить, что при правильной настройке ipfw имеет ДВА правила: в одну сторону и другую.
>А то что в nat пакеты попадают из ipfw знать совсем не
>надо. И уж совсем нет необходимости помнить, что при правильной настройке
>ipfw имеет ДВА правила: в одну сторону и другую.Я только не понял - а это ты к чему? Особенно по поводу двух правил. И совсем особенно - по поводу правильности. Смотря, какое правило, и для чего.
>А то что в nat пакеты попадают из ipfw знать совсем не
>надо. И уж совсем нет необходимости помнить, что при правильной настройке
>ipfw имеет ДВА правила: в одну сторону и другую.Хорошо, посмотри на схему и скажи тогда, как мне наскрести ipfw для варианта с redirect_addres ?
add divert natd all from 10.10.10.0/24 to any via xxx
или как ?
тоесть скажи хотябы идиологически, как сделать так чтобы пакет не транслировался обратно на модем, а шел по радио
>Хорошо, посмотри на схему и скажи тогда, как мне наскрести ipfw для
>варианта с redirect_addres ?
>
>add divert natd all from 10.10.10.0/24 to any via xxx
divert natd all from 10.0.0.0/24 to any out via внешний_eth
divert natd all from any to внешний_eth in via внешний_eth>
>или как ?
>
>тоесть скажи хотябы идиологически, как сделать так чтобы пакет не транслировался обратно
>на модем, а шел по радио
Выше.
>>Ну, в принципе, ты можешь запустить столько копий natd сколько нужно, и
>>для каждого задать свой сокет и свой адрес. Маразм, правда, но
>>другого что-то навскидку в голову не приходит.
>
>Единственный выход который я вижу, написать самому програмку, которая будет слушать интерфейс,
>вылавливать пакеты с сорсами 10.10.10.0/24 (с помощью libpcap) и на основе
>файлика заменять им сорсы (с помощью libnet)Правильнее было бы natd переписать, а впрочем, твое дело...
ports/net/netsed ?
на Линуксе, если сделать маскарадинг, оно то ICMP пропускает (потому и пинг идет),а в tcp при маскарадинге меняет порты
ну думаю нада повнимательней почитать man 5 ipnat
>ну думаю нада повнимательней почитать man 5 ipnatтут прикол-то не в том механизме, который реализуется с помощью nat систем (что стандартный natd, что ipnat).
мне нужно подменить ТОЛЬКО сорс пакета, причем оставить без изменения порты (особенно исходящий), а механизм реализованный в нат как раз-то и изменяет их (ну для того, что бы знать кому их вернуть)