Добрый день. 
Есть роутер под FreeBSD 9.1
Крутится ipfw + kernel nat
Нужно пробрасывать определенный порт внутрь локалки. Казалось бы задача
тривиальная, но бьюсь уже второй день. Суть в том, что пробласываются
только пакеты, приходящие на основной адрес интерфейса, пакеты
приходящие на этот интерфейс на любой другой адрес попадают в НАТ и
просто отбрасываются.

ext0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        
options=c01bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,VLAN_HWTSO,LINKSTATE>
        ether 44:1e:a1:59:c5:ae
        inet 1.1.1.1 netmask 0xfffffffc broadcast x.x.x.x
        inet 2.2.2.2 netmask 0xfffffe00 broadcast x.x.x.x

${fwcmd} nat 1 config same_ports reset deny_in if ext0 \
            redirect_port tcp 10.0.0.1:25 25

Если делаю телнет на 2.2.2.2:25, то:

# ipfw show
02000      0        0 allow ip from any to any dst-port 25 via int
05000     10      572 nat 1 log logamount 100 ip from any to any via ext0
65533      0        0 allow log logamount 100 ip from any to any

Если делаю телнет на 1.1.1.1:25, то все нормально:

# ipfw show
02000      2      276 allow ip from any to any dst-port 25 via int
05000     12     1012 nat 1 log logamount 100 ip from any to any via ext0
65533      0        0 allow log logamount 100 ip from any to any


Ядро собрано с опциями:
# ipfw
options         IPFIREWALL
options         IPFIREWALL_FORWARD
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPFIREWALL_NAT
options         LIBALIAS
options         ROUTETABLES=2
options         DUMMYNET


sysctl net.inet.ip.fw.
net.inet.ip.fw.static_count: 26
net.inet.ip.fw.default_to_accept: 1
net.inet.ip.fw.tables_max: 128
net.inet.ip.fw.default_rule: 65535
net.inet.ip.fw.verbose_limit: 100
net.inet.ip.fw.verbose: 1
net.inet.ip.fw.autoinc_step: 100
net.inet.ip.fw.one_pass: 1
net.inet.ip.fw.dyn_keepalive: 1
net.inet.ip.fw.dyn_short_lifetime: 5
net.inet.ip.fw.dyn_udp_lifetime: 10
net.inet.ip.fw.dyn_rst_lifetime: 1
net.inet.ip.fw.dyn_fin_lifetime: 1
net.inet.ip.fw.dyn_syn_lifetime: 20
net.inet.ip.fw.dyn_ack_lifetime: 300
net.inet.ip.fw.dyn_max: 4096
net.inet.ip.fw.dyn_count: 1
net.inet.ip.fw.curr_dyn_buckets: 256
net.inet.ip.fw.dyn_buckets: 256
net.inet.ip.fw.enable: 1


Если нат конфигурится так:
${fwcmd} nat 1 config same_ports reset deny_in ip 1.1.1.1 \
            redirect_port tcp 10.0.0.1:25 2.2.2.2:25

то работает проброс на 2.2.2.2. Может я что-то пропустил или это фича?
Не хочется все возможные варианты подставлять в конфиг...

Ответить