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Кб, а проблему уже исправил).
Итак, описываю решение:
- Для начала выполнить настройки клиента торрента, у меня это 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 сервера.
Данный метод сто процентов рабочий на нормально настроенном фаерволе. =)