Адреса и сети, как и у всех, изменены.
3 интерфейса:
Код: Выделить всё
#Внешний интерфейс
em0 = 1.1.1.1
#Внутренний интерфейс в мою локалку
em1 = 172.16.0.1/24
#Интерфейс в чужую локалку
re0 = 192.168.0.2/30
#туннель до чужой локалки
gif0
tunnel 192.168.0.2 --> 192.168.0.1
inet 10.0.0.10 --> 10.0.0.9/24
Код: Выделить всё
sysctl one_pass = 0
Код: Выделить всё
#!/bin/sh
ipfw -f flush
cmd="/sbin/ipfw add"
LOOP_IFACE="lo0"
INET_IFACE="em0"
LAN_IFACE="em1"
FREND_IFACE="gif0"
TUN_FREND_IFACE="re0"
LAN_NET="172.16.0.0/20"
FREND_NET="10.0.0.0/24"
TUN_FREND_NET="192.168.0.1/30"
INET_ADDR="1.1.1.1"
LAN_ADDR="172.16.0.1"
LAN_FREND_ADDR="10.0.0.10"
# allow dynamic packet
${cmd} check-state
....
....
ipfw nat 1 config log ip ${INET_ADDR} reset same_ports deny_in
########################################
### RESERVATION 900-999 FOR BLOCK VIA IFACE
########################################
#Тут стоят deny на серые сети.
########################################
### RESERVATION 1000-09998 FOR OTHER
########################################
########################################
### RESERVATION 09999 FOR BRANCHING
########################################
${cmd} 09999 skipto 10000 all from any to any via ${LOOP_IFACE}
${cmd} 09999 skipto 11000 all from any to any via ${INET_IFACE}
${cmd} 09999 skipto 12000 all from any to any via ${LAN_IFACE}
${cmd} 09999 skipto 13000 all from any to any via ${FREND_IFACE}
${cmd} 09999 skipto 14000 all from any to any via ${TUN_FREND_IFACE}
${cmd} 09999 skipto 65000 all from any to any
########################################
### RESERVATION 10000-10999 FOR LOCAL_IFACE
########################################
${cmd} 10001 allow all from any to any via ${LOOP_IFACE}
#################################################
### outgoing traffic from localhost 10100-10499
#################################################
#################################################
### incoming traffic to localhost 10500-10999
#################################################
########################################
### RESERVATION 11000-11999 FOR INET_IFACE
########################################
#################################################
### traffic to me and our net 11100-11499
#################################################
# DNS to me
${cmd} 11105 allow all from any 53 to me via ${INET_IFACE}
# HTTP to me (squid)
${cmd} 11110 allow all from any 80 to me via ${INET_IFACE}
# SSL to me
${cmd} 11115 allow all from any 443 to me via ${INET_IFACE}
# POP over SSL to me
${cmd} 11116 allow all from any 995 to me via ${INET_IFACE}
# all ICMP to me
${cmd} 11120 allow icmp from any to me via ${INET_IFACE}
#################################################
### traffic from me and our net 11500-11999
#################################################
${cmd} 11490 allow all from ${LAN_NET} to me
# traffic from us to global will be forwarded to squid
${cmd} 11500 fwd ${LAN_ADDR},3129 all from ${LAN_NET} to not ${LAN_NET} 80 out xmit ${INET_IFACE}
[b]${cmd} 11501 allow all from ${LAN_ADDR} to ${LAN_NET} out xmit ${INET_IFACE}[/b]
${cmd} 11502 allow all from ${VOGU_NET} to ${LAN_NET} out xmit ${INET_IFACE}
${cmd} 11900 nat 1 all from ${LAN_NET} to any via ${INET_IFACE}
${cmd} 11901 allow all from me to any out xmit ${INET_IFACE}
${cmd} 11999 skipto 65000 all from any to any
########################################
### RESERVATION 12000-12999 FOR LAN_IFACE
########################################
${cmd} 12001 allow all from any to any via ${LAN_IFACE}
#################################################
### outgoing traffic from lan 12100-12499
#################################################
#################################################
### incoming traffic to lan 12500-12999
#################################################
${cmd} 12999 skipto 65000 all from any to any
########################################
### RESERVATION 13000-13999 FOR FREND
########################################
#################################################
### outgoing traffic to FREND 13100-13499
#################################################
${cmd} 13000 fwd ${LAN_ADDR},3129 all from ${LAN_NET} to ${FREND_NET} 80 via ${FREND_IFACE}
#################################################
### incoming traffic from FREND 13500-13999
#################################################
${cmd} 13990 allow all from any to any
${cmd} 13999 skipto 65000 all from any to any
${cmd} 14999 skipto 65000 all from any to any
#################################################
### LOGGING AND BLOCK
#################################################
${cmd} 65000 allow log all from any to any
Собственно, непонятно следующее: я думал, что когда идет обмен траффиком с ресурсами в FREND_NET, единственный интерфейс, который будет участвовать в перенаправлении трафика - FREND_IFACE. По факту же, у меня ответные пакеты приходят на FRAND_IFACE, теряются в дебрях ipfw и выходят почему то из INET_IFACE с адресами из FREND_NET. Разве они должны каким то образом касаться INET_IFACE?
Прошу помощи - непонятное поведение. Где допустил ошибку? Не может же быть это обычным поведением.