Добрый день.
Помогите, пожалуйста, новичку решить вот такую проблему:Есть роутер на FreeBSD 6.1, работает natd.
Внешний IP 213.59.235.218/29
Внутренний IP 10.172.0.1/24
В принципе, все устраивает. Маршрутизация работает, Адреса подменяются.
Но возникла потребность выпустить несколько адресов из внутренний сети под реальными IP в большой мир.
Конкретно:
Адрес 10.172.0.90 -> 213.59.235.219
Адрес 10.172.0.91 -> 213.59.235.220
Адрес 10.172.0.92 -> 213.59.235.221При этом, все остальные внутренние адреса должны ходить через нат как и раньше.
Содержимое файла rc.conf
#--------------------------------------------------------------------
defaultrouter="213.59.235.217"
gateway_enable="YES"
hostname="router.mydomain.ru"
ifconfig_myk0="inet 213.59.235.218 netmask 255.255.255.0 up"
ifconfig_em0="inet 10.172.0.1 netmask 255.255.255.0 up"
#--------------------------------------------------------------------
firewall_enable="YES"
inetd_enable="YES"
natd_enable="YES"
natd_interface="myk0"
#--------------------------------------------------------------------Нашел кучу статей про то, как легко и непринужденно люди делают редирект (в т.ч. и на этом форуме). Однако, не все так просто. Ни один совет не помог. А проблема вот в чем:
При существующей конфиге делаем так:
# natd -redirect_address 10.172.0.90 213.59.235.219
Получаем вот это:
# natd: instance default: aliasing address not given
Хорошо. Алиас, так алиас. Делаем так:
# natd -a 213.59.235.219
Получаем вот это:
# natd: Unable to bind divert socket.: Address already in use
Какой именно адрес занят - дошло не сазу. Сокет 8668! Ну хорошо. Пусть будет сокет:# natd -p 8669 -a 213.59.235.219 -redirect_address 10.175.0.90 213.59.235.219
Прожувал молча. Однако, отвалился основной нат, и этот не заработал.
Причем sockstat показывает, что natd юзает два сокета 8668 и 8669Че мне с ним сделать?
P:S использую natd по религиозным соображениям. ipnat пока юзать не хочу.
>Пусть будет сокет:
>
># natd -p 8669 -a 213.59.235.219 -redirect_address 10.175.0.90 213.59.235.219
>
>Прожувал молча. Однако, отвалился основной нат, и этот не заработал.
>Причем sockstat показывает, что natd юзает два сокета 8668 и 8669
>
>Че мне с ним сделать?
>P:S использую natd по религиозным соображениям. ipnat пока юзать не хочу.У меня второй natd пускается так:
# grep natd1 /etc/rc.conf
natd1_enable="YES"
natd1_interface="192.168.3.254"
natd1_flags="-f /etc/natd.conf -p 8778"# cat /etc/natd.conf
log yes
use_sockets no
dynamic yes
same_ports yesСоответственно, нужно скопировать /etc/rc.d/natd в /etc/rc.d/natd1 (или лучше в /usr/local/etc/rc.d )
Да, кстати, а не хотите попробовать использовать ng_nat для той же цели?
>[оверквотинг удален]
>Есть роутер на FreeBSD 6.1, работает natd.
>Внешний IP 213.59.235.218/29
>Внутренний IP 10.172.0.1/24
>В принципе, все устраивает. Маршрутизация работает, Адреса подменяются.
>Но возникла потребность выпустить несколько адресов из внутренний сети под реальными IP
>в большой мир.
>Конкретно:
>Адрес 10.172.0.90 -> 213.59.235.219
>Адрес 10.172.0.91 -> 213.59.235.220
>Адрес 10.172.0.92 -> 213.59.235.221В /etc/natd.conf :
interface myk0
redirect_address 10.172.0.90 213.59.235.219
redirect_address 10.172.0.91 213.59.235.220
redirect_address 10.172.0.92 213.59.235.221
В /etc/rc.conf :
natd_enable="YES"
natd_interface="myk0"
natd_flags="-f /etc/natd.conf"Настраиваешь ipfw .
На ps -ax :
...
... /sbin/natd -f /etc/natd.conf -n myk0
...
>[оверквотинг удален]
>natd_enable="YES"
>natd_interface="myk0"
>natd_flags="-f /etc/natd.conf"
>
>Настраиваешь ipfw .
>
>На ps -ax :
>...
>... /sbin/natd -f /etc/natd.conf -n myk0
>...Если я не ошибаюсь алиас нужно делать на сетевой карте
т.е ifconfig myk0 alias 213.59.235.219 netsmask ****
а потом уже natd -redirect_address 10.172.0.90 213.59.235.219
>[оверквотинг удален]
>>Настраиваешь ipfw .
>>
>>На ps -ax :
>>...
>>... /sbin/natd -f /etc/natd.conf -n myk0
>>...
>
>Если я не ошибаюсь алиас нужно делать на сетевой карте
>т.е ifconfig myk0 alias 213.59.235.219 netsmask ****
>а потом уже natd -redirect_address 10.172.0.90 213.59.235.219Естественно, как само собой разумеющееся. Даже забыл.
Помогите и мне. нужно весь поток данных на внутренний интерфейс PC1 переадресовать на LAN другого компьютера PC2 для обработки трафика. Важно отсуствие маскарадинга, чтобы ip адреса запросов остались правильными. Чувствую что проблема схожа. Экспериментировать не хочется. Если просто поставить шлюз в PC1 смотрящий на PC2, то срабатывает подмена адресов. Это надо обойти. Спасибо.
>Помогите и мне. нужно весь поток данных на внутренний интерфейс PC1 переадресовать
>на LAN другого компьютера PC2 для обработки трафика. Важно отсуствие
>маскарадинга, чтобы ip адреса запросов остались правильными. Чувствую что проблема схожа.
>Экспериментировать не хочется. Если просто поставить шлюз в PC1 смотрящий на
>PC2, то срабатывает подмена адресов. Это надо обойти. Спасибо.Попробовать заюзать правило fwd в ipfw.
fwd не меняет содержимое пакета, а именно адрес источника и адрес назначения, а просто добавляет лишний прыжок.
>>Помогите и мне. нужно весь поток данных на внутренний интерфейс PC1 переадресовать
>>на LAN другого компьютера PC2 для обработки трафика. Важно отсуствие
>>маскарадинга, чтобы ip адреса запросов остались правильными. Чувствую что проблема схожа.
>>Экспериментировать не хочется. Если просто поставить шлюз в PC1 смотрящий на
>>PC2, то срабатывает подмена адресов. Это надо обойти. Спасибо.
>
>Попробовать заюзать правило fwd в ipfw.
>fwd не меняет содержимое пакета, а именно адрес источника и адрес назначения,
>а просто добавляет лишний прыжок.получается, что мне надо заменить правило в фаэрволе
/sbin/ipfw add 8000 divert natd ip from any to any via xl0, где xl0 - WAN адрес
на
/sbin/ipfw add 8000 fwd ip from any to 1.2.3.4 via tl0, где tl0 - LAN адрес
и на LAN 1.2.3.4 будет приходить то же, что и на LAN PC1 (будет дублироваться трафик)
?
Спасибо psn1982
>[оверквотинг удален]
>получается, что мне надо заменить правило в фаэрволе
>/sbin/ipfw add 8000 divert natd ip from any to any via xl0,
>где xl0 - WAN адрес
>на
>/sbin/ipfw add 8000 fwd ip from any to 1.2.3.4 via tl0, где
>tl0 - LAN адрес
>и на LAN 1.2.3.4 будет приходить то же, что и на LAN
>PC1 (будет дублироваться трафик)
>?
>Спасибо psn1982Если я правильно понял то нужно весь трафик который идет через tl0 завернуть на другую машину, с адресом 1.2.3.4
ipfw add 8000 fwd 1.2.3.4 ip from any to any via tl0
Запустить tcpdump на обеих машинах и посмотреть что реально происходит
>[оверквотинг удален]
>>и на LAN 1.2.3.4 будет приходить то же, что и на LAN
>>PC1 (будет дублироваться трафик)
>>?
>>Спасибо psn1982
>
>Если я правильно понял то нужно весь трафик который идет через tl0
>завернуть на другую машину, с адресом 1.2.3.4
>ipfw add 8000 fwd 1.2.3.4 ip from any to any via tl0
>
>Запустить tcpdump на обеих машинах и посмотреть что реально происходитда, понял правильно, но у меня собрано ядро без FIREWALL_FORWARD. Пересобирать боюсь, могу потерять текущие настройки. Можно ли эту задачу выполнить с правилом ipfw divert?
например таким правилом
/sbin/ipfw add 8000 divert natd ip from any to 1.2.3.4 via tl0
?
Спасибо psn1982
>[оверквотинг удален]
>>Запустить tcpdump на обеих машинах и посмотреть что реально происходит
>
>да, понял правильно, но у меня собрано ядро без FIREWALL_FORWARD. Пересобирать боюсь,
>могу потерять текущие настройки. Можно ли эту задачу выполнить с правилом
>ipfw divert?
>например таким правилом
>/sbin/ipfw add 8000 divert natd ip from any to 1.2.3.4 via tl0
>
>?
>Спасибо psn1982ipfw add 8000 divert natd ip from any to 1.2.3.4 via tl0
Означает что пакеты идущие с любого адреса на адрес 1.2.3.4 через интерфейс tl0, нужно отдать на дальнейшую обработку демону natd.
Насчет пересобирать ядро, можно в случае неудачи загрузится со старым.
Как наиболее безопасно пересобрать.
Если из /usr/src/sys/i386/conf не удаляли текущую конфигурацию, то делается cp curent new (current и new имена файлов соответсвующих текущей конфигурации и создаваемой). new файл будет полной копией curent. Затем в файл new дописываем
options IPFIREWALL_FORWARD
Затем компилируем конфигурацию new, затем инсталируем.
В /usr/src/sys/i386/conf рекомендую обзывать конфигурации по порядку установки, к примеру conf1, conf2 и т.п. и никогда не удалять файлы конфигурации после установки, чтобы в любой момент можно было посмотреть что на текущий момент в ядре, и что было раньше.
Можно сделать полный бэкап системы перед экспериментами.
>[оверквотинг удален]
>Если из /usr/src/sys/i386/conf не удаляли текущую конфигурацию, то делается cp curent new
>(current и new имена файлов соответсвующих текущей конфигурации и создаваемой). new
>файл будет полной копией curent. Затем в файл new дописываем
>options IPFIREWALL_FORWARD
>Затем компилируем конфигурацию new, затем инсталируем.
>В /usr/src/sys/i386/conf рекомендую обзывать конфигурации по порядку установки, к примеру conf1, conf2
>и т.п. и никогда не удалять файлы конфигурации после установки, чтобы
>в любой момент можно было посмотреть что на текущий момент в
>ядре, и что было раньше.
>Можно сделать полный бэкап системы перед экспериментами.Хорошо, я так и сделаю. Я вот думаю - обязателен ли natd, если у меня gateway=yes. Может быть правило ipfw divert в таком случае лишнее?
>[оверквотинг удален]
>>Затем компилируем конфигурацию new, затем инсталируем.
>>В /usr/src/sys/i386/conf рекомендую обзывать конфигурации по порядку установки, к примеру conf1, conf2
>>и т.п. и никогда не удалять файлы конфигурации после установки, чтобы
>>в любой момент можно было посмотреть что на текущий момент в
>>ядре, и что было раньше.
>>Можно сделать полный бэкап системы перед экспериментами.
>
>Хорошо, я так и сделаю. Я вот думаю - обязателен ли natd,
>если у меня gateway=yes. Может быть правило ipfw divert в таком
>случае лишнее?gateway_enable="YES"
Разрешает маршрутизацию на машине (пересылка пакетов между интерфейсами). А natd применяется для преобразования сетевых адресов. Позволяет машинам в локальной сети не имеющим внешнего адреса ходить в инет. Когда пакет идет от машины в локальной сети в инет, адрес отправителя заменяется на внешний адрес машины на шлюзе с NAT, заполняется таблица преобразования, поэтому когда пакет идет из инета обратно, просматривается таблица, и выполняется обратное преобразование, адрес назначения с внешнего на шлюзе, меняется на адрес машины в локальной сети.
Тут подробно
http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/netwo...
сделал как говорили - 1)отключил nat (в rc.conf закоментировал) 2)gateway_enabled="YES" оставил, 3)в фаэрволе закоментировал правило DIVERT - интернет не пошел, пинговать наружу не смог? все откатил назад
Кто скажет причину?
>сделал как говорили - 1)отключил nat (в rc.conf закоментировал) 2)gateway_enabled="YES" оставил, 3)в
>фаэрволе закоментировал правило DIVERT - интернет не пошел, пинговать наружу не
>смог? все откатил назад
>Кто скажет причину?Если машина с которой пинговали с серым адресом, то без NAT и не будет работать
Что значит Серый адрес - у меня внешний выделенный ip адрес типа 212.74.229.xxx/28 А пинговать не могу свой внешний шлюз сразу же после тех трех шагов
>Что значит Серый адрес - у меня внешний выделенный ip адрес типа
>212.74.229.xxx/28 А пинговать не могу свой внешний шлюз сразу же после
>тех трех шаговЕсли адреса внешние, маска подсети правильная, на шлюзе сделано gateway_enable="YES", на машине на которой пингуете указан адрес шлюза (внутренний интерфейс сервера на котором gateway_enable="YES"), то все должно работать и без NAT
Я думаю, что нат здесь действительно лишнее. На сколько я понял вам провайдер дал подсеть из этих адресов (предположим что подсеть из 8-ми адресов), значит один ip-адрес вы даете серверу на внутреннем интерфейсе, а всем остальным вы пишете свои реальные адреса и гейтом указываете тот адрес, который вы дали серверу. Еще обратите внимание на маску подсети - она должна быть правильна указана. При gateway_enable="YES" такая схема будет работать