После установки и настройки ipfw + natd на клиентской машине, что за FreeBSD понадобился проброс порта для торрента, скачка хотя и так была, а торрент все грешил на закрытый порт, не хорошо как то… Решил исправить! Итак, система:
1 |
FreeBSD f02.24srv.ru 8.0-RELEASE FreeBSD 8.0-RELEASE #0: Tue Aug 31 15:25:52 KRAST 2010 daniil@f02.24srv.ru:/usr/src/sys/i386/compile/GEN010910 i386 |
Долго пытался понять, почему ж не пускает, вроде все настроил правильно, а нет, заглянул в логи по адресу:
1 |
/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») дописал проброс:
1 |
redirect_port udp 192.168.0.150:30341 30341 |
где:
192.168.0.150 — имя клиентской машины
30341 — порт, выбранный мной для торрента
В скрипте Вашего фаервола (так же описывается в rc.conf: firewall_script=»/usr/IPFW/firewall.sh»)
1 2 3 4 |
# - 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 сервера
Данный метод сто процентов рабочий на нормально настроенном фаерволе. =)
Error thrown
Call to undefined function ereg()