URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 68881
[ Назад ]

Исходное сообщение
"ipnat & transparent proxy"

Отправлено Orlic , 13-Сен-06 10:16 
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? как они пакеты обрабатывают?...


Содержание

Сообщения в этом обсуждении
"ipnat & transparent proxy"
Отправлено imago , 14-Сен-06 11:22 
>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

"ipnat & transparent proxy"
Отправлено Orlic , 14-Сен-06 11:32 
в данный момент реализовал так:

${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, когда юзеров не будет



"ipnat & transparent proxy"
Отправлено Orlic , 14-Сен-06 11:34 
то есть
{ipfw} add forward 127.0.0.1,8080 tcp from ${int_net} to any 80 in via ${int_NIC} setup keep-state

"ipnat & transparent proxy"
Отправлено orlic , 20-Ноя-06 08:25 
Привет. Вот кусок моего 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


Все работает, только трафик я не считаю (а надо бы).