ipfw+natd? Пакеты ходят в одну сторону!Где ошибка?

FreeBSD, NetBSD, OpenBSD, DragonFly и т. д.

Модератор: arachnid

weldpua2008
Сообщения: 19

ipfw+natd? Пакеты ходят в одну сторону!Где ошибка?

Сообщение weldpua2008 »

Я тут уже неделю борюсь с mpd+freeradius+freebsd 6+freenibs+ipfw+natd.

Подключаюсь WinXP к серверу, создается интерфейс ng0.
Сервер подключен в Инет, интерфейс tun0.

ipfw+natd:
natd -n tun0 -p 8668
sleep 3
ipfw 20 add divert natd all from 192.168.11.21 to any via tun0

# cat /etc/rc.conf |grep -v '#'
gateway_enable="YES"
netgraph_enable="YES"
firewall_enable="YES"
firewall_type="OPEN"
dhcpd_enable="YES"
dhcpd_flags="-q"
dhcpd_ifaces="rl0"
named_enable="YES"
router_flags="-s"
router="routed"
router_enable="YES"

подсказывали, что можно включить - поможет...

# sysctl -a |grep forward
net.inet.ip.forwarding: 1
net.inet.ip.fastforwarding: 0
net.inet6.ip6.forwarding: 0

Делаю пинг на подключеной машине...
# tcpdump -i ng0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ng0, link-type NULL (BSD loopback), capture size 96 bytes
23:54:47.104305 IP 192.168.11.21 > ya.ru: ICMP echo request, id 768, seq 1024, length 40
23:54:52.428643 IP 192.168.11.21 > ya.ru: ICMP echo request, id 768, seq 1280, length 40

# tcpdump -i tun0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type NULL (BSD loopback), capture size 96 bytes
23:54:47.104504 IP k152-25.saltov.net > ya.ru: ICMP echo request, id 768, seq 1024, length 40
23:54:47.229275 IP ya.ru > k152-25.saltov.net: ICMP echo reply, id 768, seq 1024, length 40
23:54:52.428841 IP k152-25.saltov.net > ya.ru: ICMP echo request, id 768, seq 1280, length 40
23:54:52.549914 IP ya.ru > k152-25.saltov.net: ICMP echo reply, id 768, seq 1280, length 40
Спасибо сказали:
Аватара пользователя
killdos
Сообщения: 187
Статус: Cклеротик
ОС: FreeBSD, NetBSD, винда

Re: ipfw+natd? Пакеты ходят в одну сторону!Где ошибка?

Сообщение killdos »

Ну как же так? А в обратную сторону кто дивертить будет? Поручик Ржевский? Чтобы всё ходило через NAT, нужно делать так:

Код: Выделить всё

100 divert 8668 ip from any to any via tun0

Если нужно натить один конкретный хост, то так:

Код: Выделить всё

100 divert 8668 ip from 192.168.11.21 to any via tun0
200 divert 8668 ip from any to me via tun0


Роутер в /etc/rc.conf всамделе не нужен.
"UNIX is simple and coherent..." (c) Dennis Ritchie, "GNU's Not UNIX" (c) Richard Stallman
Спасибо сказали:
weldpua2008
Сообщения: 19

Re: ipfw+natd? Пакеты ходят в одну сторону!Где ошибка?

Сообщение weldpua2008 »

Если нужно натить один конкретный хост, то так:
Код
100 divert 8668 ip from 192.168.11.21 to any via tun0
200 divert 8668 ip from any to me via tun0

Хм...
Сработало имено так...
ЗЫ: вообще-то Я не писал вторую часть - как Я возвращаю пакеты назад, что бы мне правильно написали :)

А пытался Я вот так:
divert 8668 ip from 192.168.11.21 to any via tun0
200 divert 8668 ip from any to 192.168.11.21 via tun0

Сча еще раз попытаюсь...
Не, не работает, когда ИП пишишь...!!!
Значит Я правильно сделал, что не написал полностью :)

СПАСИБО!!!

100 divert 8668 ip from any to any via tun0

