Не так давно в ipfw появилася kernel nat, в ядре должно быть

1
2
options         IPFIREWALL_NAT
options         LIBALIAS

Все замечательно но есть одно НО, с пробросом портов.

Если необходимо пробросить с десяток портов то это будет выглядить так

1
2
3
4
5
6
7
8
ipfw nat 111 config if ng0 same_ports
redirect_port tcp 192.168.1.3:3000-3999 3000-3999
redirect_port udp 192.168.1.3:3000-3999 3000-3999
redirect_port tcp 192.168.1.3:21 21
redirect_port tcp 192.168.1.3:5500 5500
redirect_port tcp 192.168.1.3:5800 5800
redirect_port tcp 192.168.1.3:5900 5900
redirect_port tcp 192.168.1.3:4899 4899

что очень неудобно. Темболее, что при количестве 20-и строк и больше вываливается ошибка

1
ipfw: redirect_port: buf is too small

Решение проблемы:
1) Применить патчы к ipfw:
http://www.freebsd.org/cgi/query-pr.cgi?pr=120734
http://www.freebsd.org/cgi/query-pr.cgi?pr=121683
сам не пробовал но говорят что помагает
2) Наверное тоже самое что и предыдущее но в ручном режиме.
Для работы утилиты ipfw со строками включающими более двадцати (приблизительно, реальное ограничение зависит от количества символов в строке) ключей “redirect_port” при использовании ipfw kernel nat, необходимо выполнить следующее:

Отредактировать в заголовочном файле исходных текстов /usr/src/sys/netinet/ip_fw.h
строку

1
#define NAT_BUF_LEN     1024

указав желаемое значение, например

1
#define NAT_BUF_LEN     11264

затем запустить make install из /usr/src/include, после этого пересобрать ядро и утилиту ipfw

Источники
opennet.ru
bsdportal.ru

Нравится эта статья? Подпишитесь на RSS-ленту и получите еще больше классной информации!