FreeBSD + ipfw + natd + torrent проброс порта для отдачи\скачки

FreeBSD + ipfw + natd + torrent проброс порта для отдачи\скачки

После установки и настройки ipfw + natd на клиентской машине, что за FreeBSD понадобился проброс порта для торрента, скачка хотя и так была, а торрент все грешил на закрытый порт, не хорошо как то… Решил исправить! Итак, система:

FreeBSD f02.24srv.ru 8.0-RELEASE FreeBSD 8.0-RELEASE #0: Tue Aug 31 15:25:52 KRAST 2010     daniil@host.local:/usr/src/sys/i386/compile/GEN010910  i386

Долго пытался понять, почему ж не пускает, вроде все настроил правильно, а нет, заглянул в логи по адресу:

/var/log/security

и смотрю там очень интересно как то все, в том числе блокировка соединений по udp порту к моему клиенту, к сожалению, часть лога приложить не могу, обнулился только что по достижении 100Кб, а проблему уже исправил).

Итак, описываю решение:

  1. Для начала выполнить настройки клиента торрента, у меня это uTorrent 2.0.4. Выбираем порт для соединений Настройка -> Конфигурация -> Соединение . Выбираем порт для соединения и снимаем галочку «Новый порт при запуске», если таковая установлена.

Теперь приступаем к настройке на FreeBSD:

Для начала расскажу немного о топологии всей сети, у меня ADSL модем, на него поднимает PPPoE соединение с FreeBSD, далее ipfw + nat раскидывает и сортирует трафик как моей душе угодно, после чего выходим на локальную сеть и отдаем\принимаем все клиентам.))

Для проброрса порта проводил несколько экспериментов и только 1 увенчался полным успехом, о котором расскажу кратко:

В natd.conf (Или прочий файл, с которого nat читает ваши настройки, описан в rc.conf: natd_flags=»-dynamic -f /etc/natd.conf») дописал проброс:

redirect_port udp 192.168.0.150:30341 30341

, где:

  • 192.168.0.150 — имя клиентской машины;
  • 30341 — порт, выбранный мной для торрента

В скрипте Вашего фаервола (так же описывается в rc.conf: firewall_script="/usr/IPFW/firewall.sh")

# - Torrent для дома от всех
${fw} add allow udp from any to ${daniil} 30341 in via ${outip}
${fw} add allow udp from any to ${daniil} 30341 out via ${inif}
${fw} add allow udp from ${daniil} 30341 to any in via ${inif}

, где:

  • ${fw} — путь к скрипту: «/sbin/ipfw -q»;
  • ${daniil} — адрес клиентской машины: 192.168.0.150;
  • ${outip} — внешний интерфейс, в моем случае tun0;
  • ${inif} — локальный IP сервера.

Данный метод сто процентов рабочий на нормально настроенном фаерволе. =)