Войти

Показать полную графическую версию : Проброс портов через NAT kernel FreeBSD 7.2 во внутренюю сеть


dmitriadis
03-06-2009, 15:20
Добрый день!
Имеется проблема, не удаётся настроить проброс порта на машину локальной сети.

FreeBSD 7.2, firewall_nat, mpd5. Ядро Generic.
Провайдер корбина. Соответственно есть внутренняя сеть на интерфейсе re0, сеть прова на интерфейсе em0 (адрес выделяется динамически из привтного диапазона) и Интернет на интерфейсе ng0 (реальный адрес выделяется динамически). ng0 как таковой создается при запуске mpd5.

rc.conf

hostname="server.local"
gateway_enable="YES"
defaultrouter="NO"
ifconfig_re0="inet 192.168.1.1 netmask 255.255.255.0"
ifconfig_em0="DHCP"
static_routes="dns1 dns2 vpn l2tp" # corbina"
route_dns1="-host 213.234.192.8 10.112.232.1"
route_dns2="-host 85.21.192.3 10.112.232.1"
route_vpn="-net 85.21.0.0/24 10.112.232.1"
route_l2tp="-net 85.21.17.0/24 10.112.232.1"
#route_corbina="-net 10.0.0.0/8 10.112.232.1"

firewall_enable="YES"
firewall_type="OPEN"
firewall_logging="YES"
firewall_nat_enable="YES"
#firewall_nat_flags="redirect_port tcp 192.168.1.2:80 81"
firewall_nat_interface="ng0"
#natd_enable="NO"
#natd_flags="-f /etc/natd.conf"
#natd_interface="ng0"
mpd_enable="YES"

mpd чудно работает, в Интренет локалка ходит.
rc.firewall сейчас оригинальный.

Есть 2 проблемы:
1. firewall_nat_flags не работает, т.к. на момент применения правил ipfw при старте системы, интерфейс ng0, создаваемый mpd5 отсутствует и ipfw ругается. Пришлось команду ipfw nat 123 config if ng0 same_ports unreg_only redirect_port tcp 192.168.1.2:80 81 выполнять в скрипте сразу после запуска MPD5). Возможноли как то это настроить именнно в rc.conf. В natd это решалось путем добавления опции -dynamic, с ней natd запомнал правила для несозданных mpd интерфесов.
2. ни как не могу настроить проброс порта средствами ipfw_nat и ipfw, мне необходимо 192.168.1.2:80 сделать доступным на ng0:81 (т.е. на динамический_внешний_ip:81).

Перечитал маны и примеры, везде примеры описываются в привязке к конкретным ip адресам (внешнего интерфейса), у меня ситуация не такая - внешний адрес может динамически меняться.

Есть идеи?

dmitriadis
03-06-2009, 15:37
Кстати, вот что сейчас в ipfw

server# ipfw list
00050 nat 123 ip4 from any to any via ng0
00100 allow ip from any to any via lo0
00200 deny ip from any to 127.0.0.0/8
00300 deny ip from 127.0.0.0/8 to any
65000 allow ip from any to any
65535 deny ip from any to any

server# ipfw nat show config
ipfw nat 123 config if ng0 same_ports unreg_only redirect_port tcp 192.168.1.2:80 81

greg_b
02-09-2009, 21:29
dmitriadis, возможно, посмотри на заголовки скриптов Фри - там в шапке есть зависимости - мне как-то потребовалось в определенном порядке запускать mysql/mpd и еще пару скприктов - помогло курение man rc и man rcorder:

Каждый скрипт из /etc/rc.d для утилиты rcorder должен содержать специальные строчки, особенно строчку с словом "PROVIDE:" обязательную строчку "# KEYWORD: FreeBSD" и если необходимо, то строчки со словами "REQUIRE:" и "BEFORE:". Строчки должны располагаться в виде блока (одна за другой). Формат строчек строго заданный. Каждая специальная строчка должна начинаться с символа '#' за которым следует один символ 'пробел' далее одно из слов PROVIDE:, REQUIRE:, BEFORE:, KEYWORD:, затем снова символ 'пробел' и заканчивается все "обстоятельствами" (conditions).

PROVIDE: Задает имя сервиса (демона), которое обслуживает этот скрипт.
REQUIRE: Список сервисов (демонов|обстоятельств), необходимых этому скрипту для запуска своего демона (сервиса).
BEFORE: Список сервисов (демонов|обстоятельств), зависящих от демона запускаемого этим скриптом.
KEYWORD: FreeBSD или NetBSD, также в этой строчке можно написать волшебное слово "nostart" тогда rcorder исключит этот скрипт из своего списка.

Обстоятельства (conditions) могут иметь специальные обозначения:
NETWORKING
SERVERS
DAEMON
LOGIN

NETWORKING: гарантирует запуск основных сетевых служб, за которые отвечают скрипты (network1, network2, network3).
SERVERS: гарантирует запуск основных сервисов таких как (NETWORKING, ppp-user, syslogd, and isdnd) которые должны стартовать раньше чем, например named. Ранний запуск служб SERVERS требуется для тех кто определен как DAEMON.
DAEMON: контрольная точка перед общими демонами, такими как lpd, ntpd.
LOGIN: контрольная точка перед "user login" службами (inetd, sshd).

в шапку скрипта после #!bin/sh (bash,tsh и так далее) дописываешь:

#PROVIDE: script1
#REQUIRE: script2

командой
%rcorder /etc/rc.d/* /usr/local/etc/rc.d/*

проверь правильность порядка, если надо - скорректируй (man rcorder).




© OSzone.net 2001-2012