Тоже работает, но тут сложнее - пускаются все запросы...
ЗЫЗЫЗЫ:
Была проблемка с mpd.conf - два раза роутинг по дефолту выставлял, да еще и с ошибкой один раз:
set iface route default и set iface route было, случайно заметил - проверяя все настройки, а сейчас все заработало...!!!
Спасибо сказали:
Аватара пользователя
killdos
Сообщения: 187
Статус: Cклеротик
ОС: FreeBSD, NetBSD, винда

Re: ipfw+natd? Пакеты ходят в одну сторону!Где ошибка?

Сообщение killdos »

Дело в том что вы, видимо, не до конца поняли что такое NAT (Network Address Translation). Демон natd переписывает адрес источника пакета, т.е. если пакет шёл от хоста 192.168.11.21, natd заменяет этот адрес на адрес внешнего интерфейса роутера (или того интерфейса, на котором этот natd работает). В ответ же приходят пакеты адресованные не 192.168.11.21-му хосту вашей локальной сети, а именно вашему роутеру. Его внешнему интерфейсу. Если такой ответный пакет не передать на обработку в natd, то он будет считаться предназначенным для роутера. По-этому ваши правила

Код: Выделить всё

А пытался Я вот так:
divert 8668 ip from 192.168.11.21 to any via tun0
200 divert 8668 ip from any to 192.168.11.21 via tun0
не срабатывали как того хотелось, по скольку ipfw просто не получал снаружи пакетов, предназначеных для 192.168.11.21 и, соответственно, ничего в локалку не попадало. Но в большинстве случаев, используя связку ipfw+natd, применяют первый способ. Вот пример скрипта, в котором один хост пускается через natd, остальные отдыхают (сам роутер тоже отдыхает).

Код: Выделить всё

#!/bin/sh
/sbin/ipfw -q flush
/sbin/ipfw add check-state
/sbin/ipfw add allow ip from any to any via lo0
/sbin/ipfw add divert natd ip from any to any via tun0
/sbin/ipfw add allow ip from any to any established
/sbin/ipfw add allow ip from 192.168.11.21 to any setup keep-state
/sbin/ipfw add deny log ip from any to any

Можете проверить. Только, если работаете удалённо, не забудьте открыть для себя на роутере хотябы 22-й порт, иначе не сможете больше им управлять.
"UNIX is simple and coherent..." (c) Dennis Ritchie, "GNU's Not UNIX" (c) Richard Stallman
Спасибо сказали:
weldpua2008
Сообщения: 19

Re: ipfw+natd? Пакеты ходят в одну сторону!Где ошибка?

Сообщение weldpua2008 »

Дело в том что вы, видимо, не до конца поняли что такое NAT

Дело не в этом :)
А в том, что Я применял пример, который работал, а именно:

Это для локальной Сети (Сеть -->|Ип роутера---Сеть провайдера):
natd -a 192.168.129.146 -p 8668;
ipfw add divert 8668 ip from 192.168.10.0/24 to any;
ipfw add divert 8668 ip from any to 192.168.129.146;

Я в таком, же способе хотел сделать - но Оно чего-то не работало...
Спасибо сказали:
Аватара пользователя
killdos
Сообщения: 187
Статус: Cклеротик
ОС: FreeBSD, NetBSD, винда

Re: ipfw+natd? Пакеты ходят в одну сторону!Где ошибка?

Сообщение killdos »

Всё правильно. Во втором правиле указан внешний ИП роутера, на который и приходят все пакеты снаружи. Вы же в начале поста подставляли туда ИП компа из локалки, по этому и не работало.
"UNIX is simple and coherent..." (c) Dennis Ritchie, "GNU's Not UNIX" (c) Richard Stallman
Спасибо сказали:
weldpua2008
Сообщения: 19

Re: ipfw+natd? Пакеты ходят в одну сторону!Где ошибка?

Сообщение weldpua2008 »

divert 8668 ip from 192.168.11.21 to any via tun0;
ipfw add divert 8668 ip from any to 192.168.129.146 via tun0;

Так надо было?
Спасибо сказали:
Аватара пользователя
killdos
Сообщения: 187
Статус: Cклеротик
ОС: FreeBSD, NetBSD, винда

Re: ipfw+natd? Пакеты ходят в одну сторону!Где ошибка?

Сообщение killdos »

Да.
"UNIX is simple and coherent..." (c) Dennis Ritchie, "GNU's Not UNIX" (c) Richard Stallman
Спасибо сказали: