Hi all.
Такие дела, значит. есть ipfw, ipnat и squid? все на одном сервере.1. squid.conf
http_port 192.168.0.1:8080
http_port 127.0.0.1:8080 transparent2. ipfw.rules
${ipfw} add forward 127.0.0.1,8080 tcp from ${int_net} to any 80 in via ${int} # для HTTP заворачиваем в squid
${ipfw} add allow tcp from ${int_net} to any 443 in recv ${int} # HTTPS наружу через ipnat3. ipnat.rules
map ext_nic from 192.168.0.0/24 to any -> external_ip portmap tcp 20201:25000так вот, пакеты, идущие по HTTP, форвардятся нормально, но в сквид не попадают!!!... то есть браузер страницы не грузит, в логах сквида пусто...
в чем грабли???....
З.Ы.... есть внутренний сайт, в отдельной подсети (например, ${web}=192.168.1.2), есть правило ipfw, пропускающее пакеты на него, минуя squid:
${ipfw} add allow tcp from ${int_net} to ${web} 80 via ${int_nic} setup keep-state
${ipfw} add allow tcp from ${int_net} to ${web} 443 via ${int_nic} setup keep-stateно tcpdump ПОКАЗЫВАЕТ, что пакеты на 192.168.1.2 нататся и выходят наружу уже с публичным адресом!!!
Так что отрабатывает первым - ipnat или ipfw? как они пакеты обрабатывают?...
>Hi all.
>Такие дела, значит. есть ipfw, ipnat и squid? все на одном
>сервере.
>
>1. squid.conf
>http_port 192.168.0.1:8080
>http_port 127.0.0.1:8080 transparent
>
>2. ipfw.rules
>${ipfw} add forward 127.0.0.1,8080 tcp from ${int_net} to any 80 in via
>${int} # для HTTP заворачиваем в squid
>${ipfw} add allow tcp from ${int_net} to any 443 in recv ${int}
># HTTPS наружу через ipnat
>
>3. ipnat.rules
>map ext_nic from 192.168.0.0/24 to any -> external_ip portmap tcp 20201:25000
>
>так вот, пакеты, идущие по HTTP, форвардятся нормально, но в сквид не
>попадают!!!... то есть браузер страницы не грузит, в логах сквида пусто...
>
>
>в чем грабли???....
>
>З.Ы.... есть внутренний сайт, в отдельной подсети (например, ${web}=192.168.1.2), есть правило ipfw,
>пропускающее пакеты на него, минуя squid:
>${ipfw} add allow tcp from ${int_net} to ${web} 80 via ${int_nic}
>setup keep-state
>${ipfw} add allow tcp from ${int_net} to ${web} 443 via ${int_nic} setup
>keep-state
>
>но tcpdump ПОКАЗЫВАЕТ, что пакеты на 192.168.1.2 нататся и выходят наружу уже
>с публичным адресом!!!
>
>Так что отрабатывает первым - ipnat или ipfw? как они пакеты обрабатывают?...
>
fwd нафиг из ipfw
в ipnat.rules добавить до ната
rdr dc0 0/0 port 80 -> 127.0.0.1 port 8080 tcp
в данный момент реализовал так:${ipfw} add forward 127.0.0.1,8080 tcp from ${int_net} to any 80 in via setup keep-state
>fwd нафиг из ipfw
>в ipnat.rules добавить до ната
>rdr dc0 0/0 port 80 -> 127.0.0.1 port 8080 tcpа эта конструкция не имела своего действия, так как блокируется файрволлом. Разрешая
allow tcp from ${local_net} to any 80 via ${int_NIC}
просто напросто мы ращрешаем HTTP траффик наружу минуя squid...
З.Ы. потестирую потом с rdr dc0 0/0 port 80 -> 127.0.0.1 port 8080 tcp, когда юзеров не будет
то есть
{ipfw} add forward 127.0.0.1,8080 tcp from ${int_net} to any 80 in via ${int_NIC} setup keep-state
Привет. Вот кусок моего ipfw.rules# обычная часть
add 5 allow tcp from any to any established
add 10 allow tcp from me to any setup keep-state
add 15 allow udp from me to any keep-state# заворачиваем HTTP трафик в squid
add 20 fwd 127.0.0.1,8080 tcp from ${INT_NET} to any dst-port 80 in via ${INT_NIC} setup keep-state# разрешаем наружу HTTPS трафик, минуя squid. Трафик разрешается на входе внутреннего интерфейса, потом он натится, а на выходе внешнего интерфейса он разрешается правилом 10
add 25 allow tcp from ${INT_NET} to any dst-port 443 in recv ${INT_NIC}# ну и доступ непосредственно к squid
add 30 allow tcp from ${INT_NET} to me dst-port 8080 in recv ${INT_NIC}Теперь ipnat:
map ${EXT_NIC} from ${INT_NET} to any -> ${EXT_IP} portmap tcp 40001:50000
map ${EXT_NIC} from ${INT_NET} to any -> ${EXT_IP}И конф squid:
http_port ${INT_IP}:8080
http_port 127.0.0.1:8080 transparent
Все работает, только трафик я не считаю (а надо бы).